【问题标题】:Enter a value into a nested hash from a sequence of keys [duplicate]从一系列键中将值输入到嵌套哈希中[重复]
【发布时间】:2017-11-23 00:21:53
【问题描述】:

我有一组键存储在一个数组中,我想将它们拼接成一个嵌套哈希。例如我可能有:

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

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

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

给予

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

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

【问题讨论】:

  • 你有什么问题?
  • 那里写着。如何插入钥匙?

标签: perl


【解决方案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
                          }
                 }
        };

【讨论】:

    【解决方案2】:
    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;
    

    【讨论】:

      猜你喜欢
      • 2018-04-21
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多