【发布时间】:2013-12-06 01:45:55
【问题描述】:
我的脚本应该递归地检查所有包含的目录和文件的当前目录。然后应该输出每个文件和最后修改的日期。
它似乎适用于当前目录中的某些目录,但不适用于其他目录。我得到了不正确的结果,不知道我的逻辑在哪里失败。
#!/usr/bin/perl -w
use Cwd;
use Time::Piece;
my $startdir = &cwd;
my @files;
sub treeExamine() {
my $workdir = shift;
chdir($workdir) or die "Can't change directory\n";
opendir(DIR,".") or die "Can't open directory\n";
my @names = readdir(DIR) or die "Can't read directory\n";
closedir(DIR);
foreach my $name(@names) {
next if($name eq ".");
next if($name eq "..");
if(-f $name) {
my $dmod = (stat $name)[9];
my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($dmod);
$day = substr('0'.$mday,-2);
$month = substr('0'.($mon+1),-2);
$year = substr($year+1900,-2);
push (@files, "$name\t Modified on : $day/$month/$year\n");
}
else {
print "not file $name\n";
}
if(-d $name) {
&treeExamine($name);
next;
}
chdir($startdir) or die "Unable to change to directory $startdir \n";
}
}
&treeExamine(".");
print @files;
【问题讨论】:
-
不要在子名称后使用空括号,这是一个原型,您很可能不想使用这些。在这种情况下,它会强制您在子例程调用中使用
&符号来覆盖原型。此外,您正在尝试重新发明轮子:File::Find将允许您递归遍历目录。