2010-05-17 88 views
3

我是Perl編碼新手。 我在執行一個小腳本時遇到問題,我有: open無法找到我作爲參數提供的文件。爲什麼Perl的open無法找到我的文件?

該文件可用:

ls -l DLmissing_months.sql 
-rwxr-xr-x 1 tlmwrk61 aimsys  2842 May 16 09:44 DLmissing_months.sql 

我的Perl腳本:

#!/usr/local/bin/perl 

use strict; 
use warnings; 

my $this_line = ""; 
my $do_next = 0; 
my $file_name = $ARGV[0]; 
open(my $fh, '<', '$file_name') 
    or die "Error opening file - $!\n"; 
close($fh); 

執行Perl腳本:

> new.pl DLmissing_months.sql 
Error opening file - No such file or directory 

什麼是我的Perl腳本的問題?

+0

我也強烈建議你,你使用['autodie'](http://search.cpan.org/~pjf/autodie-2.10/lib/autodie.pm)。它可以讓你不必輸入令人討厭的'或死'語句。其中,你忘記檢查'close($ fh)'(並且大多數人不會認爲這樣做)。 – 2010-05-17 15:22:50

回答

11

單引號不插入。您正嘗試打開一個名爲$file_name的文件,而不是打開DLmissing_months.sql。使用雙引號來插入內容。在這種情況下,你可以使用它自己的變量:

open(my $fh, '<', $file_name) 
8

你已經把$file_name單引號內。單引號是非插值的,因此您試圖讀取名爲「$ file_name」的文件,而不是稱爲「存儲在$ file_name標量中的任何文件」的文件。

刪除引號。

+0

或使用:open(my $ fh,'<',「$ file_name」) – 2010-05-17 10:05:47

+4

是的,但您爲什麼要這麼做? ''$ file_name「'中的引號是無用的。只是簡單的'$ file_name'是完全等效和更乾淨,以引導。 – 2010-05-17 10:38:16

相關問題