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
)进行一次显式调用,以预先检索所需的所有内容。