Ren*_*ger 7 perl associative-array
如果perl-hash声明如下:
use warnings;
use strict;
my %h;
Run Code Online (Sandbox Code Playgroud)
然后,我可以检查此哈希中是否存在密钥exists:
if (exists $h{k3}) {
print "k3 exists\n";
}
else {
print "k3 doesn't exist\n";
}
Run Code Online (Sandbox Code Playgroud)
由于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";
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这创造了关键k3,所以另一个
if (exists $h{k3}) {
print "k3 exists\n";
}
else {
print "k3 doesn't exist\n";
}
Run Code Online (Sandbox Code Playgroud)
现在打印k3 exists.
这对我的目的来说有点不幸.我宁愿不想让perl创建k3密钥.
我可以,当然,检查ka范围内k3的东西,如
if (exists $h{k3} and exists $h{k3}{ka})
Run Code Online (Sandbox Code Playgroud)
这不会创建密钥k3.但我想知道是否有一种更短(更清洁)的方式来检查ka内部k3.
编辑问题被标记为重复.不幸的是,提到的问题中唯一的答案是提到no autovivification那里只有一个赞成,并没有被标记为已接受的答案.就我的目的而言,这no autovification是我需要知道的特征(并且我在不知不觉之后).所以,我在这里留下我的问题,因为我认为在另一个问题中接受的答案不是最佳答案.
不幸的是,到目前为止还没有人回答no autovification我想接受的内容.因此,我可以回答我自己的问题.
小智 2
最简单的事情是嵌套你的 if:
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";
}
Run Code Online (Sandbox Code Playgroud)