【发布时间】:2009-07-16 17:48:56
【问题描述】:
在 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";
}
}
数据被重复。
输出
行=0 BB AA AA
行=1 BB AA AA
行=2 BB AA AA
行=3 BB AA AA
等等……
我无法弄清楚为什么两种输出方式都出错了。如果我每次都打印@twoDimArray(在移动到循环的下一次迭代之前,即在使用push函数之后)插入@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 程序的开头总是
use warnings;和use strict;。 -
@brad:我愿意。上面的代码只是实际代码的一小部分。所以这就是为什么不在这里写。
-
看
perldoc perldsc的这个部分,他描述“重复引用同一内存位置”的部分:perldoc.perl.org/perldsc.html#COMMON-MISTAKES整个教程非常好,perldoc perllol也是如此跨度>
标签: perl arrays data-structures