【发布时间】:2014-04-03 10:29:32
【问题描述】:
所以我知道你可以在子程序中,使用 opendir 打开目录,然后使用 readdir 读取当前工作目录中的所有文件,然后将所有文件推送到一个数组中。如果它是一个文件,则遍历该数组,然后打印该文件或将该文件推送到一个新数组中,否则如果它是一个目录,则再次递归调用子例程。我不明白的是我会在哪里指定深度。任何帮助是极大的赞赏。
以下是我在您的帮助下得出的解决方案:
read_dir('test', 1);
sub read_dir {
$dir = shift;
$level = shift;
chdir ($dir);
opendir(DIR, '.') or die "Can't open $dir: $!";
@filesarray = readdir (DIR) or die;
closedir(DIR);
my @files;
foreach my $file (@filesarray) {
if (-f $file && $file =~ /\.txt$/i){
push @files, $file;
} ## end of if
elsif (-d $file) {
next if ($file eq ".");
next if ($file eq "..");
$dir = $file;
read_dir($dir, $level+1); ## QUESTION IS HERE?????
} ## end of elsif
} ## end of foreach
foreach my $file1 (@files) {
print "$file1\n";
}
} ## end of sub read_dir
【问题讨论】:
标签: perl recursion directory subdirectory depth