Perl 中有两种变量作用域:
- 全局变量:它们驻留在当前包中,可以从外部访问并且可以具有“本地”值。该名称可以用作“stash”、包变量哈希/符号表中的键。
- 词法变量:它们驻留在当前范围内(大致由大括号分隔)。没有可以检查的符号表。
词法变量和全局变量互不干扰,可以有两个不同的变量同名。
大多数 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 中)干预变量名和存储是模拟引用的唯一方法。这些用法现在大多已经过时了约 2 年,因为有可用的参考资料(更安全的方法)。