2010-09-09 49 views
5

有人可以向我解釋下面的代碼。這種行爲已經有一段時間了(在5.8.5,5.8.8,5.10.1,5.12.2上測試過),所以它背後必然有一個原因?

$ perl -M5.012 -E '$aa=2' 
Global symbol "$aa" requires explicit package name at -e line 1. 

$ perl -M5.012 -E '$a=2' 

謝謝。

+0

感謝拉夫和布賴恩德福伊,我應該重新檢查perldoc第一嚴格。 – est 2010-09-09 05:20:15

+0

儘管你必須擲骰子,隨時接受其中一個答案。它會讓你的名字下面的44%變大一點。 :) – 2010-09-09 19:49:40

回答

15

這是strict文檔中:

因爲他們的搜索結果排序方式(專用的),變量$ a和$ b 是不應進行檢查。

總是檢查the docs。大多數的答案在那裏:)

11

$a(還有$b等等)是一個全局變量。它旨在用於sort功能,例如, sort { $a <=> $b } @listperldoc perlvar列出了perl的全部內置全局變量及其含義。

+2

其實,我相信$ a和$ b是'包全局變量',而不是全局全局變量(如果這是有道理的話)。參見[perldoc sort](http://perldoc.perl.org/functions/sort.html),它在其中表示「...要比較的元素作爲包全局變量$ a和$ b傳遞到子例程中。 ..「。 – 2010-09-09 20:02:52

+0

是的,它們是全局變量,不像其他全局變量那樣強制進入main :: namespace,例如'$ _'。 – rafl 2010-09-09 20:05:58

相關問題