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

标签 perl chomp

自从我成为 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; autoflush,但不知道在这里还能做什么。

想法?并提前致谢....

最佳答案

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

s/\s+\z//;

您也可以使用 dos2unix在将文件传递给 Perl 之前转换文件的命令行工具。

关于perl - 为什么 Perl 的 chomp 会影响我的打印输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10738909/

相关文章:

perl - 使用 chomp() 时打印失败

perl - 如何使用 Perl 将本地时间转换为 YYYY-MM-DD

perl - 无法使用 perl IO::Socket::SSL 完成与 gateway.push.apple.com 的 SSL 握手

perl - 在 Perl 中强制使用列表上下文

perl - 是否有类似于 "undefined but true"的 "0 but true"值?

perl - 关于 chomp 的澄清

ruby - sublime text 看不懂gets.chomp

regex - Perl:Chomping字符串后,它不打印字符串的值

Perl Parallel::ForkManager 空返回