不应该访问@Whatever ::什么产生至少一个警告而不是一个空数组?

时间:2012-05-18 04:05:16

标签: perl variables

在以下代码中:

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

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

我的理解是@Whatever ::无论是什么访问符号​​表,并且不会产生错误消息,因为符号表是一个哈希。但为什么至少没有用于访问不存在元素的警告消息?

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:1)

(从评论中调整/迁移)

我会说@Whatever::whatever标识@whatever包中名为Whatever的动态范围数组,而不是“访问符号表... [有点]哈希。“

这样的合格标识符始终避免限制(请参阅strict 'vars'的文档)。