Работа с двумерными массивами в Perl доставляет мне головную боль. Во всяком случае, мой вопрос заключается в следующем:
У меня есть цикл, который помещает массив, скажем, @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 каждый раз (до перехода к следующей итерации цикла, т. Е. После использования функции push), @twoOneArray вставляется, тогда значения кажутся хорошими и не повторяются, но печать за один раз, кажется, дает ошибка. Подобный вопрос был задан здесь , но я не уверен, имеет ли это смысл для меня. Есть предложения?
Код для построения 2D-массива:
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";