Perl - 设置哈希数组并访问哈希中的项目

时间:2014-02-19 03:13:41

标签: arrays perl hash

  1. 哈希数组的设置是否存在语法错误?它没有给出任何警告,但我也无法打印项目,所以我希望设置不是问题。

  2. 如何在x内访问例如list5进行打印?

  3. use strict;
    use warnings;
    my (%list0, %list1, %list2, %list3, %list4, %list5);
    
    %list5 = (
    "list" => 5,
    "x" => 1,
    "y" => 1,
    "z" => 0,
    );
    
    my @full_list = (%list0, %list1, %list2, %list3, %list4, %list5);
    
    print ??
    

2 个答案:

答案 0 :(得分:3)

哈希数组(AoH)的元素是references到那些哈希值,因此您需要使用哈希引用填充@full_list。根据您的脚本,执行以下操作:

my @full_list = \( %list0, %list1, %list2, %list3, %list4, %list5 );

然后,要访问x内的“list5”:

print $full_list[5]->{x}; # prints 1

->表示法是arrow operator,它取消引用$full_list[5]中的哈希引用。

要使用list5作为@full_list的索引,您可以使用constant pragma

use strict;
use warnings;
use constant list5 => 5;

...

print $full_list[list5]->{x}; # prints 1

希望这有帮助!

答案 1 :(得分:0)

也许,这很有帮助:

正如您所定义的那样(@full_list =(%list0,%list1,...);),通过

转储@full_list
use Data::Dumper;
print Dumper \@full_list;

看起来像

$VAR1 = [
      'y',
      1,
      'x',
      1,
      'z',
      0,
      'list',
      5
    ];

其中,偶数元素是您的散列键,每个元素后面的奇数元素是值。肯尼斯所描述的可能就是你想要的。但是,如果由于某种原因,这只是给你(另一种形式,你在这里简化它),你必须使用@full_list或这样定义的数组,你可以得到一个包含键和来自所有初始哈希的值。

my %full_list_hash = @full_list;
print $full_list_hash{x};