2013-07-15 26 views
7

症狀:$c="foo";引發錯誤,$b="foo";沒有。Perl,變量行爲,基於名稱的差異

我的腳本實際上是3行。以下不會產生錯誤或警告
use strict;
$b = "foo";
print $b;
但如果換到下面,我得到一個「需要明確的包名」的錯誤。
use strict;
$c = "foo";
print $c;

我明白use strict;需要的變量在使用前必須申報,並改變$c = "foo";my $c = "foo";確實防止錯誤,但僅此並不能解釋的差異。

任何人都可以在這裏發光?我確定我錯過了一些明顯的東西。我在Windows 7 x64上運行Strawberry Perl v5.16.3。我編輯在NPP和命令行執行我的腳本,通過c:\strawberry> perl test.pl

+6

:因此,無需額外的聲明在sort塊,他們有兩個項目的價值所使用的$a$b變量一般而言,代碼中的''和'$ b',甚至會折扣你找到的這種行爲差異。 – DVK

+0

這聽起來像一個好習慣,謝謝DVK。 –

回答

8

某些全局變量如$_,$a,$b被有效地預先聲明。由於其特殊的意義`sort`,你不應該使用`$一個

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

謝謝,我感謝你的解釋和例子。這對我來說現在是有意義的。 –

17

strict文檔:

因爲他們的搜索結果排序()特殊用途的,變量$ a和$ b是 免除此檢查。

+0

謝謝參考!很有幫助。 –