【问题标题】:How do I store an array as a value in a Perl hash?如何将数组作为值存储在 Perl 哈希中?
【发布时间】: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 方法获取我的数组。方括号与括号在定义数组时有何魔力,如何将“括号数组”转换为“方括号”数组?

【问题讨论】:

  • 括号定义了一个数组。方括号定义一个数组引用。
  • 术语 nit:方括号返回数组引用,或者更好的是,方括号评估为数组引用
  • @chilemagic 同意。出于某种原因,当我搜索类似问题时,这并不是热门话题。

标签: arrays perl hash


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

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 2016-06-16
    • 2010-09-20
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多