为什么Perl没有严格警告未申报的$ a?

est*_*est 5 perl strictures

有人可以向我解释下面的代码.这种行为已经有一段时间了(在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'
Run Code Online (Sandbox Code Playgroud)

谢谢.

bri*_*foy 15

这是严格的文件:

由于sort()的特殊用途,变量$ a和$ b免于此检查.

请务必查看文档.大多数答案都在那里:)


raf*_*afl 11

$a(以及$b许多其他人)是一个全局变量.它旨在用于该sort功能,例如sort { $a <=> $b } @list.perldoc perlvar列出了所有perl的内置全局变量及其含义.

  • 实际上,我认为$ a和$ b是'package globals'而不是全局全局变量(如果这有意义的话).参见[perldoc sort](http://perldoc.perl.org/functions/sort.html),其中显示"...要比较的元素作为包全局变量$ a和$ b传递到子例程中. ..". (2认同)