2013-07-15 4 views
7

증상 : $c="foo";은 오류를 발생시키고 $b="foo";은 그렇지 않습니다.Perl, 가변 동작, 이름 기반 불일치

내 스크립트는 문자 그대로 3 줄입니다. 다음은 오류 또는 경고
use strict;
$b = "foo";
print $b;
을 생산 없지만 다음과 변경하면, 나는 오류 "명시 적으로 패키지 이름이 필요합니다"얻는다.
use strict;
$c = "foo";
print $c; ,

나는 use strict; 사용하기 전에 선언 할 변수를 필요로 이해하고 my $c = "foo";-$c = "foo";을 변경하면 실제로 오류를 방지 않습니다, 그러나 이것은 혼자 차이를 설명하지 않습니다.

여기에 어떤 빛을 비추어 줄 수 있습니까? 나는 명백한 무엇인가 놓치고 있다고 확신한다. Windows 7 x64에서 Strawberry Perl v5.16.3을 실행 중입니다. 나는 strict 문서에서 c:\strawberry> perl test.pl

+6

: 따라서 $a$b 변수는이 두 항목의 값을 가지고 sort 블록에 별도의 선언없이 사용할 수 있습니다 '및'$ b'를 코드에서 일반적으로 사용할 수 있습니다. – DVK

+0

그게 좋은 습관 같아서 고마워, DVK. –

답변

8

일부 전역 변수. 때문에`$ a를 sort`, 사용해서는 안 '에 대한 그들의 특별한 의미의

use strict; 
my @nums = (1, 5, 3, 10, 7); 
my @sorted = sort { $a <=> $b } @nums 
+0

감사합니다. 설명과 예를 들어 주셔서 감사합니다. 이것은 지금 나에게 의미가있다. –

17

를 통해 원자력 발전소에서 편집 및 명령 줄에서 내 스크립트를 실행 해요 :

이 때문에 종류의()에 의해 그들의 특별한 사용

, 변수는 a와 $ b는 있습니다 $ 이이 검사에서 면제됩니다. $_, $a, $b 효과적으로 미리 선언되어 같은

+0

참조 해 주셔서 감사합니다. 매우 도움이됩니다. –