Use*_*611 1 recursion perl readdir
我有一个文件夹,里面有很多子文件夹.在这些子文件夹中,我有许多.html文件要读取.我写了以下代码来做到这一点.它打开父文件夹和第一个子文件夹,它只打印一个.html文件.它显示错误:
NO SUCH FILE OR DIRECTORY
Run Code Online (Sandbox Code Playgroud)
我不想改变整个代码.对现有代码的任何修改对我都有好处.
use FileHandle;
opendir PAR_DIR,"D:\\PERL\\perl_programes\\parent_directory";
while (our $sub_folders = readdir(PAR_DIR))
{
next if(-d $sub_folders);
opendir SUB_DIR,"D:\\PERL\\perl_programes\\parent_directory\\$sub_folders";
while(our $file = readdir(SUB_DIR))
{
next if($file !~ m/\.html/i);
print_file_names($file);
}
close(FUNC_MODEL1);
}
close(FUNC_MODEL);
sub print_file_names()
{
my $fh1 = FileHandle->new("D:\\PERL\\perl_programes\\parent_directory\\$file")
or die "ERROR: $!"; #ERROR HERE
print("$file\n");
}
Run Code Online (Sandbox Code Playgroud)
您发布的代码看起来过于复杂.查看File :: Find :: Rule,您可以用非常少的代码完成大部分繁重工作.
use File::Find::Rule;
my $finder = File::Find::Rule->new()->name(qr/\.html?$/i)->start("D:/PERL/perl_programes/parent_directory");
while( my $file = $finder->match() ){
print "$file\n";
}
Run Code Online (Sandbox Code Playgroud)
我的意思是不是那么性感?!
用户评论说您可能希望仅使用Depth = 2条目.
use File::Find::Rule;
my $finder = File::Find::Rule->new()->name(qr/\.html?$/i)->mindepth(2)->maxdepth(2)->start("D:/PERL/perl_programes/parent_directory");
while( my $file = $finder->match() ){
print "$file\n";
}
Run Code Online (Sandbox Code Playgroud)
将适用此限制.