有没有使用Perl chomp的乏味方法?

时间:2018-11-14 01:16:42

标签: perl

我经常必须做:

#similarly in while (my $val = <$fh>){...}
my $val = <$fh>;
chomp $val;

my $res = `command`;
chomp $res;

如果可以的话,我宁愿跳过第二行。我看到我可以在基于以下内容的shebang行中使用-l选项:Is there anything in core Perl to auto-chomp lines from "<>" operator?

反引号有类似的东西吗?或者,是否有一种方法可以减少不太冗长的内联代码?

3 个答案:

答案 0 :(得分:4)

sub chomper(_) {
   my ($line) = @_;
   chomp($line) if defined($line);
   return $line;
}

while (defined( my $line = chomper(<>) )) {
   ...
}

答案 1 :(得分:3)

您可以将chomp包裹在整个表达式中

chomp(my $date = `date`);
say $date;

有关在文件句柄上进行“自动替换”的其他建议,请参见this答案。

更新:还有一个Backtick::AutoChomp模块,通过源过滤器实现。

编辑

我本来也有下面的代码片段,而没有实际测试

while (chomp(my $line = <$fh>)) {
    say $line;
}

根据ikegami的评论,这是不可靠的,并且会以各种方式发生错误行为。

答案 2 :(得分:3)

减少乏味的另一种选择是学会爱$_

while(<$fh>) {
   chomp;
}

local $_ = <$fh>;
chomp;

local $_ = `command`;
chomp;

行数相同,但是现在它们的长度是一半:)

编辑:由于@ysth的评论而更正,今天学到了新的东西