我正在尝试检查BIG哈希是否有来自小哈希的任何密钥并查看它们是否存在,以及它们是否使用小哈希中的更新值修改了BigHash。
所以查找哈希看起来像这样:
configure =(
CommonParameter => {
'SibSendOverride' => 'true',
'SibOverrideEnabledFlag' => 'true',
'SiPosition' => '8',
'Period' => '11'
}
)
但是BigHash非常嵌套..来自小哈希CommonParameter
的键/哈希configure
存在于BigHash中。
有人可以帮我/建议一些想法吗?
以下是BigHash示例:
%BigHash = (
'SibConfig' => {
'CELL' => {
'Sib9' => {
'HnbName' => 'HnbName',
'CommonParameter' => {
'SibSendOverride' => 'false',
'SibMaskOverrideEnabledFlag' => 'false',
'SiPosition' => '0',
'Period' => '8'
}
}
}
},
)
我希望我的问题清楚。如果存在这些密钥,则尝试根据Lookup Hash修改重度嵌套的BigHash的值。
有人能帮助我吗?我没有以正确的方式接近这一点。是否有一个整洁的小键查找功能或可能的东西?
答案 0 :(得分:2)
尝试Data::Search
。
use Data::Search;
@results = Data::Search::datasearch(
data => $BigHash, search => 'keys',
find => 'CommonParameter',
return => 'hashcontainer');
foreach $result (@results) {
# result is a hashref that has 'CommonParameter' as a key
if ($result->{CommonParameter}{AnotherKey} ne $AnotherValue) {
print STDERR "AnotherKey was ", $result->{CommonParameter}{AnotherKey},
" ... fixing\n";
$result->{CommonParameter}{AnotherKey} = $AnotherValue;
}
}