perl 变量行为,基于名称的差异

sg24os4d  于 2023-05-29  发布在  Perl
关注(0)|答案(2)|浏览(158)

症状:$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中运行草莓Perl v5.16.3。我在npp中编辑,并通过c:\strawberry> perl test.pl从命令行执行脚本

dly7yett

dly7yett1#

strict文档:
由于sort()对变量$a和$b的特殊使用,因此不进行此检查。

dw1jzc5e

dw1jzc5e2#

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

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

相关问题