0
#!/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 后尝试打印该行时,它不会为该行打印任何内容。它提供以下输出:

检查线路:
检查线路:
检查线路:
检查线路:
检查线路:
检查线路:

为什么没有打印行?

4

1 回答 1

2

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


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

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

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

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

于 2014-06-04T15:54:02.497 回答