Perl:使用数组创建哈希结构的哈希值

时间:2017-02-08 16:36:32

标签: arrays perl hash

在一个循环中我回归

  • 一个数组(它的长度和数据可能在每次迭代时都会改变)
  • 1数据名称
  • 1数据值

我想创建一个散列哈希,其结构为数组,并在结尾处设置数据。

例如,如果我有:

@array = ('a','b','c');
$dataname = 'my data';
$datavalue = '123';

我想要一个哈希如下:

%hash = (
     a => {
           b => {
                 c => {
                       'my data' => '123'
                      }
                }
          }
          );

但我没有找到任何地方怎么做。

2 个答案:

答案 0 :(得分:3)

use Data::Diver qw( DiveVal );

DiveVal(\%hash, map \$_, @array, $dataname) = $datavalue;

可替换地,

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

DiveVal(\%hash, @array, $dataname) = $datavalue;

答案 1 :(得分:0)

你可以这样做,它不是最有效的,但它的工作

use Data::Dumper;

my @array = ('a','b','c');
my $dataname = 'my data';
my $datavalue = '123';

my $hash = {$dataname => $datavalue};

foreach my $item (reverse @array){
    $hash = {$item =>$hash};
}
my %hash =%$hash;
print Dumper(\%hash);

您将获得以下输出:

$VAR1 = {
          'a' => {
                   'b' => {
                            'c' => {
                                     'my data' => '123'
                                   }
                          }
                 }
        };