Perl one-liner:如何跳转到@ARGV中的下一个文件

gle*_*man 2 perl

我在想如何在perl -ne循环中"短路"读取文件.如果我遇到某种情况,我想放弃当前文件并继续进入@ARGV中的下一个文件.这与GNU awk的方便nextfile命令类似.

像这样的东西:

perl -ne 'do_something(); next_file if some_condition()' files ...
Run Code Online (Sandbox Code Playgroud)

到处玩,我发现close ARGV实现了"转到下一个档案"的目标.

还有其他不那么神奇的方法来实现这个目标吗?

yst*_*sth 6

不,关闭ARGV是做到这一点的正确方法.

正如glenn jackman所指出的,这会产生重置$.行计数器的副作用(通常在使用ARGV时会在几个文件中继续递增),因此您可能希望保存并恢复它:

my $line = $.;
close ARGV;
$. = $line;
Run Code Online (Sandbox Code Playgroud)

  • 就我个人而言,我会单独保留“$.”,但保留一个单独的变量来计算所看到的记录的累积数量。`perl -ne '$all_nr++; 做东西; 如果有的话关闭 ARV'` (3认同)