2014-02-27 1 views
1

엄격한 경고를 사용하고 있는데 파일 핸들에 내 키워드를 사용하고 있지만 작동하지 않는 것 같습니다. 다음은 그 예입니다.내 키워드를 펄에서 파일 핸들과 함께 사용하는 방법은 무엇입니까?

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

좋은 점. 더 복잡한 관용어는 다음과 같이 표현할 수 있습니다 : 'open (my $ filehandle, '<', $ filename) 또는 die "$ filename : $!"을 열 수 없음; –

+0

@JimDavis : 복사/붙여 넣기 OP 코드의 위험 :) 나는 내 대답을 편집했고, 괄호를 없앴습니다. –

관련 문제