如何在Perl中读取多个目录并读取子目录的内容?

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)

Ken*_*ric 6

您发布的代码看起来过于复杂.查看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)

将适用此限制.