0

つまり、ハッシュ %HoHoA があります。各最上位ハッシュ キーには、値として第 2 レベルのハッシュ キーがあります。各第 2 レベルのハッシュには、配列の配列が値として含まれています。

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'

各スイートの 2 つの配列のサイズを取得しようとしています。上記の例では、Second_Key_2 に 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

デバッガーの下で実行し、コマンドを使用してデータ構造またはその中のポイントを再帰的にダンプしますx

モジュールを使用してプログラムでそれを行うことができますが、Dumpvalueあまり便利ではありません。

私がperllol冗談として書いたと人々が考え続けないことを願っています. ☺</p>

于 2010-11-11T00:38:15.840 に答える
1

$HoHoA{$group}{$suite}[0]arrayref ではありません。それは文字列なので、エラーです。データ構造を構築しているコードをデバッグする必要があるかもしれません。

于 2010-11-10T23:59:36.487 に答える
0

レベルが 1 つ深すぎたようです。以下のコードは、あなたが望むものを得るはずです

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

Data::Dumper を使用してオブジェクトの構造を確認し、書き込みデータ形式で作業していることを確認することもできます。Data::Dumper を使用します。印刷ダンパー($HoHoA);

于 2011-08-22T00:20:36.263 に答える