我能使用<>运算符跳过整个文件吗?

10

下面的 Perl 代码存在明显的低效问题;

while (<>)
{
if ($ARGV =~ /\d+\.\d+\.\d+/) {next;}
... or do something useful
}

代码将逐行遍历我们不想要的文件。

针对此特定脚本运行的文件大小,这不太可能产生明显的差异,但出于学习的目的; 如何废弃整个文件并移动到下一个文件?<> 正在工作。

这样做的目的是因为此脚本运行的服务器会存储带有版本号的应用程序的旧版本文件名,我只对当前版本感兴趣。

3个回答

20

如果你能在开始读取任何文件之前过滤@ARGV,那么Paul Roub的解决方案是最好的。

如果你必须在开始迭代文件后跳过一个文件,

while (<>) {
    if (/# Skip the rest of this file/) {
        close ARGV;
        next;
    }
    print "$ARGV: $_";
}

我喜欢这个。这样你可以通过关键字轻松搜索目录中的文件: perl -E'@ARGV=<"*">; while(<>){if (/searchedWord/){say $ARGV; close ARGV;}}' - MacMartin

15

先对ARGV执行grep操作。

@ARGV = grep { $_ !~ /\d+\.\d+\.\d+/ } @ARGV;

while (<>)
{
  # do something with the other files
}

IC,你只需要像处理其他列表一样过滤@ARGV。 - Chris Huang-Leaver

9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接