perl文件大小计算不起作用

时间:2012-11-28 09:09:15

标签: perl permissions filesize

我正在尝试编写一个简单的perl脚本,它将遍历目录中的常规文件并计算放在一起的所有文件的总大小。但是,我无法获得文件的实际大小,我无法弄清楚原因。这是代码的相关部分。我输入了用于调试的print语句:

$totalsize = 0;
while ($_ = readdir (DH)) {
   print "current file is: $_\t";
   $cursize = -s $_;           
   print "size is: $cursize\n";
   $totalsize += $cursize;
}  

这是我得到的输出:

current file is: test.pl    size is: 
current file is: prob12.pl  size is: 
current file is: prob13.pl  size is: 
current file is: prob14.pl  size is: 
current file is: prob15.pl  size is: 

因此文件大小保持空白。我尝试使用$cursize = $_,但唯一的影响是检索当前和父目录的文件大小,每个4096字节;它仍然没有获得常规文件的任何实际文件大小。

我已经在网上查看了我在perl上的几本书,似乎perl无法获取文件大小,因为脚本无法读取文件。我通过输入if语句对此进行了测试:

print "Cannot read file $_\n" if (! -r _);

对于每个文件,我都得到错误,说明无法读取该文件。我不明白为什么会这样。有问题文件的目录是我的主目录的子目录,我从我的主目录中的另一个子目录中运行脚本。我已阅读所有相关文件的权限。我尝试将文件上的模式更改为755(来自之前的711),但我仍然为每个文件输出Cannot read file

我不明白发生了什么。我在运行perl脚本时对权限的工作方式感到困惑,或者我对使用-s _的正确方法感到困惑。我感谢你的指导。谢谢!

2 个答案:

答案 0 :(得分:11)

如果不仅仅是您的拼写错误-s _而不是正确的-s $_,请记住readdir返回相对于您使用{{1}打开的目录的文件名}。正确的方法是

opendir

您还可以查看核心模块IO::Dir,它提供了my $base_dir = '/path/to/somewhere'; opendir DH, $base_dir or die; while ($_ = readdir DH) { print "size of $_: " . (-s "$base_dir/$_") . "\n"; } closedir DH; 方式,以更简单的方式访问文件名和属性。

答案 1 :(得分:0)

你有一个错字:

$cursize = -s _;

应该是:

$cursize = -s $_;