Мне интересно, можно ли сделать следующее в Perl. Это сэкономит 40-50 строк кода.
У меня есть структура данных хэша, например:
hash_Ref->{a}->{b}->{c}->{d}->{e}->{'count'}=30
Мне интересно, есть ли способ сделать следующее:
my $hash_ref_1 = ash_Ref->{a}->{b}->{c}->{d};
и затем используйте:
$hash_ref_2->{e}.
Итак, в заключение я хочу сохранить хеш-ссылку до точки «x» в иерархии в переменной, а затем получить доступ к ссылке, на которую указывает точка «x». Я думаю, что это более ясно в приведенном выше примере.
Подробнее
Я попробовал пару вещей, но, похоже, не работает для меня. Я копирую код, но не все, что я пытался скопировать хэш. Также вывод, который я получаю, выглядит примерно так
$VAR1 = {
'e' => {
'count' => 2
},
'c' => {
'count' => 2
},
'a' => {
'count' => 2
},
'b' => {
'count' => 2
},
'd' => {
'count' => 2
}
};
где бы я ожидал что-то вроде этого:
'a' => { 'count' => 2, 'b' => { 'count' => 2, 'c' => ......} }
Вот код, который я использовал:
use strict;
use Data::Dumper;
my @array1 = ('a','b','c','d','e');
my @array2 = ('a','b','c','d','e');
my $hash;
build_hash(\@array1);
build_hash(\@array2);
sub build_hash {
my @array = @{shift @_};
my $hash_ref;
for ( my $i =0 ; $i < scalar @array ; $i++ ){
print "$i \t $array[$i] \n";
if ( exists $hash->{$array[$i]} ){
$hash->{$array[$i]}->{'count'}++;
}
else{
$hash->{$array[$i]}->{'count'}=1;
}
}
print Dumper($hash);
}
Я хочу построить иерархию хеш-ссылок на основе элементов в perl в последовательном порядке и, возможно, с использованием одного цикла, как я пытался сделать в примере кода.
Спасибо!
-Abhi