有人可以向我解释下面的代码。这种行为已经有一段时间了(在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'
谢谢。
有人可以向我解释下面的代码。这种行为已经有一段时间了(在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'
谢谢。
$a
(还有$b
等等)是一个全局变量。它旨在用于sort
功能,例如, sort { $a <=> $b } @list
。 perldoc perlvar
列出了perl的全部内置全局变量及其含义。
其实,我相信$ a和$ b是'包全局变量',而不是全局全局变量(如果这是有道理的话)。参见[perldoc sort](http://perldoc.perl.org/functions/sort.html),它在其中表示“...要比较的元素作为包全局变量$ a和$ b传递到子例程中。 ..“。 – 2010-09-09 20:02:52
是的,它们是全局变量,不像其他全局变量那样强制进入main :: namespace,例如'$ _'。 – rafl 2010-09-09 20:05:58
感谢拉夫和布赖恩德福伊,我应该重新检查perldoc第一严格。 – est 2010-09-09 05:20:15
尽管你必须掷骰子,随时接受其中一个答案。它会让你的名字下面的44%变大一点。 :) – 2010-09-09 19:49:40