7

如果 perl-hash 声明如下:

use warnings;
use strict;

my %h;

然后,我可以使用以下命令检查此哈希中是否存在键exists

if (exists $h{k3}) {
  print "k3 exists\n";
}
else {
  print "k3 doesn't exist\n";
}

由于k3不存在,脚本打印k3 doesn't exist.

我还可以检查是否ka存在k3

if (exists $h{k3}{ka}) {
  print "k3 ka exists\n";
}
else {
  print "k3 ka doesn't exist\n";
}

不幸的是,这创建了 key k3,因此另一个

if (exists $h{k3}) {
  print "k3 exists\n";
}
else {
  print "k3 doesn't exist\n";
}

现在打印k3 exists

这对我的目的来说有点不幸。我宁愿不希望 perl 创建k3密钥。

当然,我可以用类似的东西检查ka内部k3

if (exists $h{k3} and exists $h{k3}{ka})

这不会创建 key k3。但我想知道是否有一种更短(而且更清洁)的方法来检查kawithin k3

编辑问题被标记为重复。不幸的是,提到的问题中唯一的答案no autovivification只有一个赞成票,并且没有被标记为已接受的答案。就我的目的而言,这no autovification是我需要知道的功能(并且我在不知不觉中之后)。所以,我把我的问题留在这里,因为我认为另一个问题中接受的答案不是最佳答案。

不幸的是,到目前为止,没有人回答no autovification我愿意接受的答案。因此,我可能会回答我自己的问题。

4

1 回答 1

2

最简单的事情是嵌套你的 ifs:

if (exists $h{k3}) {
  print "k3 exists\n";
  if (exists $h{k3}{ka}) {
    print "k3 ka exists\n";
  }
  else {
    print "k3 ka doesn't exist\n";
  }
}
else {
  print "k3 doesn't exist\n";
}
于 2013-06-05T02:08:31.367 回答