2

実行中のコードのスニペットは次のとおりです。

    if($verbose){
            my $toPrint = "Added ";
            if($types[$count]){
                    $toPrint .= "$types[$count] ";
                    print "Type: $types[$count]\n"; #Manual debugging
                    print "\$toPrint: $toPrint\n"; #Manual debugging
            }
            if($addressTypes[$count]){
                    $toPrint .= "$addressTypes[$count] ";
                    print "Address Type: $addressTypes[$count]\n"; #Manual debugging
                    print "\$toPrint: $toPrint\n"; #Manual debugging
            }
            if($addresses[$count]){
                    $toPrint .= "$addresses[$count] ";
                    print "Address: $addresses[$count]\n"; #Manual Debugging
                    print "\$toPrint: $toPrint\n"; #Manual debugging
            }
            $toPrint .= "to the address entries\n";
            print "Final value of \$toPrint before printing: $toPrint\n"; #Manual debugging
            print $toPrint;
    }

for ループの中にあり、$count繰り返し処理を行っている変数です。このコードの特定のランスルーの出力は次のようになります。プライバシーのために、IP を ###.###.###.### に置き換えました。

    Type: zix01
    $toPrint: Added zix01
    Address Type: A
    $toPrint: Added zix01 A
    Address: ###.###.###.###
     toPrint: Added zix01 A ###.###.###.###
     to the address entries before printing: Added zix01 A ###.###.###.###

     to the address entries#.###

ご覧のとおり、これにはいくつかの問題があります。

  1. 「Address」で始まる行の次の行は、意図した $ の代わりにスペースで始まります。
  2. その次の行は、「$toPrint の最終値」ではなく「アドレス エントリへ」で始まります。
  3. その行には、末尾に「アドレスエントリへ」もありません。
  4. 最後の 2 行の間に余分な改行があります。
  5. 最後の行には、出力されるはずの変数が含まれているにもかかわらず、「追加された zix01 A」という単語が含まれていません。
  6. 最後の行には、残りの文字列の後、改行の前に出てくる最後の 5 文字を除いて、印刷されるはずの IP も含まれていません。

ここで何が起こっているのか誰にも分かりませんか?

文法のために編集されました。

4

1 に答える 1

5

\r出力のどこかに改行文字 ( ) がありますか? Unix ではperl script.pl | od -c、出力の各文字を調べるために使用します。

Windows で生成されたファイルには、多くの場合、\r\n行末があります。これらのファイルが Unix 環境で読み込まれると、chomp\n. 移植性について心配する必要があるときは、通常はスキップして、入力についてchompだけ言いs/\s+$//ます (または、末尾の空白をすべてs/[\r\n]+$//取り除きたくない場合)。

于 2013-06-26T14:32:03.160 に答える