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

Nyl*_*ile 10 variables perl

在以下代码中:

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

my %hash = %Whatever::whatever;
my @array = @Whatever::whatever;
print Dumper \@array;
print Dumper \%hash;
Run Code Online (Sandbox Code Playgroud)

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

hob*_*bbs 12

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

  • 如果你过于狭隘地解决这个问题,那是唯一不可能的,因为严格地解决了这个问题.问题在于,对于完全合格的名称,特别严格地划分了一个例外.人们只需要更加谨慎地使用它们. (2认同)

pil*_*row 1

(根据评论改编/迁移)

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

像这样的限定标识符总是避免限制(请参阅 的文档strict 'vars')。