过早退出Perl File :: Find

时间:2011-12-31 16:58:38

标签: regex perl recursion find directory-traversal

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

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

这通常非常灵活,但有时候我们想要提前退出查找。在Perl中是否有定义的方法来执行此操作?

2 个答案:

答案 0 :(得分:3)

尝试这种可能性对您有用:

die函数中

find并在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";
    }
}

答案 1 :(得分:2)

你可以这样做:

#!/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;
    }
}