如何将数组存储为Perl哈希中的值?

时间:2015-02-12 14:37:58

标签: arrays perl hash

我试图在Perl中创建一个哈希值,它的值是数组。类似的东西:

my @array = split(/;/, '1;2');
my $hash = {'a' => @array};

令人惊讶的是,这报告(使用Data :: Dumper):

$VAR1 = {
      'a' => '1',
      '2' => undef
    };

This page给出了一个通过定义数组使用方括号将数组存储在哈希中的示例,如:

my $hash = {'a' => ['1', '2']};

这样可行,但我通过调用split方法获取了数组。关于方括号与括号之间定义数组的神奇之处,以及如何转换"括号数组"进入方括号'阵列

1 个答案:

答案 0 :(得分:2)

散列(和数组)元素的值是标量,因此您无法将数组存储到散列中。

以下都是等效的:

my $hash = { a => @array };
my $hash = { 'a', @array };
my $hash = { 'a', $array[0], $array[1] };
my $hash = { a => $array[0], $array[1] => () };

常见的解决方案是存储对数组的引用。

my @array = split(/;/, '1;2');
my $hash = { a => \@array };   # my $hash = { a => [ '1', '2' ] };

[ LIST ]同样创建一个数组,为其分配LIST,然后返回对该数组的引用。