自从我成为 Perling 已经有几个月了,但我完全不明白为什么会发生这种情况......
如果重要的话,我在 OSX 上。
我正在尝试转换文件中的行,例如
08/03/2011 01:00 PDT,1.11
into stdout lines like
XXX, 20120803, 0100, KWH, 0.2809, A, YYY
Since I'm reading a file, I want to chomp
after each line is read in. However, when I chomp
, I find my printing gets all messed up. When I don't chomp
the printing is fine (except for the extra newline...). What's going on here?
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
}
使用
chomp
调用,输出全都混淆了:, A, YYY10803, 0100, 千瓦时, 1.11
如果没有
chomp
调用,它至少以正确的顺序打印,但有额外的新行:XXX, 20110803, 0100, 千瓦时, 1.11
, A, YYYY
请注意,使用
chomp
时,它就像覆盖了第一行“顶部”的换行符。我已经添加了 $|=1;
自动刷新,但不知道在这里还能做什么。想法?并提前致谢....
最佳答案
您的输入行以 CR LF 结尾。您只删除 LF。一个简单的解决方案是使用以下而不是 chomp
:
s/\s+\z//;
您还可以使用
dos2unix
命令行工具在将文件传递给 Perl 之前转换文件。关于perl - 为什么 Perl 的 chomp 会影响我的打印输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10738909/