1

配列の配列を配列に挿入する必要があります。この配列全体は、ハッシュのキーの値です。つまり、ハッシュは次のようになります。

"one"
[
  [
    1,
    2,
  [
    [
      3,
      4
    ],
    [
      5,
      6
    ]
  ]
]
]

ここで、1 つはキーであり、残りの部分はハッシュ内のそのキーの値です。配列 [3,4] と [5,6] の配列が実際の配列の 3 番目の要素であることに注意してください。最初の 2 つの要素は 1 と 2 です。

私は同じことをするための小さなプログラムを書きました。

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 1;
$Data::Dumper::Useqq = 1;
$Data::Dumper::Deparse = 1;

my %hsh;
my @a=[1,2];
my @b=[[3,4],[5,6]];
$hsh{"one"}=\@a;
push @{$hsh{"one"}},@b;
print Dumper(%hsh);

しかし、これは以下のように出力されます。

"one"
[
  [
    1,
    2
  ],   #here is where i see the problem.
  [
    [
      3,
      4
    ],
    [
      5,
      6
    ]
  ]
]

配列の配列が配列に挿入されていないことがわかります。誰でもこれで私を助けることができますか?

4

2 に答える 2

1

まず、注意: スカラーのみを に渡しDumperます。配列またはハッシュをダンプする場合は、参照を渡します。

次に、何を期待するかという問題があります。あなたは期待していると言う

[ [ 1, 2, [ [ 3, 4 ], [5, 6] ] ] ]

しかし、私はあなたが本当に期待していると思います

[ 1, 2, [ [ 3, 4 ], [5, 6] ] ]

両方のエラーの原因は同じです。

[ ... ]

意味

do { my @anon = ( ... ); \@anon }

それで

my @a=[1,2];
my @b=[[3,4],[5,6]];

@a単一の要素を(匿名配列への参照) に割り当て、単一の要素を(@b別の匿名配列への参照) に割り当てます。

あなたは実際に欲しい

my @a=(1,2);
my @b=([3,4],[5,6]);

だからから

my %hsh;
$hsh{"one"}=\@a;
push @{$hsh{"one"}},@b;
print(Dumper(\%hsh));

あなたが得る

{
  "one" => [
    1,
    2,
    [
      3,
      4
    ],
    [
      5,
      6
    ]
  ]
}
于 2013-06-06T06:26:02.400 に答える