为什么Perl';s chomp会影响我的打印输出吗?
我已经有好几个月没有发疯了,但我完全不明白为什么会发生这种事 我在OSX上,如果有关系的话 我正在尝试转换文件中的行,如 08/03/2011 01:00 PDT,1.11 在那里调用为什么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
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;