症状:$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
答案 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