デザインの選択File::Find::find
は少し意外なものです。私が出くわした例はすべてfind
、voidコンテキストで使用されていることを示しています。
ドキュメントはまた、の\&wanted
coderefがフィルターであることを意図していないことを明確にしてfind( \&wanted, @dirs )
います(私自身を強調しています):
この関数は、各 ファイルとディレクトリに対して
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;