2013-03-19 3 views
1

다음 perl 코드가 있습니다. 나는 -w를 사용하고 엄격하게 사용한다. 왜 @ LDRATA :: SUITES에서 오류가 발생하지 않습니까? $ x는 무엇을합니까? 변수가 선언 된 또는 정규화되지 않은 경우perl 왜 이것이 strict를 사용하여 오류를 생성하지 않습니까?

#!/grid/common/bin/perl -w 
use strict; 

for (@LDRATA::SUITES) { print("one\n"); } 
for ($LDRATA::SUITES[0]) { print("two\n"); } 
for($x) { print("three\n"); } 
+1

'$ x'이 유발하는 오류를 읽었습니까? '글로벌 심볼 "$ x"명시 적 패키지 이름 필요 ... "? 꽤 자명 한 것 같습니다. – cHao

+0

'$ main :: x'을 타이핑하면 불평하지 않을 것입니다. '$ x'에 대한 명시 적 패키지 이름은 어느 것입니까? – TLP

+0

$ x에서 오류가 발생할 것으로 예상합니다. 이것은 오류를 보여주기위한 테스트 프로그램 일뿐입니다. 왜 LDRATA가 오류를 생성하지 않는지 알고 싶습니다. 나는 당신이 입력 한 것에서 감각을 얻었습니다. 패키지 이름을 제공하면, 가짜 일지라도, 나는 오류를 얻지 않을 것입니다. – kdubs

답변

5

다른 사람이 말했듯이 엄격한 변수 사용은 변수가 또는 정규화 된으로 선언되지 않으면 오류가 발생합니다. 여기에서 그것은 완전합니다.

당신은 단지 한 곳에서 잘못된 패키지 이름을 지정하는 경우, 당신은 (하지 엄격한에서하지만) 경고를 얻을 것이다 : 둘 이상의 장소에 제공하는 경우

$ perl -w 
use strict; 

for (@LDRATA::SUITES) { print("one\n"); } 
__END__ 
Name "LDRATA::SUITES" used only once: possible typo at - line 3. 

, 펄이 없습니다 고의적이지 않다는 것을 알려주는 어떤 방법이라도 오류 또는 경고가 가능하지 않습니다.

+0

. 나는 그 대답이 될 것이라고 생각했다. 나는 오타 때문에 앞으로 더 조심해야 할 것이다. I – kdubs

+0

@kdubs 다른 방법으로 적은 수의 전역 변수를 사용하십시오. – darch

5

는 perldoc을에 따르면, use strict vars 오류가 발생합니다.

@LDRATA::SUITES은 정규화 된 변수의 예입니다.

+0

그래서 LDRATA 나 LDRATA를 어딘가에 사용하지 않아도 정규화가 완료됩니까? 패키지 이름을 여러 번 잘못 입력 한 거대한 오타가있었습니다. 나는이 경우 오류를 찾고 있었다. – kdubs

+0

예. 그 안에'::'이있는 식별자는 완전합니다. 덕분에 – mob

관련 문제