我已经写了以下Perl脚本,但问题是它总是在其他部分,并且不报告文件.我确实有在我输入的目录中的文件.我在这里做错了什么?
我的要求是递归访问目录中的每个文件,打开它并以字符串进行读取.但逻辑的第一部分是失败的.
#!/usr/bin/perl -w use strict; use warnings; use File::Find; my (@dir) = @ARGV; find(\&process_file,@dir); sub process_file { #print $File::Find::name."\n"; my $filename = $File::Find::name; if( -f $filename) { print " This is a file :$filename \n"; } else { print " This is not file :$filename \n"; } }
解决方法
$File :: Find :: name给出了相对于原始工作目录的路径.但是,File::Find不断更改当前的工作目录,除非另有说明.
使用no_chdir选项,或者使用只包含文件名部分的-f $_.我推荐前者.
#!/usr/bin/perl -w use strict; use warnings; use File::Find; find({ wanted => \&process_file,no_chdir => 1 },@ARGV); sub process_file { if (-f $_) { print "This is a file: $_\n"; } else { print "This is not file: $_\n"; } }