2014-02-27 101 views
1

我使用嚴格和警告,因爲我使用我的關鍵字與文件句柄,但它似乎並沒有工作。以下是一個例子。如何在perl中使用my關鍵字和文件句柄?

use strict; 
use warnings; 

print "ENTER THE INPUT FILE NAME:= "; 
my $filename = <STDIN>; 
chomp $filename; 

my $filehandle=''; 
unless (open($filehandle, $filename)) { 
    print "Cannot open file \"$filename\"\n\n"; 
    exit; 
} 
my @data = <$filehandle>; 
close $filename; 

我獲得以下錯誤信息:

不能使用字符串(「」)爲標誌裁判而「嚴格裁判」在使用中test.pl 9號線,1號線

我如何避免這種警告/錯誤?

回答

3

問題是您將空字符串分配給$filehandle,因此它將是字符串類型,但您傳遞的是打開的,其中expects the first parameter to be a filehandle。此外,它更清晰使用的open 3參數形式:open(FILEHANDLE, MODE, EXPR)

use strict; 
use warnings; 

print "ENTER THE INPUT FILE NAME:= "; 
my $filename = <STDIN>; 
chomp $filename; 

open my $filehandle, '<', $filename or die "Cannot open file '$filename': $!\n"; 
my @data = <$filehandle>; 
print @data; 
close $filename; 

其他說明:當你遇到一個錯誤,這是它使用die更好的輸出。這樣你的程序將返回一個錯誤代碼。

+1

好點。請注意,更多的慣用perl可能會表達爲: 'open(my $ filehandle,'<',$ filename)或死「無法打開$ filename:$!」;' –

+0

@JimDavis:複製/粘貼OP代碼的危險:)我編輯了我的答案,擺脫了parens。 –

相關問題