2015-12-16 50 views
-2

我想使用Perl File :: Find在目錄中搜索字符串,但它不起作用。它給了我一個錯誤:Perl文件::查找不起作用

C:/Perl64/bin/perl.exe D:/DUAN/MailScanner/GetMailForwarder.pl

Error openning file: D:\DUAN\MailScanner\valiases Permission denied

Process finished with exit code 13

這裏是我的代碼:

#!/usr/bin/perl 
use strict; 
use warnings; 
use File::Find; 
use Data::Dump qw(dump); 

my @dirs = 'D:\DUAN\MailScanner\valiases'; 

## main processing done here 
my @found_files =(); 
my $pattern = qr/World/; 

find(\&wanted, @dirs); 

sub wanted 
{ 
    next if ($File::Find::name =~ m/^\./); 

    open my $file, '<', $File::Find::name or die "Error openning file: $File::Find::name $!\n"; 

    while(defined(my $line = <$file>)) 
    { 
     if ($line =~ /$pattern/) 
     { 
      push @found_files, $_; 
      last; 
     } 
    } 

    close ($file); 
} 

foreach my $file(@found_files) 
{ 
    print $file, "\n"; 
} 
+4

代碼13是**權限被拒絕**'File :: Find'似乎工作正常 - 您無權訪問此目錄或其中的文件。 –

+5

你似乎忘記提問了。 – ikegami

+1

是D:\ DUAN \ MailScanner \ valiases文件還是文件夾? –

回答

1

非常高興地看到使用嚴格的; - 幹得好! 下面的小代碼模塊應該可以幫助您瞭解您遇到的任何問題。

use strict; 
use warnings; 
use File::Find; 
use Data::Dump qw(dump); 

my @dirs = ('D:\DUAN\MailScanner\valiases', 'D:\DUAN\additionalPath'); 
foreach my $dir (@dirs) 
{ 
    print "WARNING: $dir is not a directory/folder.\n" unless (-d $dir); 
} 

## main processing done here 
my @found_files =(); 
my $pattern = qr/World/; 

find(\&wanted, @dirs); 

sub wanted 
{ 
    next if ($File::Find::name =~ m/^\./); 
    if (-r $File::Find::name) 
    { 
     open my $file, '<', $File::Find::name or die "Error reading file: $File::Find::name $!\n"; 

     while (my $line = <$file>) 
     { 
      if ($line =~ m/$pattern/) 
      { 
       push @found_files, $_; 
       last; 
      } 
     } 

     close ($file); 
    } 
    else 
    { 
     print "WARNING: $File::Find::name is not readable. Skipping...\n"; 
    } 
} 

foreach my $file (@found_files) 
{ 
    print "$file\n"; 
}