标量$ keys如何获得值1而不是undef?

时间:2013-02-14 11:22:47

标签: perl key exists

民间,

据我的理解,exists函数会检查哈希中是否存在密钥。因此,对于下面提到的情况,key1key2尚未定义。经过这一点,哈希引用$var没有键。

在调用keys(%{$var})的情况下应该返回undef。

然而,它的回归1.怎么......我在这里错过了什么?

my $var;
if (exists $var->{key1}->{key2}) {
    $var->{key1}->{key2} = 1;
}

my $keys = keys(%{$var});

print $keys;   #prints 1 to output console

2 个答案:

答案 0 :(得分:3)

您正在检查$ var-> {key1} - > {key2}这一事实会将$ var-> {key1}创建为空hashref。这可以通过以下方式看出:

use Data::Dumper;
my $var = {};
if (exists $var->{key1}->{key2}) {
    print "cannot happen\n"
}
print Dumper($var);

打印哪些:

$VAR1 = {
          'key1' => {}
        };

因此,键的标量为1,因为有一个键。

答案 1 :(得分:0)

这是autovivification。请注意,您可以使用no autovification;编译指示对整个脚本或特定词法范围禁用自动生成。