如何在重度嵌套的哈希中查找和搜索密钥?

时间:2014-05-01 00:40:03

标签: perl

我正在尝试检查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的值。

有人能帮助我吗?我没有以正确的方式接近这一点。是否有一个整洁的小键查找功能或可能的东西?

1 个答案:

答案 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;
    }
}