【发布时间】:2011-08-02 21:29:23
【问题描述】:
在 Perl 中,当我尝试循环读取 dir 并执行 for each file stat() 以获取 $size 和 $mode 时,我得到了错误的数据!
例如,我刚刚创建了一个简单的文本文件,它显示它有权限 0000 并且没有大小。
Perl 代码:
if (!@ARGV[0]) {
die("Za mało parametrów!\n");
}
$dirname = @ARGV[0];
opendir(DIR, $dirname) || die("Nie mogę otworzyć katalogu!\n");
while( $filename = readdir(DIR) ) {
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);
$perm = sprintf("%04o", $mode & 07777);
$tmp1 = int(($size/1024));
$tmp2 = length($filename);
if (($tmp1 > $tmp2) && ($perm =~ /.[^5410]../)) {
print("$filename\n");
}
}
closedir(DIR);
【问题讨论】:
-
在开发 Perl 代码时应始终启用警告(然后将 @ARGV[0] 更改为 $ARGV[0])。您的问题的解决方案在 readdir() 函数的文档的第二段中给出。