Perl自动为输出文件添加换行符

时间:2015-11-16 15:20:59

标签: perl

我使用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);

有关可能导致此问题或如何解决问题的任何想法?感谢。

1 个答案:

答案 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