以下Perl代码具有明显的低效率;

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

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

关于这个特定脚本运行的文件的大小,这不太可能产生明显的差异,但是为了学习;我怎么能破坏整个文件&lt;&gt;正在努力并转移到下一个?

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

有帮助吗?

解决方案

首先是grep ARGV。

@ARGV = grep { 

首先是grep ARGV。

<*> !~ /\d+\.\d+\.\d+/ } @ARGV; while (<>) { # do something with the other files }

其他提示

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

如果您在开始迭代后必须跳过文件,

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

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

如果您在开始迭代后必须跳过文件,

<*>"; }

Paul Roub的回答有关详细信息,请参阅 perlop手册页的IO运算符部分 。提到了使用grep的模式以及与&lt;&gt;。

相关的一些其他事项

请注意提及 ARGV: :readonly 关于以下内容:

perl dangerous.pl 'rm -rfv *|'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top