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

mic*_*elo 7 variables perl 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

too*_*lic 17

严格的文件:

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


amo*_*mon 8

像有些全局变量$_,$a,$b有效地预先声明.因此,可以在块中使用$a$b变量而无需额外声明sort,其中它们具有两个值的值:

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