我经常必须做:
#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?
反引号有类似的东西吗?或者,是否有一种方法可以减少不太冗长的内联代码?
答案 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的评论而更正,今天学到了新的东西