Perl:散列中的数组大小,在另一个散列中

时间:2010-11-10 23:55:44

标签: arrays perl hash multidimensional-array perl-data-structures

所以,我有一个散列%HoHoA。 每个顶级散列键都有一个第二级散列键作为值。 每个二级哈希都有数组数组作为值。

在perl的调试器中,它看起来像这样:

0 'Top_key_1'
1 HASH(0x...)
  'Second_Key_1' => ARRAY(0x...)
    0   'string 1'
    1   'string 2'
  'Second_Key_2' => ARRAY(0x...)
    0  ARRAY(0x...)
      0 'string 3'
      1 'string 4'
      2 'string 5'
    1  ARRAY(0x...)
      0 'string 6'
      1 'string 7'
2 'Top_key_2'

我正在尝试获取每个套件的两个数组的大小。在上面 例如,Second_Key_2有两个数组,第0个是3号。

my $count1 = $#{$HoHoA{$top_key}{$second_key}[0]}+1;
my $count2 = $#{$HoHoA{$top_key}{$second_key}[1]}+1;

my $count1 = @{$HoHoA{$group}{$suite}[0]};
my $count2 = @{$HoHoA{$group}{$suite}[1]};

我收到如下错误消息: 在使用“strict refs”时,不能使用字符串(“string 3”)作为ARRAY引用

为什么我收到错误消息,我该怎么做?

3 个答案:

答案 0 :(得分:1)

$HoHoA{$group}{$suite}[0]不是arrayref;它是一个字符串,因此是错误。也许您需要调试构建数据结构的代码。

答案 1 :(得分:1)

在调试器下运行它,并使用x命令以递归方式转储数据结构或指向其中。

您可以使用Dumpvalue模块以编程方式执行此操作,但它不太方便。

我希望人们不要一直以为我把perllol写成了一个笑话。 ☺

答案 2 :(得分:0)

看起来你走得太深了一层。 下面的代码可以为您提供您想要的内容

my $count1 = @{$HoHoA{$group}{$suite}};

您可能还想使用Data :: Dumper来查看 对象的结构,以确保您正在处理写入数据格式。 使用Data :: Dumper; 打印翻斗车($ HoHoA);