我覺得File::Find::find
背後的設計選擇有點令人驚訝。我遇到的所有例子都顯示在void context中使用find
。File :: Find是否有更清晰的方式來返回想要的文件列表?
的documentation還明確,在find(\&wanted, @dirs)
的\&wanted
CODEREF並不意味着是一個過濾器(強調我自己):
的
wanted()
函數做任何你想要的驗證上每個 文件目錄。需要注意的是,儘管它的名字,在wanted()
功能是一個通用的回調函數,確實不告訴File::Find
如果一個文件被「通緝令」與否。事實上,其返回值 被忽略。
不過如果我想用它爲以類似grep
過濾器是什麼?我很好奇,想知道是否有另一種方式來寫:
use strict;
use warnings;
use feature 'say';
use File::Find;
my $wanted = qr/^\d{2}_/; # e.g.
my @wanted;
find(sub { -f && /$wanted/ && push @wanted, $_ }, '.');
# I wish my @wanted = find(...); worked
say for @wanted;
之前有人建議使用'glob'或'readdir',之所以我想用'文件::查找:: find'是因爲它的遞歸到目錄的能力。 – Zaid
我認爲你現在的代碼非常好。你爲什麼需要替代品?我可能會改說你想要的coderef,但沒有什麼不同。 – pmakholm
@pmakholm:我知道代碼沒有問題......但似乎麻煩要累積裏面'\&wanted'結果,我想知道是否有,讓我產生了一個功能或替代語法過濾了我的列表。 – Zaid