我正在编写一个只读取文件的脚本。我遇到的一个问题是,如果我传入一个路径(使用 Getoptions::Long),它会告诉我文件或目录不存在,即使它可以打印出文件名。例如:
thomaswtsang@alfred:perl$ perl ~/Dropbox/dev/test-monkey/perl/fileReader.pl --path ~/Dropbox/dev/test-monkey/diff
没有这样的文件或目录:/Users/thomaswtsang/Dropbox/dev/test-monkey/perl/fileReader.pl 第 67 行的 f1.txt。
然后... cd-ing 到那个目录...
thomaswtsang@alfred:diff$ perl ~/Dropbox/dev/test-monkey/perl/fileReader.pl --path ~/Dropbox/dev/test-monkey/diff
(1/3)正在阅读 f1.txt...
(2/3)正在阅读 f2.txt...
读 21 Bs
完全的!
我真的不明白为什么我会出现这种行为。权限问题?
my $path = shift;
my $run_in_fg = shift;
if (length($path) == 0){
if ($run_in_fg){print "Using current directory...\n";}
$path = cwd();
}
print $path . "\n";
opendir my $dir, $path or die "Cannot open directory: $!";
my @files = readdir $dir;
my $num_files = $#files;
my $i = 1;
my $total_size = 0;
$SIG{'INT'} = sub {print "\n";print_read_size($total_size); exit 1;};
foreach my $file (@files){
if ($file =~ m/^\.+$/){next;}
$file =~ s/[\r\n]+$//;
open FILE, "<", $file or die "$!:$file";
if ($run_in_fg){ print "($i/$num_files)Reading $file...\n";}
while (my $line = <FILE>){
#don't need to actually print to screen, just load to memory
}
$total_size += -s $file;
close FILE or die $!;
$i++;
}
print_read_size($total_size);
print "Complete!\n";
如果有更好的方法,请指出,谢谢!