【问题标题】:How is the scalar $keys getting value 1 instead of undef?标量 $keys 如何获得值 1 而不是 undef?
【发布时间】:2013-02-14 20:53:34
【问题描述】:

伙计们,

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

【问题讨论】:

标签: perl key exists


【解决方案1】:

您正在检查 $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' => {}
        };

所以,keys的标量是1,因为只有一个key。

【讨论】:

  • 谢谢。我总是想念术语。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 2019-03-23
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多