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. 以“地址”开头的行后面的行以空格而不是预期的 $ 开头。
  2. 之后的行以“到地址条目”而不是“$toPrint 的最终值”开头。
  3. 该行的末尾也没有“到地址条目”。
  4. 最后两行之间有一个额外的换行符。
  5. 最后一行不包含单词“Added zix01 A”,即使它应该打印的变量确实如此。
  6. 最后一行也不包括它应该打印的 IP,除了它的最后 5 个字符,它们在字符串的其余部分之后但在换行符之前出现。

有谁知道这里发生了什么?

为语法编辑。

4

1 回答 1

5

您的输出中是否有回车符 ( \r)?在 Unix 上用于perl script.pl | od -c检查输出的每个字符。

在 Windows 中生成的文件通常有\r\n行尾。在 Unix 环境中读取这些文件时,chomp只会删除\n. 当我不得不担心可移植性时,我通常会跳过chomps/\s+$//在输入时说(或者s/[\r\n]+$//如果您不想删除所有尾随空格)。

于 2013-06-26T14:32:03.160 回答