民间,
据我的理解,exists
函数会检查哈希中是否存在密钥。因此,对于下面提到的情况,key1
或key2
尚未定义。经过这一点,哈希引用$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
答案 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;编译指示对整个脚本或特定词法范围禁用自动生成。