我使用Perl写入文件。即使在我使用chomp
之后,它仍在同一位置的输出文件中添加换行符。我无法弄清楚原因。
示例代码(从输入文件读取,处理该行,然后将该行写入输出文件):
open(OUT, "> out.txt");
# ...
while(<STDIN>) {
# ...
my $var = substr($_, index($_, "as "));
chomp($var);
print("Var is: " . $var); # no newline
print OUT $var . ","; # adds newline before the comma
# ...
}
# ...
close(OUT);
有关可能导致此问题或如何解决问题的任何想法?感谢。
答案 0 :(得分:3)
cannonical 程序:
while(<STDIN>) {
chomp;
# ...
my $var = substr($_, index($_, "as "));
print("Var is: " . $var); # no newline
print OUT $var . ","; # adds newline before the comma
# ...
}
在大多数操作系统中,文件中的行由换行符终止。 用作新行的内容可能因操作系统而异。 Unix的 传统上使用\ 012,一种DOSish I / O使用\ 015 \ 012,Mac OS使用\ 015,z / OS使用\ 025。
Perl使用\ n来表示“逻辑”换行符,其中逻辑是什么 可能取决于使用的平台。在MacPerl中,\ n始终表示\ 015。 在EBCDIC平台上,\ n可以是\ 025或\ 045。在DOSish perls中,\ n 通常意味着\ 012,但在“文本”模式下访问文件时,perl 使用:crlf图层将其转换为(或来自)\ 015 \ 012, 取决于你是在读书还是写作。 Unix也是如此 在规范模式下ttys上的东西。 \ 015 \ 012通常被称为 CRLF。
要从文本行修剪尾随换行符,请使用chomp()。默认情况下 函数的设置查找尾随\ n字符,因此 以便携式方式修剪。
在这种情况下,您正在遇到跨平台障碍,您正在阅读os
上写的文档,来自不同且不兼容的平台。
对于隔离执行,您应该隐藏文件行结尾以匹配主机。
要永久解决此问题,您可以尝试:https://metacpan.org/pod/File::Edit::Portable。 感谢@stevieb