2017-06-01 56 views
0

我正嘗試使用perl命令打開文件。當我傳遞一個變量在文件路徑之間,Perl是不能夠打開文件:(這裏$線在Perl中打開文件時出現問題

open(FL, "<C:/Users/admin/Documents/Projects/$line/project.txt") or die "Could not open file $!"; 

,如果我試圖通過傳遞的完整路徑,而不是打開文件在路徑變量($線),Perl是能夠成功地打開文件:

open(FL, "<C:/Users/admin/Documents/Projects/projectName/project.txt") or die "Could not open file $!"; 

可能有人請指導我如何實現這一目標。我有一個項目列表,我不能通過手動傳遞每個項目的名稱,但我需要通過傳遞projectName s作爲變量$ line來實現此目的。

注:所有$線變量是我PROJECTNAME小號

+2

使用三參數open:'打開我的$ fh,'<',$ file或者死「無法打開$ file:$!」;'。你當然可以說'打開我的$ fh,'<',「/ path/$ line/etc」' – zdim

+0

你是否試圖通過使用$ line自動讀取路徑名?或者你是否聲明一個名稱數組並將它們傳遞給標量? –

+0

'my $ file =「C:/Users/admin/Documents/Projects/$line/project.txt」;打開(FL,「 ssr1012

回答

5

您是否正在從另一個文件讀取您的項目名稱?如果是這樣,你是否記得最後刪除\n(使用chomp $line或類似)?

+0

是的,我用chomp,仍然沒有輸出按照預期,我在調用$ line的時候,我可以成功地在列表中的第一個項目上工作,但是對於其他所有項目,它仍然失敗 –

+0

解決方案工作,感謝:-) –

+0

真棒的想法... – ssr1012

1

假設你$line有一些特殊字符,它不會允許的,所以我們shopuld逃脫字符,使用quotemeta

$line = qutoemeta($line); 
open my $fh, "<" ,$line or die "Error opening $!"; 

您將$!修復錯誤。您已將其添加到您的代碼中。 請按照它的意思。

+1

是的,這只是說文件無法打開。那麼,https://stackoverflow.com/a/44302114/7745725解決方案爲我工作:-) 謝謝! –