如果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";
}
不幸的是,这会创建密钥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})
不会创建密钥k3
。但我想知道在ka
内检查k3
是否有更短(且更清晰)的方式。
修改问题标记为重复。不幸的是,提到的no autovivification
提到的问题中唯一的答案只有一个赞成,并没有标记为已接受的答案。出于我的目的,no autovification
是我需要知道的功能(并且我在不知不觉之后)。所以,我在这里留下我的问题,因为我认为在另一个问题中接受的答案不是最佳答案。
不幸的是,到目前为止,还没有人接受我要接受的no autovification
。因此,我可以回答我自己的问题。
答案 0 :(得分: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";
}