3D 配列のサブ配列である 2D 配列で 1D 配列をプッシュ/シフト解除しようとしています。 これをより明確にするために、 http://codepad.org/5s8Og64kのサンプル コードを確認できます。ここにもコピーします。
use Data::Dumper;
# @arr_3d ;
$arr_3d[0][0][0] = 1;
$arr_3d[0][1][0] = 2;
$arr_3d[0][0][1] = 4;
$arr_3d[0][1][1] = 3;
# @arr_1d ;
$arr_1d[1] = "new1";
$arr_1d[0] = "new0";
print Dumper(\@arr_3d);
unshift @{$arr_3d[0]},\@arr_1d;
print Dumper(\@arr_3d);
つまり、3D 配列の次元 xyz を定義し、x を定数と見なすと、「2D」配列が得られます。元の 3D 配列のこの 2D "サブ配列" に 1D 配列をプッシュしたいと考えています。
サンプルコードは実際にそれを行いますが、それをメインスクリプトに適用しようとすると、ダンパーは以前にプッシュされたすべてのデータの代わりに " $ VAR1->[0][0] " をダンプし、データのみをダンプします最後にプッシュされた 1D 配列から。
何がそれを引き起こしているのか、または私が説明するプッシュを行うためのより効果的な方法について何か考えはありますか?
追加情報: 実際のデータ構造は、次のようなループ内で作成されます。
unshift @{$arr_3d[$index]},\@arr_1d;
print @arr_1d; # This prints successfully the 1D array
「@arr_1d」が作成される場所は、個々の要素を割り当てるだけです。
$arr_1d[0]='a'; $arr_1d[1]='b'; # etc, etc..
時間をありがとう、ジョルゴス