为什么Perl';s chomp会影响我的打印输出吗?

为什么Perl';s chomp会影响我的打印输出吗?,perl,chomp,Perl,Chomp,我已经有好几个月没有发疯了,但我完全不明白为什么会发生这种事 我在OSX上,如果有关系的话 我正在尝试转换文件中的行,如 08/03/2011 01:00 PDT,1.11 在那里调用chomp时,输出完全混淆了: , A, YYY10803, 0100, KWH, 1.11 注意,chomp在这里,它就像覆盖了第一行的换行符“在”上面一样。我添加了$|=1自动刷新,但不知道在这里还能做什么 想法?提前感谢……您输入的行以CR LF结尾。你只移除左前。一个简单的解决方案是使用以下内容,而不是ch

我已经有好几个月没有发疯了,但我完全不明白为什么会发生这种事

我在OSX上,如果有关系的话

我正在尝试转换文件中的行,如

08/03/2011 01:00 PDT,1.11 在那里调用
chomp
时,输出完全混淆了:

, A, YYY10803, 0100, KWH, 1.11 注意,
chomp
在这里,它就像覆盖了第一行的换行符“在”上面一样。我添加了
$|=1自动刷新,但不知道在这里还能做什么


想法?提前感谢……

您输入的行以CR LF结尾。你只移除左前。一个简单的解决方案是使用以下内容,而不是
chomp

s/\s+\z//;

您还可以使用
dos2unix
命令行工具在将文件传递到Perl之前对其进行转换。

问题在于您有DOS行结尾,并且运行在Unix版本的Perl上

解决这个问题的一个办法是使用。您可能需要安装它,但程序中不需要
use

然后你就可以写了

binmode ':raw:eol(LF)', $filehandle;

之后,无论文件的格式或来源如何,读取的行都将以标准的
“\n”

终止,数据文件从何处获取?它是否可能有奇怪的行尾字符?这又是Unix上Windows文件的常见问题。参见前面的讨论:Duh!非常感谢。就这样。 XXX, 20110803, 0100, KWH, 1.11 , A, YYY
s/\s+\z//;
binmode ':raw:eol(LF)', $filehandle;