У меня есть структура, которая выглядит следующим образом (хэш хэш):Perl Grep вложенных хэш рекурсивного
%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 ="";
}
}
}
}
}
но к сожалению, я не могу сохранить хэш-ключ из предыдущего цикла. Любые идеи?
работаю также мелкий mpapec, спасибо! – ovntatar