在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