perl中是否有file::find的返回值?如何判断查找是否失败?

perl中是否有file::find的返回值?如何判断查找是否失败?,perl,file,find,Perl,File,Find,我试图学习perl,尤其是使用File::Find模块搜索图片目录树,查看是否有任何现有文件名与相机上的文件名匹配。如果文件名在那里,我将假定该文件已经从该相机传输,并且不会进一步处理它。如果找不到文件名,我想对该文件采取某种操作 我使用find2perl创建了一个基本结构,它可以用来查找文件。但是我似乎找不到一个方法来判断这个发现是否失败了。文件::Find::Find似乎没有返回任何要执行的值,我也不知道如何执行,或者如何使用它所使用的“&want”子目录中的任何返回值 确定File::Fi

我试图学习perl,尤其是使用File::Find模块搜索图片目录树,查看是否有任何现有文件名与相机上的文件名匹配。如果文件名在那里,我将假定该文件已经从该相机传输,并且不会进一步处理它。如果找不到文件名,我想对该文件采取某种操作

我使用find2perl创建了一个基本结构,它可以用来查找文件。但是我似乎找不到一个方法来判断这个发现是否失败了。文件::Find::Find似乎没有返回任何要执行的值,我也不知道如何执行,或者如何使用它所使用的“&want”子目录中的任何返回值

确定File::Find::Find是否成功查找任何匹配文件的最佳方法是什么?我是否应该使用一个全局标志变量,该变量在程序顶部设置为某个值,并且只有在查找成功时才会更改?我想我可以在查找后检查该值,看看它是否已更改(成功)或未更改(未找到)

有什么想法或建议吗

以下是基本结构:

  # Traverse desired filesystems
  File::Find::find({wanted => \&wanted}, '/files/multimedia/pictures/');
  exit;


  sub wanted {
      my ($dev,$ino,$mode,$nlink,$uid,$gid);

     if ( (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && /^$ARGV[0]\z/si ) {
        print("found: $name\n");
        }
     }

如果未找到所需的文件,则不会调用
所需的
子例程

我通常做的正是您建议的-在调用
find
之前将标志设置为false,并让
wanted
将其设置为true

在这种情况下,我实际上需要知道这些信息——我已经很久没有真正需要它了

事实上,计数可能比标志更好,因为它提供了更多的信息。以下代码:

use File::Find;

sub wanted {
    my ($dev,$ino,$mode,$nlink,$uid,$gid);
    $quant += 1;
    if ( (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && /^$ARGV[0]\z/si ) {
        print("found: $name\n");
    }
}

$quant = 0;
File::Find::find({wanted => \&wanted}, '/nosuchdir');
print ("Found $quant files in /nosuchdir\n");

$quant = 0;
File::Find::find({wanted => \&wanted}, '/tmp');
print ("Found $quant files in /tmp\n");
在我的系统上生成以下输出:

Found 0 files in /nosuchdir
Found 39 files in /tmp

这样一来,
$count
为零意味着没有找到任何文件,其他任何东西都会告诉您有文件(并告诉您有多少个)。

如果没有找到所需的文件,则不会调用
所需的
子例程

我通常做的正是您建议的-在调用
find
之前将标志设置为false,并让
wanted
将其设置为true

在这种情况下,我实际上需要知道这些信息——我已经很久没有真正需要它了

事实上,计数可能比标志更好,因为它提供了更多的信息。以下代码:

use File::Find;

sub wanted {
    my ($dev,$ino,$mode,$nlink,$uid,$gid);
    $quant += 1;
    if ( (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && /^$ARGV[0]\z/si ) {
        print("found: $name\n");
    }
}

$quant = 0;
File::Find::find({wanted => \&wanted}, '/nosuchdir');
print ("Found $quant files in /nosuchdir\n");

$quant = 0;
File::Find::find({wanted => \&wanted}, '/tmp');
print ("Found $quant files in /tmp\n");
在我的系统上生成以下输出:

Found 0 files in /nosuchdir
Found 39 files in /tmp
这样一来,
$count
为零意味着没有找到任何文件,其他任何东西都会告诉您有文件(并告诉您有多少个)。

比File::Find有更好的API比File::Find有更好的API