2次元配列をPerlで処理すると頭痛がかかります。とにかく、私の質問は次のようなものです。Perl印刷の2次元配列が正しく表示されないのはなぜですか?
@twoOneArrayなどの配列を別の配列、たとえば@twoDimArrayにプッシュしてループの次の繰り返しが開始される前にリセットされ、再度@twoDimArray新しい値のセット。私が使用してこの@twoDimArrayを印刷するとき、次のいずれか
print Dumper \@twoDimArray;
それは出力
OUTPUTに
$VAR1 = [
[
'BB',
'AA',
'AA'
],
$VAR1->[0],
$VAR1->[0],
$VAR1->[0]
];
または使用してループ
for (my $i=0; $i<4; $i++){
for (my $j=0; $j<4; $j++){
print "$twoDimArray[$i][$j] \n";
}
}
データが重複しますを提供します。
OUTPUT
行= 0 BB AAのAA
行= 1つのBB AAのAA
行= 2 BB AAのAA
行= 3 BBのAAのAA
など....
私はカント両方の出力方法がうまくいかない理由を理解してください。 @twoDimArrayを毎回(ループの次の繰り返しに移動する前、つまりプッシュ機能を使用した後に)印刷すると@twoOneArrayが挿入された場合、値はうまく再現されないようですが、一度に印刷すると上記のようになりますエラー。同様の質問はhereと聞かれましたが、それが私にとって意味があるかどうかはわかりません。助言がありますか? 2次元配列を構築するための
コード:
for ($k = 1; $k <= $counter; $k++){
@twoOneArray =(); #reset it when loop starts again
for ($j = 0; $j <= $colsInArray; $j++){
#do stuff to create @twoOneDim
}
push @twoDimArray, \@twoOneArray;
#if I print @twoDimArray if prints fine, with the exact values intact
}
print Dumper \@twoDimArray; #if I print it here it messes up
print "\n";
すべてのPerlプログラムの始めに常に '警告を使用する'と 'use strict;'を使用します。 –
@brad:そうです。上記のコードは、実際のコードのごく一部です。なぜここに書き込まなかったのか – shubster
「perldoc perldsc」のこのセクションを参照してください。ここでは、「同じメモリの場所を繰り返し参照しています」という記述があります。http://perldoc.perl.org/perldsc.html#COMMON-MISTAKESチュートリアル全体がとても良いです、perldoc perllolと同様です。 – Telemachus