Perl哈希引用-是否可以将对嵌套哈希的引用放入一个变量中?

Perl哈希引用-是否可以将对嵌套哈希的引用放入一个变量中?,perl,perl-hash,Perl,Perl Hash,我有一个部分嵌套的哈希,如下所示: $href = {one=>1, word_counts=>{"the"=>34, "train"=>4} }; 我想得到$href->{'word\u counts'}{'train'}的值。 是否可以将{'word\u counts'}{'train'}放入变量中,这样我只需调用$href->$variable?否,但您可以使用Data::Diver获得给定键列表的值: my @keys =

我有一个部分嵌套的哈希,如下所示:

$href = {one=>1, word_counts=>{"the"=>34, "train"=>4} };
我想得到
$href->{'word\u counts'}{'train'}
的值。
是否可以将
{'word\u counts'}{'train'}
放入变量中,这样我只需调用
$href->$variable

否,但您可以使用Data::Diver获得给定键列表的值:

my @keys = ('word_counts', 'train');
my $value = Data::Diver::Dive($href, \(@keys));

有多种方法可以做到这一点。我认为,一旦您有了所需值的快捷方式,就不需要涉及
$href

可以引用该值,但必须取消引用:

my $value_ref = \ $href->{'word_counts'}{'train'};
say $$value_ref;
有一种说法,双方都是参考人。现在您不需要取消引用:

use v5.22;
\ my $value_ref = \ $href->{'word_counts'}{'train'};
say $value_ref; # 4
$value_ref = 17;
say $href->{'word_counts'}{'train'};  # 17
你自己走路并不难。诀窍是获取一级哈希,将其存储在变量中,然后使用该变量获取下一级。继续前进,直到你到达你想去的地方:

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
my$href={
一=>1,
字数=>{
“该”=>{
“狗”=>45,
“猫”=>24,
},
“火车”=>{
“汽车”=>7,
“残骸”=>37,
}
}
};
my@keys=qw(单词_计算火车车厢);
我的$temp=$href;
foreach my$key(@keys){
除非ref$temp eq ref{},否则die“不是hash ref at”;
除非存在$temp->{$key},否则“不在哈希中”;
$temp=$temp->{$key};
}
打印“值为”;#7.

除了YSIT和布瑞恩D FY的更一般、优秀的答案之外,还要考虑一个非常简单的(也许是太简单的)解决方案:

my @keys = qw( word_counts train);
print $href->{ $keys[0] }{ $keys[1] }; # 4
请注意,此解决方案是重复的,不优雅(键的顺序是硬编码的),并且不尝试遍历散列。但根据OP的上下文和具体任务,这可能是所需的全部