在Perl中處理二維數組讓我頭疼。不管怎樣,下面是我的問題:爲什麼Perl中的二維數組打印不正確?
我有一個循環推數組,說@twoOneArray,到另一個陣列,說@twoDimArray,然後復位循環的下一次迭代開始,然後再次推入前@twoDimArray帶有一組新的值。當我使用打印此@twoDimArray之一:
print Dumper \@twoDimArray;
它給輸出
輸出
$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,但我不確定它是否對我有意義。有什麼建議麼?
代碼來構建二維數組:
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程序的開頭使用`warnings`和`strict strict``。 – 2009-07-16 18:57:59
@brad:我知道。上面的代碼是實際代碼的一小部分。所以這就是爲什麼不寫在這裏。 – shubster 2009-07-16 19:07:33
查看`perldoc perldsc`的這部分,他描述了「重複引用同一個內存位置」的部分:http://perldoc.perl.org/perldsc.html#COMMON-MISTAKES整個教程非常好,就像`perldoc perllol` @ – Telemachus 2009-07-16 19:29:43