【发布时间】:2013-05-31 08:59:47
【问题描述】:
如果一个 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。
我还可以在k3中检查ka是否存在:
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 键。
当然,我可以在k3 中检查ka,类似
if (exists $h{k3} and exists $h{k3}{ka})
它不会创建密钥k3。但我想知道是否有一种更短(而且更简洁)的方法来检查 k3 内的 ka。
编辑问题被标记为重复。不幸的是,提到的问题中提到no autovivification 的唯一答案在那里只有一个赞成票,并且没有被标记为已接受的答案。就我的目的而言,no autovification 是我需要知道的功能(而且我在不知不觉中之后)。所以,我把我的问题留在这里,因为我认为另一个问题中接受的答案不是最佳答案。
不幸的是,到目前为止,没有人回答我愿意接受的no autovification。因此,我可能会回答我自己的问题。
【问题讨论】:
-
“Autovivification”通常会做你想做的事:让中间引用迅速存在。对于使用
exists测试嵌套结构,这是不幸的。and将各个级别放在一起是通常的方法,但no autovivification可能会有所帮助(我从未使用过该模块)。 -
@amon:您应该将其提升为答案