繁体   English   中英

使用Perl chomp有一种不那么乏味的方法吗?

[英]Is there a less tedious way to use Perl chomp?

我经常要这样做:

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

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

如果可以的话,我宁愿跳过第二行。 我看到我可以在我的shebang行中使用-l选项基于: 核心Perl中是否有任何内容可以自动从“<>”运算符中选择行?

反叛有什么类似的东西吗? 或者,有没有办法让内联更简洁?

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

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

你可以围绕整个表达式包装chomp

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

有关文件句柄上某种“自动清理”的其他建议,请参阅答案。

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

编辑

我最初还有以下片段而没有实际测试它

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

根据池上的评论,这是不可靠的,并会以各种方式行为不端。

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

while(<$fh>) {
   chomp;
}

local $_ = <$fh>;
chomp;

local $_ = `command`;
chomp;

相同数量的线,但现在它们只有一半:)

编辑:更正了感谢@ ysth的评论,今天学到了新的东西

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM