2016-11-20 100 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

'open(my $ IN,'<','$ file')'試圖打開一個名爲'dollar-f-i-l-e'的文件,因爲單個tick不插入變量。正如你已經注意到的,你可以使用雙引號'''(內插)或者(甚至更好)不使用它們中的任何一個,並簡單地寫'$ file'。 – PerlDuck

+0

@PerlDuck,你可以看到,我寫在我的回答:)另外,只需寫'$ file'更好,不能相信我錯過了這個選項! – yonyon100

+0

@PerlDuck沒理由刪除它,沒關係 – yonyon100

相關問題