我经常写这样的代码片段:
if (exists $myHash->{$key}) {
$value = $myHash->{$key};
}
我想要做的是从哈希中获取值,如果哈希中有那个键,同时我想避免自动激活哈希条目,如果它不存在的话。
然而,这让我感到非常低效:我正在做一个哈希查找以找出一个键是否存在,然后如果它确实存在,我正在对同一个键进行另一个哈希查找以提取它。
它在多级结构中变得更加低效:
if (exists $myHash->{$key1}
&& exists $myHash->{$key1}{$key2}
&& exists $myHash->{$key1}{$key2}{$key3}) {
$value = $myHash->{$key1}{$key2}{$key3};
}
在这里,我大概做了 9 次哈希查找而不是 3 次!
perl 是否足够聪明来优化这种情况?或者是否有其他一些习惯用法可以在不自动激活条目或进行两次连续查找的情况下获取哈希值?
我知道自动生存模块,但如果可能的话,我正在寻找不需要安装 XS 模块的解决方案。此外,我还没有机会尝试这个模块,我不完全确定在多级哈希的情况下会发生什么 - pod 说:
$h->{$key}
如果密钥不存在,将返回 undef - 这是否意味着:
$h->{$key1}{$key2}
如果 $key1 不存在,我会因为我试图取消引用 undef 而死吗?如果是这样,为了避免这种情况,您可能仍然需要进行多级测试以确保存在。