2013-07-15 27 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

谢谢参考!很有帮助。 –