【发布时间】:2014-09-30 01:33:53
【问题描述】:
在这个递归扫描目录的脚本中,我想知道当“ScanDirectory($name)”被调用时会发生什么->“next”会在之后立即执行吗?
因为如果@names 在每次循环后都填充了新目录,那么我们会进入@names 中的第一个目录,如果还有其他目录,则会再次调用 Scandirectory,但之前@names 中的其他目录会被替换,并且所以他们没有被循环处理?对不起,如果我没有意义。
我知道已经有一个用于此目的的模块,但我想加深对这个循环代码如何工作的理解,以便我可以在其他情况下处理递归代码
sub ScanDirectory {
my $workdir = shift;
my $startdir = cwd;
chdir $workdir or die;
opendir my $DIR, '.' or die;
my @names = readdir $DIR or die;
closedir $DIR;
foreach my $name (@names) {
next if ($name eq ".");
next if ($name eq "..");
if (-d $name) {
ScanDirectory($name);
next;
}
}
chdir $startdir or die;
}
ScanDirectory('.');
【问题讨论】:
-
谢谢,我知道已经有一个用于此目的的模块,但我想加深对这个循环代码如何工作的理解,以便在其他情况下处理递归代码。
-
我推荐查看Higher Order Perl——它是免费的,涵盖了很多使用递归(包括目录遍历函数)的情况,以及可以使用函数式编程技术的其他方式在 Perl 中。