添加一个空数组到哈希

时间:2016-01-18 11:56:56

标签: perl data-structures perl-data-structures

有什么区别:

my %x;
push @{$x{'12'}}, ();

my %y;
$y{'12'} = ();

为什么以下内容适用于x而不适用于y

my @x1 = @{$x{'12'}}; #legal
my @y1 = @{$y{'12'}}; #illegal

2 个答案:

答案 0 :(得分:8)

Data::Dumper会告诉您这里的问题:

use strict;
use warnings;
use Data::Dumper;
my %x;
push @{$x{'12'}}, ();

print Dumper \%x;

my %y;
$y{'12'} = ();

print Dumper \%y;

给出:

$VAR1 = {
          '12' => []
        };
$VAR1 = {
          '12' => undef
        };

这两个命令不等同。

也许你想要:

$y{'12'} = [];

相反 - []表示匿名数组,其中()表示元素的空列表。

答案 1 :(得分:7)

$y{'12'} = ();

@{$y{'12'}} = ();

不一样。在第一种情况下,您将分配给哈希元素。在第二种情况下,您将分配给该哈希元素引用的数组。

除非它不包含对数组的引用,因此Perl通过名为“autovivification”的功能为您创建一个。换句话说,

@{$y{'12'}} = ();

相当于

@{ $y{'12'} //= [] } = ();

其中[]创建一个数组并返回对它的引用。以上简化如下:

$y{'12'} = [];