Perl:切片哈希数组

时间:2016-10-14 13:34:47

标签: 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";

3 个答案:

答案 0 :(得分:5)

您没有哈希数组。你有一个看起来像哈希的数组,其中键ab各有四次,相对随机顺序。

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

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

答案 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";