我的结构看起来像这样(散列的散列):
%hash=(
Level1_1=> {
Level2_1 => "val1",
Level2_2=> {
Level3_1 => "val2",
Level3_2 => "val1",
Level3_3 => "val3",
},
Level2_3 => "val3",
},
Level1_2=> {
Level2_1 => "val1",
Level2_2=> {
Level3_1 => "val1",
Level3_2 => "val2",
Level3_3 => "val3",
},
Level2_3 => "val3",
},
Level1_3=> {
Level2_1 => "val1",
Level2_2 => "val2",
Level2_3 => "val3",
});
我想grep这个由“val2”过滤的嵌套结构,输出应该是:
%result=(
Level1_1=> { Level2_2=> { Level3_1 => "val2"} },
Level1_2=> { Level2_2=> { Level3_2 => "val2" } },
Level1_3=> { Level2_2 => "val2" }
);
我的第一个想法是使用这样的递归子程序:
hashwalk_v( \%hash );
sub hashwalk_v
{
my ($element, @array) = @_;
if( ref($element) =~ /HASH/ )
{
while (my ($key, $value) = each %$element)
{
if( ref($value) =~ /HASH/ ) {
push (@array, $key);
hashwalk_v($value, @array);
} else {
if ( $value =~ "val2") {
push (@array, $key);
print $_ . "\n" for @array;
} else {
@array ="";
}
}
}
}
}
但不幸的是,我无法从上一个循环中保存哈希键。有任何想法吗??