0

伙计们,

据我了解,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
4

2 回答 2

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,因为只有一个键。

于 2013-02-14T11:31:58.373 回答
0

这是自动复活。请注意,您可以使用 no autovification 禁用整个脚本或特定词法范围的自动激活;语用。

于 2013-02-14T12:53:34.147 回答