Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 文件::stat returns";没有这样的文件或目录;_Perl_Stat_File Find - Fatal编程技术网

Perl 文件::stat returns";没有这样的文件或目录;

Perl 文件::stat returns";没有这样的文件或目录;,perl,stat,file-find,Perl,Stat,File Find,当我运行此程序时: #!/usr/bin/perl -w use File::Find; use File::stat; use Time::gmtime; use Fcntl ':mode'; my %size = (); my @directory = ('.'); find( sub { my $st = stat($File::Find::name) or die "stat failed for $File::Find::name : $!";

当我运行此程序时:

#!/usr/bin/perl -w

use File::Find;
use File::stat;
use Time::gmtime;
use Fcntl ':mode';

my %size = ();
my @directory = ('.');

find(
    sub {
        my $st = stat($File::Find::name) or die "stat failed for $File::Find::name : $!";
        if ( defined $st )
        {
            my $gm = gmtime $st->mtime;
            $size{$gm->year + 1900} += $st->blksize unless S_ISDIR($st->mode);
        }
        else
        {
            print "stat failed for ", $File::Find::name, ": $!\n";
        }
    },
    @directory);

foreach my $year (keys %size)
{
    print "$year ", $size{$year}, "\n";
}
对于./1128/00,我获取的
统计失败:./size.pl第13行没有这样的文件或目录。
。但是,当我列出它时,它就在那里:

# ls ./1128/00
03  05  07  09  12  14  18  20  22  24  27  29  32  34  37  40  43  45  47  50  52  54 57  59  63  65  67  69  75  78  81  83  85  88  90  92  95
04  06  08  11  13  15  19  21  23  25  28  31  33  35  39  41  44  46  48  51  53  55  58  61  64  66  68  71  77  79  82  84  86  89  91  93
根据我为这个问题删除的诊断,我可以看到它确实成功地统计了前4个文件以及
目录和
1128
目录(
1128/00
的父目录)。它总是成功地统计相同的文件和目录,并在
1128/00
上失败。为什么会失败?

默认情况下,将在每个目录递归时对其进行更新

因此,对
/1128/00
$File::Find::name
值执行操作实际上是在查找不存在的文件
/1128//1128/00

要获得所需的行为,只需对
$\uu
变量执行文件操作即可

my $st = stat($_) or die "stat failed for $_: $!";

ls-ld./1128/00
也许它有什么有趣的地方?我看不出来:
drwxrwxr-x 75 1004 99 4096 2006年5月26日。/1128/00