2010-09-09 53 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

相关问题