Perl,可变行为,基于名称的差异

时间:2013-07-15 20:59:23

标签: perl variables strict

症状:$c="foo";抛出错误而$b="foo";没有。

我的脚本实际上是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

执行我的脚本

2 个答案:

答案 0 :(得分:17)

来自strict文档:

  

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

答案 1 :(得分:8)

某些全局变量(如$_$a$b)实际上是预先声明的。因此,$a$b变量可以在sort块中使用而无需额外声明,其中它们具有两个值的值:

use strict;
my @nums = (1, 5, 3, 10, 7);
my @sorted = sort { $a <=> $b } @nums