10

在以下代码中:

use strict;
use warnings;
use Data::Dumper;

my %hash = %Whatever::whatever;
my @array = @Whatever::whatever;
print Dumper \@array;
print Dumper \%hash;

我的理解是 @Whatever::whatever 正在访问符号表,并且不会产生错误消息,因为符号表是一个散列。但是为什么访问不存在的元素时至少没有警告消息呢?

4

2 回答 2

12

因为在 Perl 中几乎不可能捕获处于不存在状态的全局变量。只要你提到一个名字——即使只是为了引用它——它就存在。而且因为数组和散列不同于标量;一个标量存在保存 value undef,当用于大多数目的时会触发“使用未初始化的值”警告;但是数组和散列以数组和散列的形式存在,空数组或散列不足以引起警告!

于 2012-05-18T04:39:25.480 回答
1

(改编/从评论迁移)

相反,我会说它标识了一个在包中@Whatever::whatever命名的动态范围数组,而不是它“访问符号表...... [有点像]哈希”。@whateverWhatever

像这样的合格标识符总是避免限制(参见文档strict 'vars')。

于 2012-05-21T14:08:36.890 回答