arrays - 如何将数组存储为 Perl 散列中的值?

标签 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 方法获取数组的。方括号与括号在定义数组时有何神奇之处,以及如何将“括号数组”转换为“方括号”数组?

最佳答案

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

以下内容都是等效的:

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

关于arrays - 如何将数组存储为 Perl 散列中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28480241/

相关文章:

C 查找静态数组大小

c - 如何在恒定时间内检查一组非重叠范围内的范围

java - HashSet<List<Integer>> 时间复杂度

hash - 是否可以解密 MD5 哈希?

Perl 拉丁语 9? Unicode - 需要添加支持

javascript - 未定义传递给数组

JavaScript 排序数组,但保持第二个数组同步

java - 困惑,为什么 Object[] objs(objs[i] 的类型是 int[])不能转换为 int[][]

postgresql - Postgresql Perl - 创建聚合函数以平均分贝

XML Twig 不会缩进新添加的元素?