过早退出Perl File::Find



在Perl中,我们通常使用File::Find进行递归目录遍历,并且我们经常使用类似于下面的代码来查找基于模式的特定文件。

find(&filter, $somepath);
sub filter {
    my $srcfile = $_;
    if -f $srcfile && $srcfile =~ /<CERTAIN PATTERN>/ {
        <Some processing which requires a premature exit>
    }
}

这通常是相当灵活的,但在某些情况下,我们希望提前退出查找。在Perl中有定义的方法来做到这一点吗?

试试这种可能性是否适用于您:

diefind函数中,并在eval函数中包围调用,以捕获异常并继续执行程序。

eval { find(&filter, $somepath) };
print "After premature exit of find...n";

和内部filter函数:

sub filter {
    my $srcfile = $_;
    if -f $srcfile && $srcfile =~ /<CERTAIN PATTERN>/ {
        die "Premature exit";
    }
}

你可以这样做:

#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
my $somepath = q(.);
my $earlyexit;
find(&filter, $somepath);
sub filter {
    my $srcfile = $_;
    $File::Find::prune = 1 if $earlyexit; #...skip descending directories
    return if $earlyexit;                 #...we have what we wanted
    if (  -f $srcfile && $srcfile =~ /<CERTAIN PATTERN>/ ) {
    #...<Some Processing which requires premature exit>
    #   ...
        $earlyexit = 1;
    }
}

相关内容

  • 没有找到相关文章

最新更新