Perl:切片哈希数组

use*_*084 1 arrays perl slice

以下代码的输出始终为空.不确定我做错了什么,并希望得到任何帮助.如何获取散列数组中特定散列中键的值?

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)

sim*_*que 5

你没有哈希数组.你有一个看起来像哈希的数组,其中键ab每个将以相对随机的顺序存在四次.

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.

您应该阅读perlrefperlreftut中的数据结构.