Есть разные способы сделать это. Я не думаю, что вам нужно задействовать $href
, если у вас есть ярлык для нужного значения.
Вы можете взять ссылку на значение, но тогда вам придется разыменовать его:
my $value_ref = \ $href->{'word_counts'}{'train'};
say $$value_ref;
Есть экспериментальная refaliasing
функция , где обе стороны являются ссылочными. Теперь разыменование не требуется:
use v5.22;
\ my $value_ref = \ $href->{'word_counts'}{'train'};
say $value_ref; # 4
$value_ref = 17;
say $href->{'word_counts'}{'train'}; # 17
Самостоятельно пройти ха sh несложно. Уловка состоит в том, чтобы получить один уровень ha sh, сохранить его в переменной, а затем использовать эту переменную для перехода на следующий уровень. Продолжайте идти, пока не окажетесь там, где хотите:
my $href = {
one => 1,
word_counts => {
"the" => {
"dog" => 45,
"cat" => 24,
},
"train" => {
"car" => 7,
"wreck" => 37,
}
}
};
my @keys = qw( word_counts train car );
my $temp = $href;
foreach my $key ( @keys ) {
die "Not a hash ref at <$key>" unless ref $temp eq ref {};
die "<$key> not in the hash" unless exists $temp->{$key};
$temp = $temp->{$key};
}
print "Value is <$temp>"; # 7