Преждевременный выход из Perl File :: Find - PullRequest
2 голосов
/ 31 декабря 2011

В 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 ]

3 голосов
/ 31 декабря 2011

Попробуйте, может ли эта возможность работать для вас:

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";
    }
}
2 голосов
/ 31 декабря 2011

Вы можете сделать:

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