Wednesday, August 23, 2006
펄 에러 설명] Global symbol '$foo' requires explicit package name at bar.pl line n
#!/usr/bin/perl
use strict;
$foo = 123;
print $foo;
use strict;
$foo = 123;
print $foo;
가령 위의 펄 스크립트를 실행시키면
Global symbol "$foo" requires explicit package name at D:\Z\0.pl line 4.
Global symbol "$foo" requires explicit package name at D:\Z\0.pl line 6.
Execution of D:\Z\0.pl aborted due to compilation errors.
Global symbol "$foo" requires explicit package name at D:\Z\0.pl line 6.
Execution of D:\Z\0.pl aborted due to compilation errors.
이런 에러가 나게 됩니다.
쉽게 말해서, 변수를 선언하지 않고 사용했다는 에러입니다.
다음과 같이 변수 $foo 앞에 my 를 붙여서 선언을 하면
#!/usr/bin/perl
use strict;
my $foo = 123;
print $foo;
use strict;
my $foo = 123;
print $foo;
에러가 나지 않습니다.
또는 use strict; 라는 프라그마를 지우면 에러가 없어집니다. 그렇지만 use strict; 를 항상 사용하는 것이 좋습니다. use strict; 를 사용하지 않으면 나중에 디버깅할 때 고생하게 됩니다.
물론 더 정확하게 말하자면,
Global symbol "$foo" requires explicit package name at D:\Z\0.pl line 4.
라는 것은, "전역 변수 $foo가 속한 패키지 이름을 정확히 지정해 주지 않았다"는 뜻입니다.
만약 여기서 예로 든 변수 $foo 가, 여러분이 현재의 펄 스크립트 안에서 만든 변수가 아니라, 어떤 다른 패키지(모듈) 속에서 선언된 변수라면 그 패키지를 알려주어야 합니다.
가령 Wasabi 라는 외부 모듈 속의 $foo 라는 변수를 사용하려면
#!/usr/bin/perl
use strict;
$Wasabi::foo = "안녕하세요";
print $Wasabi::foo;
use strict;
$Wasabi::foo = "안녕하세요";
print $Wasabi::foo;
이렇게 합니다.
tag: perl
Perl | 펄
아아...감사합니다.
엄청 헤맸네요;;
<< Home