以下代码的输出始终为空.不确定我做错了什么,并希望得到任何帮助.如何获取散列数组中特定散列中键的值?
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";
Run Code Online (Sandbox Code Playgroud)
你没有哈希数组.你有一个看起来像哈希的数组,其中键a和b每个将以相对随机的顺序存在四次.
print Dumper \@array;
$VAR1 = [
'a',
1,
'b',
2,
'a',
3,
'b',
4,
'a',
5,
'b',
6,
'a',
7,
'b',
8
];
Run Code Online (Sandbox Code Playgroud)
之后,您正在使用$x->{a},这是a从hashref 获取密钥的语法$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";
Run Code Online (Sandbox Code Playgroud)
这将打印5.
您应该阅读perlref和perlreftut中的数据结构.