This question already has answers here:
Checking for existence of hash key creates key
(4个答案)
7年前关闭。
如果像这样声明了perl哈希:
然后,我可以使用
由于
我还可以检查
不幸的是,这会创建 key
现在输出
就我的目的而言,这有点不幸。我不想让Perl创建
我当然可以用类似的方法检查
不会创建 key
编辑将该问题标记为重复。不幸的是,所提及问题中唯一提及
不幸的是,到目前为止,没有人回答我想接受的
(4个答案)
7年前关闭。
如果像这样声明了perl哈希:
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
key 。我当然可以用类似的方法检查
ka
中的k3
if (exists $h{k3} and exists $h{k3}{ka})
不会创建 key
k3
。但是我想知道是否有更短的方法(和恕我直言更干净)来检查ka
中的k3
。编辑将该问题标记为重复。不幸的是,所提及问题中唯一提及
no autovivification
的答案在那里只有一个赞,并且没有被标记为已接受答案。就我的目的而言,no autovification
是我需要知道的功能(并且我不知不觉地知道了)。因此,我将问题留在这里,因为我认为另一个问题中的公认答案不是最佳答案。不幸的是,到目前为止,没有人回答我想接受的
no autovification
。因此,我可能会回答我自己的问题。 最佳答案
最简单的事情是嵌套您的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";
}
09-06 17:44