在一系列键

时间:2017-11-22 14:58:43

标签: perl

我有一组存储在数组中的键,我希望将其拼接成嵌套的哈希。例如,我可能有:

$hash->{$key1} = $value;

我想要做的是在哈希中添加额外的维度,例如:

my @array = ( $key2, $key3 ) ;

给予

$hash->{$key1}->{$key2}->{$key3} = $value;

我事先并不知道数组中有多少个键。

2 个答案:

答案 0 :(得分:1)

这是你的意思吗?

use strict;
use warnings 'all';

my @keys = qw/ a b c /;
my $val = 99;

my $hash = { };

{
    my $h = $hash;

    $h = $h->{ shift @keys } = {} while @keys > 1;

    $h->{ shift @keys } = $val;
}

use Data::Dumper;
print Dumper $hash;

输出

$VAR1 = {
          'a' => {
                   'b' => {
                            'c' => 99
                          }
                 }
        };

答案 1 :(得分:1)

use Data::Diver qw( DiveVal );

DiveVal($hash, map \$_, $key1, @array) = $value;
  -or-
DiveVal($hash->{$key1}, map \$_, @array) = $value;

sub dive_val :lvalue { my $p = \shift; $p = \( $$p->{$_} ) for @_; $$p }

dive_val($hash, $key1, @array) = $value;
  -or-
dive_val($hash->{$key1}, @array) = $value;