在perl中应用chomp后,行不会被打印出来

时间:2014-06-04 15:37:30

标签: perl scripting chomp

#!/usr/bin/perl
use warnings;
use Switch;

while (<>) {
  next if /^\s*\/\//;
  next if /^\s*$/;
  my $line="$_";
  chomp($line);
  print $line;
  print "Checking for line:\n$line";
}

这是我从命令行获取输入文件的代码。它将以下文件作为输入:

// Computes R0 = 2 + 3

@2
D=A
@3
D=D+A
@0
M=D

在代码中,我试图在chomp函数的帮助下删除每行末尾的换行符。但是当我尝试在应用chomp之后打印该行时,它不会为该行打印任何内容。它给出了以下输出:

Checking for line:
Checking for line:
Checking for line:
Checking for line:
Checking for line:
Checking for line:

为什么不打印线?

1 个答案:

答案 0 :(得分:2)

如果输入有\r\n行结尾,我可以重现您的问题。 chomp将删除\n,但保留\r,这将(在Unix上)将光标移动到行的开头(不会前进到下一行)。由于您的行很短,下一个输出(Checking for line)会完全覆盖它。


对不起,鲍罗丁。所以解决方案是:

  1. 不要在Windows上为您的Unix Perl脚本创建输入文件,或者如果您必须
  2. 使用强于chomp的内容。我总是喜欢用

    $line =~ s/\s+$//;
    

    只要您不需要保留尾随空格