Find :: File preprocess - PullRequest
       0

Find :: File preprocess

1 голос
/ 08 апреля 2011

Я пытаюсь указать каталог и рекурсивно найти каждый файл в подкаталогах.После того, как find chdir попадет в каталог, я хочу выполнить некоторую обработку, прежде чем find прочитает файлы.Вот упрощенный фрагмент, который демонстрирует проблему.Он не входит в подкаталоги, но, похоже, должен.Я могу убедиться, что вложенные каталоги и файлы существуют, потому что, если я вызову find без ключа предварительной обработки, я получу список.Я давно не использую Perl, поэтому я немного озадачен.


find({
  wanted => \&wanted,
  preprocess => \&preprocess
}, "/home/nelson/invoices/");


# function definitions

sub wanted {
  print "Calling wanted...\n";
  print "\t" . $File::Find::name . "\n";
}

sub preprocess{
  print "Calling preprocess...\n";
  print "\t" . $File::Find::dir . "\n";
}

А вот и вывод.


Calling wanted...
        /home/nelson/invoices
Calling preprocess...
        /home/nelson/invoices
Calling wanted...
        /home/nelson/invoices/1

1 Ответ

4 голосов
/ 09 апреля 2011

Ожидается, что функция preprocess вернет (возможно измененный) список элементов для дальнейшего изучения.В вашем примере вы можете добавить @_; в конце preprocess, чтобы вернуть неизмененные аргументы.Вы можете сделать что-то вроде grep { $_ !~ /pattern/ } @_, чтобы отфильтровать ненужные элементы и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...