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

Posted

技术标签:

【中文标题】如何将数组作为值存储在 Perl 哈希中?【英文标题】:How do I store an array as a value in a Perl hash? 【发布时间】:2015-02-12 14:37:58 【问题描述】:

我正在尝试在 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 方法获取我的数组。方括号与括号在定义数组时有何魔力,如何将“括号数组”转换为“方括号”数组?

【问题讨论】:

perldoc.perl.org/perlreftut.html Array in value of hash perl的可能重复 括号定义了一个数组。方括号定义一个数组引用。 术语 nit:方括号返回数组引用,或者更好的是,方括号评估为数组引用 @chilemagic 同意。出于某种原因,当我搜索类似问题时,这并不是热门话题。 【参考方案1】:

哈希(和数组)元素的值是标量,因此您不能将数组存储到哈希中。

以下都是等价的:

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 分配给它,然后返回对该数组的引用。

【讨论】:

以上是关于如何将数组作为值存储在 Perl 哈希中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个数组分配给 Perl 中的哈希?

如何对 Perl 哈希值进行排序并相应地对键进行排序(可能在两个数组中)?

在我的脚本中理解指向哈希的 Perl 指针

如何在perl中删除哈希值中的重复值?

请问怎么给perl里的标量,哈希,数组赋初值?

Perl:组合两个哈希数组的值并使第二个数组的值成为输出哈希的键