Perl chomp似乎可以清理整个字符串或防止打印
我在学习Perl教程的时候发现了一个非常奇怪的行为,不知道为什么。我目前使用的是Ubuntu 18.04,使用的是随它一起发布的标准Perl,版本为5.26.1,输出缓冲关闭Perl chomp似乎可以清理整个字符串或防止打印,perl,Perl,我在学习Perl教程的时候发现了一个非常奇怪的行为,不知道为什么。我目前使用的是Ubuntu 18.04,使用的是随它一起发布的标准Perl,版本为5.26.1,输出缓冲关闭 $|=1; 在我的脚本中输入 <INPUT>; while(my $line = <INPUT>){ # chomp($line); print "before $line after"; } 结果是 废话 废话 废话 废话 废话 废话 废话 废话 [我的提示] 我不知道为什么c
$|=1;
在我的脚本中输入
<INPUT>;
while(my $line = <INPUT>){
# chomp($line);
print "before $line after";
}
结果是
废话废话
废话
废话
废话
废话
废话
废话
[我的提示]
我不知道为什么chomp会阻止所有的东西被打印出来,而且,看起来是最后一个“之后”。有人知道会发生什么吗?根据@toolic的建议,我注意到该文件是在Windows中准备的。它在每个字符串的末尾显示字符0d和0a
chomp
可能只是删除了新行字符,而回车符除了最后一个字符串外,还将输出流重置为第一个位置。这就是奇数输出的原因。
他的建议也起了作用。
因为我想使用split
,所以我选择将记录分隔符设置为\r\n
。
谢谢你的帮助 根据@toolic的建议,我注意到该文件是在Windows中准备的。它在每个字符串的末尾显示字符0d和0a
chomp
可能只是删除了新行字符,而回车符除了最后一个字符串外,还将输出流重置为第一个位置。这就是奇数输出的原因。
他的建议也起了作用。
因为我想使用split
,所以我选择将记录分隔符设置为\r\n
。
谢谢你的帮助 您的文件有Windows行结尾(CR+LF),但您使用的是Unix系统(无CR+LF)⇒LF转换层(默认情况下添加),因此您将以CR终止线结束 您应该使用类似于
dos2unix
的工具修复该文件
或者,替换
chomp代码>与s/\s+\z/代码>您的文件有Windows行结尾(CR+LF),但您使用的是Unix系统(无CR+LF)⇒LF转换层(默认情况下添加),因此您将以CR终止线结束
您应该使用类似于dos2unix
的工具修复该文件
或者,替换chomp代码>与s/\s+\z/代码>
<INPUT>;
while(my $line = <INPUT>){
print "blah";
print "$/";
print "blah\n";
}