2016-11-20 10 views
0

私はFile::Findを使用してディレクトリツリーを実行しています。読み込みのために現在のファイルを開こうとすると、私はNo such file or directoryとなります。これは、ディレクトリツリー内のすべてのファイルで発生します。ここでオープンエラー - このようなファイルやディレクトリはありません

は、私がfind()に使うサブです:

sub { 
    if (-d) { 
     return; 
    } 
    if (-f) { 
     my $file = ${File::Find::name}; 
     open (my $IN, '<', '$file') or die "$!\n"; 
     while (<$IN>) { 
      ### Do some formatting. 
     } 
     close $IN; 
    } 
} 

それは行に失敗します。

open (my $IN, '<', '$file') or die "$!\n"; 

私はそれは多分リンクの問題だと思ったが、それでもfollow => 1オプションで、私はこれを取得しますエラー。

ところで、followがないと、私が見つけた最初のディレクトリの最初のファイルにあります。エラーは最後のディレクトリの最後のファイルにあります。(どちらの場合も最初ですファイルはFile::Findによって検査される)。

答えて

2

問題を解決しました。どうやら、引用符を使用しないで、open行の一重引用符を二重引用符で置き換えるか、あるいはそれ以上のものを置き換えることは、やりました。文字列リテラル'$file'は文字列$fileを生成しますが、この名前のファイルはありません。

+5

'' $ '、' <'、' $ file ') 'という名前のファイルは、' '' 'が変数を補間しないので、' '$-f-i-l-e''という名前のファイルを開こうとします。あなたがすでに気づいたように、二重引用符 '' '(補間する)を使うこともできますし、それらを使用せずに単に' $ file'を書くこともできます。 – PerlDuck

+0

@PerlDuckご覧のとおり、答え:また、 '$ file'だけを書いた方が良いです、私はそのオプションを逃したと信じられません! – yonyon100

+0

@PerlDuckそれを削除する理由はありません。 – yonyon100

関連する問題