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