わからないよ。その代わり、それが検出されたとして、各候補ファイルを見て、あなたがリストを作成し、それを返すためにFile::Find::Ruleを待っています君は。つまり、そのツリーの下にあるすべてのファイルを見るまで待つことになります。そして、コールドスタートから十分な数のファイルを使用すると、結果が表示されるまでに時間がかかることになります。
代わりに、基礎となるFile::Findを使用して、各ファイルが遭遇したときにチェックすることができます。また、Path::Tiny's iterator
が役に立つかもしれません。
ツリーの下のすべてのファイルにアクセスするのに必要な時間は変更しません。しかし、遭遇したときに各ファイルを処理することで、1)膨大なリストを構築する必要がないので、プログラムのメモリフットプリントを減らします。 2)結果をより速く見ることになります。このような
何かは、あなたが開始されます:
#!/usr/bin/env perl
use strict;
use warnings;
use File::HomeDir qw(my_documents);
use Path::Tiny;
my $it = path(my_documents)->iterator({ recurse => 1 });
while (my $path = $it->()) {
return $path->is_file and $path =~/[.] pdf \z/ix;
do_something_with_pdf($path);
}
sub do_something_with_pdf {
print $_[0]->canonpath, "\n";
}
あなたがFile::Find::Rule
のルール一部のように行う場合は、あなたがPath::Iterator::Ruleを好むかもしれません。重要なルールは、処理を開始する前に非常に大きなリストが構築されるのを待つのを避けることです。
ただし、すべてのPDFファイルのリストをすばやく取得する必要がある場合は、The Silver Searcherの使用を検討する必要があります。
(非perl)コマンド 'find start_dir -name" * [pP] [dD] [fF] "'はどのように比較されますか?それはあなたのPerlスクリプトよりも速いですか? – PerlDuck