0

所以,我有一个哈希 %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]};

我收到一条错误消息,例如:Can't use string ("string 3") as an ARRAY ref while "strict refs" in use

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

4

3 回答 3

1

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

于 2010-11-10T23:59:36.487 回答
1

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

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

我希望人们不要一直认为我写perllol的是一个笑话。☺</p>

于 2010-11-11T00:38:15.840 回答
0

看起来你走得太深了。下面的代码应该可以得到你想要的

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

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

于 2011-08-22T00:20:36.263 回答