如何在Perl中确定文件

rod*_*wer 1 linux perl

我使用File :: Find - > find(\&f,$ directory)来查找包含某些内容的文件.我的代表的相关部分如下:

sub f {
  my $file = $File::Find::name;
  return unless -f $file;
  return unless $file =~ /$file_pattern/;

  etc...
Run Code Online (Sandbox Code Playgroud)

但问题是,每次当前目录中不存在$ file时,此代码都会返回.例如对于文件./test它很好,但对于文件./dir/test这个返回...

有没有更好的方法来知道$ file是否是文件?

Ed *_*ess 7

这条线

return unless -f $file;
Run Code Online (Sandbox Code Playgroud)

如果$ file不是文件(它可能是文件夹)将返回

这条线

return unless $file =~ /$file_pattern/;
Run Code Online (Sandbox Code Playgroud)

如果文件不包含$ file_pattern,则返回.

请注意,根据文档,此子f()不会告诉File :: Find要查找哪些文件...

wanted()函数对每个文件和目录进行任何验证.请注意,尽管名称如此,但want()函数是一个通用的回调函数,并且不会告诉File :: Find文件是否"需要".实际上,它的返回值被忽略了.

要查找文件夹中的所有文件,您可能会发现使用File :: Find :: Rule更加容易.这是一个来自文档的例子......

  my @files = File::Find::Rule->file()
                              ->name( '*.pm' )
                              ->in( @INC );
Run Code Online (Sandbox Code Playgroud)