以下代码的输出始终为空。不确定我做错了什么,并希望得到任何帮助。如何获取散列数组中特定散列中键的值?
use strict;
use warnings;
my %dot1 = ('a'=>1,'b'=>2);
my %dot2 = ('a'=>3,'b'=>4);
my %dot3 = ('a'=>5,'b'=>6);
my %dot4 = ('a'=>7,'b'=>8);
my @array = (%dot1,%dot2,%dot3,%dot4);
my %x = $array[2];
my $y = $x->{'a'};
print "$y \n";
答案 0 :(得分:5)
您没有哈希数组。你有一个看起来像哈希的数组,其中键a
和b
各有四次,相对随机顺序。
print Dumper \@array;
$VAR1 = [
'a',
1,
'b',
2,
'a',
3,
'b',
4,
'a',
5,
'b',
6,
'a',
7,
'b',
8
];
之后,您正在使用$x->{a}
,这是从hashref a
获取密钥$x
的语法,但您只声明了哈希%a
。这反过来会中断,因为你给它一个奇数大小的一个值列表。
而是将散列的引用添加到数组中。这样,您将获得多级数据结构而不是平面列表。然后将x
变量设为标量$x
。
my %dot1 = ('a'=>1,'b'=>2);
my %dot2 = ('a'=>3,'b'=>4);
my %dot3 = ('a'=>5,'b'=>6);
my %dot4 = ('a'=>7,'b'=>8);
my @array = (\%dot1,\%dot2,\%dot3,\%dot4); # here
my $x = $array[2]; # here
my $y = $x->{'a'};
print "$y \n";
这将打印5
。
您应该阅读perlref和perlreftut中的数据结构。
答案 1 :(得分:4)
如果你想要一个哈希引用数组,你需要明确说明。
my @array = (\%dot1, \%dot2, \%dot3, \%dot4);
my %x = %{$array[2]};
my $y = $x{a};
print "$y\n";
答案 2 :(得分:2)
您要做的是将哈希的引用添加到@array
,否则perl将评估列表上下文中的哈希值。
my @array = (\%dot1,\%dot2,\%dot3,\%dot4);
my $x = $array[2];
my $y = $x->{'a'};
print "$y \n";