为什么Perl的chomp会影响我的打印输出?

use*_*121 3 perl chomp

自从我去Perling已经有几个月了,但我完全不知道为什么会这样......

我是OSX的,如果重要的话.

我正在尝试变换文件中的行

08/03/2011 01:00 PDT,1.11

进入stdout线之类的

XXX, 20120803, 0100, KWH, 0.2809, A, YYY

因为我正在读取一个文件,所以我希望chomp在读完每一行之后.但是,当我chomp,我发现我的打印都搞砸了.当我不chomp打印时很好(除了额外的换行...).这里发生了什么?

while(<SOURCE>) {
    chomp;
    my @tokens = split(' |,');     # @tokens now [08/03/2011, 01:00, PDT, 1.11]

    my $converted_date = convertDate($tokens[0]);
    my $converted_time = convertTime($tokens[1]);

print<<EOF;
$XXX, $converted_date, $converted_time, KWH, $tokens[3], A, YYY
EOF
}
Run Code Online (Sandbox Code Playgroud)

通过chomp那里的调用,输出全部混淆:

, A, YYY10803, 0100, KWH, 1.11

没有chomp那里的电话,它至少以正确的顺序打印,但是有了额外的新线:

XXX, 20110803, 0100, KWH, 1.11
, A, YYY

请注意,chomp在那里,它就像在第一行"覆盖"新行一样.我添加了$|=1;autoflush,但不知道还能做什么.

思考?并提前感谢....

ike*_*ami 9

输入行以CR LF结尾.你只是删除了LF.一个简单的解决方案是使用以下代替chomp:

s/\s+\z//;
Run Code Online (Sandbox Code Playgroud)

您还可以使用dos2unix命令行工具转换文件,然后再将它们传递给Perl.