在以下代码中:
use strict;
use warnings;
use Data::Dumper;
my %hash = %Whatever::whatever;
my @array = @Whatever::whatever;
print Dumper \@array;
print Dumper \%hash;
我的理解是 @Whatever::whatever 正在访问符号表,并且不会产生错误消息,因为符号表是一个散列。但是为什么访问不存在的元素时至少没有警告消息呢?
因为在 Perl 中几乎不可能捕获处于不存在状态的全局变量。只要你提到一个名字——即使只是为了引用它——它就存在。而且因为数组和散列不同于标量;一个标量存在保存 value undef
,当用于大多数目的时会触发“使用未初始化的值”警告;但是数组和散列以空数组和散列的形式存在,空数组或散列不足以引起警告!
(改编/从评论迁移)
相反,我会说它标识了一个在包中@Whatever::whatever
命名的动态范围数组,而不是它“访问符号表...... [有点像]哈希”。@whatever
Whatever
像这样的合格标识符总是避免限制(参见文档strict 'vars'
)。