如何将数组作为值存储在 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 哈希中?的主要内容,如果未能解决你的问题,请参考以下文章