2013-02-16 105 views
3

我不明白为什么下面的例子失败(测试2)。为什么我不能从* bb glob访问变量bb?为什么我无法通过typeglob访问词法变量?

use Test::More tests => 4; 

$aa = 1; 
my $bb = 2; # HERE! 
local $cc = 3; 
our $dd = 4; 

is(${*aa}, 1, "$ \*aa should be 1"); 
is(${*bb}, 2, "$ \*bb (my) should be 2"); 
is(${*cc}, 3, "$ \*cc (local) should be 3"); 
is(${*dd}, 4, "$ \*dd (our) should be 4"); 

输出是

1..4 
ok 1 - *aa should be 1 
# Failed test '*bb (my) should be 2' 
# at untitled line 10. 
#   got: undef 
#  expected: '2' 
# Looks like you failed 1 test of 4. 
not ok 2 - *bb (my) should be 2 
ok 3 - *cc (local) should be 3 
ok 4 - *dd (our) should be 4 

在perl的5.16.0

由于

回答

7

词汇的变量(那些具有my创建)不是符号表的一部分,因此它们不能可以通过球体达到。另见Of Symbol Tables and Globs

+0

怎么样地方? – 2013-02-16 14:12:55

+1

'local'只是给一个全局变量赋值一个临时值。 – choroba 2013-02-16 14:13:16

+0

'local'不会创建变量。 'local'保存一个包变量,散列元素或数组元素的值,并将其恢复到范围退出。 – ikegami 2013-02-16 18:42:46

相关问题