0

所以,我有一个散列%HoHoA。 每个顶层散列键都有一个二级散列键作为值。 每个二级哈希都有数组作为值。Perl:散列中数组的大小,在另一个散列

在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]}; 

我得到这样的错误消息: 不能使用字符串(“串3 “)作为ARRAY参考,同时使用”严格参考“

为什么我会收到该错误消息,而应该怎么做呢?

+0

你读过[perldoc perldsc](http://perldoc.perl.org/perldsc.html)和[perldoc perllol](http://perldoc.perl.org/perllol.html)吗?那里详细剖析了一些非常相似的结构。 – Ether 2010-11-11 00:12:51

+0

同样http://perlmonks.org/?node=References+quick+reference - 虽然你似乎明白了,但你的数据和你期望的数据略有不同。 – ysth 2010-11-11 03:01:10

回答

1

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

+0

虽然'$ HoHoA {$ group} {$ suite} [1]'是一个arrayref。 – ysth 2010-11-11 02:59:12

1

在调试器下运行它,并用x命令递归地转出数据结构或指向其中。

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

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

0

它看起来像你去了一个层次太深。 下面的代码应该得到你想要的

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

您也可以可能希望使用数据::自卸车,看看你的对象的 结构,以确保您在写数据格式的工作是什么。 使用Data :: Dumper; print Dumper($ HoHoA);

相关问题