perl文件::查找和_

perl文件::查找和_,perl,stat,Perl,Stat,我使用File::Find浏览大量文件,然后根据其大小、年龄等进行清理。我通过windows网络共享访问这些文件,因此stat调用非常昂贵 代码看起来像这样 sub findItems { my $item = $File::Find::name; my $dir = $File::Find::dir; my $itemName = $_; if (-f $item) { .. } elsif (-d $item) { .. } my $age = -M $i

我使用
File::Find
浏览大量文件,然后根据其大小、年龄等进行清理。我通过windows网络共享访问这些文件,因此stat调用非常昂贵

代码看起来像这样

sub findItems
{
  my $item = $File::Find::name;
  my $dir  = $File::Find::dir;
  my $itemName = $_;

  if    (-f $item) { .. }
  elsif (-d $item) { .. }

  my $age = -M $item;
  my $size = -s $item;
我发现这要花很多时间。罪魁祸首是3次呼叫
-f/-d
-M
-s
,都需要一个新的
统计数据。所以我把它改成了

sub findItems
{
  my $item = $File::Find::name;
  my $dir  = $File::Find::dir;
  my $itemName = $_;

  if    (-f $item) { .. }
  elsif (-d $item) { .. }

  my $age = -M _;
  my $size = -s _;
这几乎使我从4个
stat
调用减少了一半的时间。我说4是因为我知道在
File::find中也有一个
stat
调用,我的代码中有3个

我的问题是,我可以依靠
stat
调用
文件::Find
并将我的代码更改为这个值吗

sub findItems
{
  my $item = $File::Find::name;
  my $dir  = $File::Find::dir;
  my $itemName = $_;

  if    (-f _) { .. }
  elsif (-d _) { .. }

  my $age = -M _;
  my $size = -s _;
这将再次将所需时间减半。我想我必须检查
文件::Find
代码,看看除了
$item

感谢

基于“保证在调用用户想要的()函数之前调用lstat。这将启用涉及u的快速文件检查。请注意,如果未设置follow或follow_fast,则此保证不再有效。”

因此,我建议,在任何其他情况下,您都不能依赖它。

“我可以依赖
stat
调用
文件::Find
”——可能,但我不会。仅仅依靠你在代码中能看到(和控制)的东西只需要再调用一次,对吗?不妨对
stat
(或
File::stat
)进行一次显式调用,以预先检索所需的所有内容。