我正在寻找一种更好的方法来首先“测试”哈希键是否存在,然后再使用它。我目前正在编写一个事件日志解析器,将十六进制数字解码为字符串。因为我不能确定我的解码表包含十六进制数字,所以在将值分配给新变量之前,我首先需要检查 key 是否存在于散列中。所以我经常做的是:
if ($MEL[$i]{type} eq '5024') {
$MEL[$i]{decoded_inline} = $decode_hash{checkpoint}{"$MEL[$i]{raw}[128]"}
if exists ($decode_hash{checkpoint}{"$MEL[$i]{raw}[128]"})
}
我不喜欢的是表达式
$decode_hash{checkpoint}{"$MEL[$i]{raw}[128]"}
在我的代码中出现了两次。上面的行有更好或更短的版本吗? 最佳答案
是的,有一个更简单的方法。您知道只能将引用存储在数组或散列中,对吗?嗯,这有一个很好的副作用。您可以引用深度散列或数组槽,然后将它们视为标量引用。不幸的副作用是它自动激活了插槽,但是如果您总是要分配给该插槽,并且只想先进行一些检查,那么避免一遍又一遍地输入内容并不是一个坏方法 - 作为以及重复索引结构。
my $ref = \$decode_hash{checkpoint}{"$MEL[$i]{raw}[128]"};
unless ( defined( $$ref )) {
...
$$ref = {};
...
}
关于perl - 在分配之前测试哈希条目是否存在的更好方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13430273/