一段Perl代码获取指定目录下的文件

sub FindFileInDir
{
 my $dir = $_[0];
 #print "$dir\n";
 opendir(DIR, $dir|| die "can't open this $dir");
 my @files = readdir(DIR);
 closedir(DIR);
 for my $file (@files){
 next if($file =~ m/\.$/ || $file =~ m/\.\.$/);
  if ($file =~ /\.(c|h|cpp)$/i)
  {
   print "$dir\/$file \n";
   #push(@FileFolder, "$dir\/$file");
  }
  elsif(-d "$dir/$file")
  {
   &FindFileInDir("$dir/$file" );
  }
 }
}

如果你不喜欢递归,我们可以试试迭代的方式。

sub FindFileInDirWithStack
{
 my $dir = $_[0];
 my @FolderStack = ();
 
 push(@FolderStack, $dir);
 while(1)
 {
  my $currentSearchFolder = pop(@FolderStack);
  if(defined($currentSearchFolder) == 0)
  {
   last;
  }
  opendir(DIR, $currentSearchFolder|| die "can't open this $currentSearchFolder");
  my @files = readdir(DIR);
  closedir(DIR);
  for my $file (@files){
   next if($file =~ m/\.$/ || $file =~ m/\.\.$/);
   if ($file =~ /\.(c|h|cpp)$/i)
   {
    print "$currentSearchFolder\/$file \n";
   }
   elsif(-d "$currentSearchFolder/$file")
   {
    push(@FolderStack, "$currentSearchFolder/$file");
   }
  }  
 }
}

你可能感兴趣的:(一段Perl代码获取指定目录下的文件)