15

私は次のperlスクリプトを書きましたが、問題は常にelse部分にあり、ファイルではないと報告しています。入力で指定しているディレクトリにファイルがあります。ここで何が間違っていますか?

私の要件は、ディレクトリ内のすべてのファイルに再帰的にアクセスし、それを開いて文字列で読み取ることです。しかし、ロジックの最初の部分は失敗しています。

#!/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";
    }
}
4

1 に答える 1

27

$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";
    }
}
于 2011-03-09T07:50:22.340 に答える