Windows 平台上,Perl文件测试的问题

Windows 平台上,Perl文件测试的问题

Windows 平台上,Perl文件测试的问题
环境:Windows平台上,ActivePerl 5.10
下面是我写的程序,目的是搜索指定目录下面,所有符合扩展名为.java文件。并将搜索过到的目录和符合要求的文件都写入一个文件中。

#查找一个目录下面所有的文件及子目录下的文件,从文件中找出指定
#模式的字符窜,并将结果记录到一个文件中去
$root_dir = 'D:\StarTeamWork\xxt\jxxxt';          #查找开始的根目录
$file_ext_pattern = '.*\.java';     #只处理指定扩展名的文件,也是正则模式
$dir_pattern = '.*(\.).*';   #因为无法使用文件测试功能,我就用正则表达式代替了

$result_file = 'd:\perl_out.txt'; #结果将被输出到这个文件中
opendir D_ROOT, $root_dir
     or die 'Cannot open the root dir, please check the path or dir first! ERROR: $!';

     open RESULT,">$result_file";
     
     #对目录中的内容进行迭代
     foreach my $file (readdir D_ROOT){          
               #如果不包含点,那么这个文件就是目录,然后对这个目录应用目录搜索
               &search_dir($root_dir,$file) unless $file =~ /$dir_pattern/;     #.*(\.).*
               #next ;
          
               #如果文件符合指定的模式,就应用文件搜索
               &search_file($file) if $file =~ /$file_ext_pattern/;
     }
closedir D_ROOT;     

sub search_dir{
     my ($root,$dir) = @_;
     $dir = "$root\\$dir" ;
     
     print RESULT '+'."$dir\n";
     
     #chdir $dir;
     opendir D_DIR, $dir or warn "Cannot open the dir during the iterator! $! \nThe dir is : $dir";
          foreach my $file (readdir D_DIR){
               &search_dir($dir,$file) unless $file =~ /$dir_pattern/;
               &search_file($file) if $file =~ /$file_ext_pattern/;
          }          
     closedir D_DIR;
}

sub search_file{
     my $file = shift @_;
     print RESULT "\t"."$file\n";
}

------------------------------------------------------------------
我在程序里面,对目录的判断用的是正则表达式,原理是:只要某个文件不包含“.”,就认定它是目录。这个还存在一定的问题。比如,对于一个Entry文件,会被认作是目录。

但是如果我用文件测度的话,如:
&search_dir ($root, $file ) if -d $file;  #如果是目录,就应用目录搜索
那么结果就相当的惨烈了。它只能搜索到一个叫做 '.'的当前目录,和一个'..'父目录,其余的目录它根本就是测不出来?这是为什么?而且文本文件测试 -f 也不管用。




   

刚开始学习Perl,很喜欢,.
刚开始学习Perl,很喜欢,也有很多困惑。希望能有志同道合者结伴而行!
这是我的电子邮件:ungshow@163.com