Perl 将空数组添加到哈希
以下两者之间的区别是什么:Perl 将空数组添加到哈希,perl,data-structures,perl-data-structures,Perl,Data Structures,Perl Data Structures,以下两者之间的区别是什么: my %x; push @{$x{'12'}}, (); 以及: 为什么以下内容适用于x而不适用于y my @x1 = @{$x{'12'}}; #legal my @y1 = @{$y{'12'}}; #illegal Data::Dumper将在此处告诉您问题: use strict; use warnings; use Data::Dumper; my %x; push @{$x{'12'}}, (); print Dumper \%x; my %y;
my %x;
push @{$x{'12'}}, ();
以及:
为什么以下内容适用于x
而不适用于y
my @x1 = @{$x{'12'}}; #legal
my @y1 = @{$y{'12'}}; #illegal
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'} = [];
相反-[]
表示匿名数组,其中()
表示元素的空列表
$y{'12'} = ();
及
它们不一样。在第一种情况下,您将分配给哈希元素。在第二种情况下,您将分配给该散列元素引用的数组
只是它不包含对数组的引用,所以Perl通过一个名为“autovivification”的特性为您创建一个数组。换句话说,
@{$y{'12'}} = ();
相当于
@{ $y{'12'} //= [] } = ();
其中,[]
创建一个数组并返回对该数组的引用。鉴于$y{'12'}
不存在,因此未定义,上述内容简化为:
$y{'12'} = [];
这是一个好问题。它提醒我们,
perl-e'使用Data::Dumper;我的%y$y{'12'}=()$y{'13'}=[]$y{'14'}=未定义$y{'15'}=“”;打印转储程序\%y;'代码>可以是教育性的/有教育意义的。而不是-e使用…
你可以只使用-M
自动激活会发生什么?在较新的PERL中,定义了或两个语句$hash{'whatever2'}/=[];推送$hash{'whatever2'},“stuff”在编写代码>几个月后,我觉得它比使用push@{$hash{'whatever2'}}“stuff”更具可读性代码>。但是<代码>推送参考是实验性的…
。@G.Cito,关于“自动活体化会发生什么情况?”,没有计划或建议进行任何更改我想,push$hash{'whatever2'},“stuff”
已经不存在了
和推送$hash{'whatever'}->@*,“stuff”代码>@G.Cito,是的,这在5.24中不再是经验
@{ $y{'12'} //= [] } = ();
$y{'12'} = [];