有两种变量的作用域在Perl:
- 全局变量:他们居住在当前包,可以从外部访问,并且可以拥有“本地”的价值观。该名称可以用作“隐藏”中的密钥,即包变量散列/符号表。
- 词法变量:它们驻留在当前范围内(大致用大括号分隔)。没有可以检查的符号表。
词法变量和全局变量不会干涉,可以有两个不同的变量具有相同的名称。
大多数Perl变量魔术都会发生在全局变量上。以下语法适用于全局变量:
our $var;
$::var;
$main::var;
${'var'};
local $var;
但不是my $var
。
因此,我们可以这样写:
@::array = qw(a b c);
my @secondArray = @{array};
哪个副本的阵列。我们还可以看一下阵列与存储在一个变量名:
@::array = qw(a b c);
my $name = "array";
my @secondArray = @{$name};
最后一行缩写为… = @$name
。
这对于词汇变化不可行,因为它们不驻留在藏匿处。
local
函数将一个“本地”值赋给当前范围内的全局变量(仅适用于全局变量)以及在此范围内调用的所有子范围内(“动态范围”)。
最初(在Perl 4中)插入变量名称和存储是模拟引用的唯一方法。这些用法现在大都过时了大约20年,因为有参考文献(更安全)。
请尝试[perldoc here](http://perldoc.perl.org/functions/local.html) –
谢谢,但我不认为perldoc显示了与编译器视角的本质区别。也许我今晚必须重读Perl书。 – thinkhy
Duplicate:http://stackoverflow.com/questions/3603466/how-is-my-faster-than-local-in-perl和http://stackoverflow.com/questions/129607/what-is-the-difference -between-my-and-local-in-perl – jm666