Как ограничить результаты File :: Find :: Rule - PullRequest
0 голосов
/ 28 июня 2018

Я должен искать в большой структуре каталогов файлов с помощью File :: Find :: Rule (или аналогичной).

В целях тестирования я бы хотел, чтобы top останавливался после определенного количества найденных файлов. Я использовал ->exec() с state или глобальными переменными области видимости, но я не нашел способа выйти из поиска без использования меток ... Есть ли способ сделать это элегантно?

1 Ответ

0 голосов
/ 28 июня 2018

Один из способов прервать поиск - вызвать die из обработчика exec, а затем использовать eval, чтобы перехватить исключение во внешней области видимости. Например:

use feature qw(say);
use strict;
use warnings;
use File::Find::Rule;

my $count = 0;
my @files;
eval {
    File::Find::Rule->new->file
      ->exec( sub { die if $count++ > 10; push @files, $_[2]; return 1; })->in('.');
};
if( $@ ) {
    say "Aborted search after ", $count - 1, " matches";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...