La manipulation de tableaux bidimensionnels en Perl me donne mal à la tête. Quoi qu'il en soit, ma question est la suivante:Pourquoi le tableau à deux dimensions de Perl n'est-il pas correctement imprimé?
J'ai une boucle qui pousse un tableau, disons @twoOneArray, dans un autre tableau, disons @twoDimArray, puis est réinitialisé avant que la prochaine itération de la boucle commence, puis est de nouveau poussé dans @twoDimArray avec un nouvel ensemble de valeurs. Lorsque j'imprime cette @twoDimArray en utilisant soit:
print Dumper \@twoDimArray;
donne la sortie
SORTIE
$VAR1 = [
[
'BB',
'AA',
'AA'
],
$VAR1->[0],
$VAR1->[0],
$VAR1->[0]
];
ou en utilisant des boucles
for (my $i=0; $i<4; $i++){
for (my $j=0; $j<4; $j++){
print "$twoDimArray[$i][$j] \n";
}
}
les données se reproduit.
SORTIE
Row = 0 BB AA AA
Row = 1 BB AA AA
Row = 2 BB AA AA
Row = 3 BB AA AA
et ainsi de suite ....
Je ne peux pas comprendre pourquoi les deux les moyens de sortie vont mal. Si j'imprime @twoDimArray à chaque fois (avant de passer à la prochaine itération de la boucle, ie après avoir utilisé la fonction push) @twoOneArray est inséré, alors les valeurs semblent être bonnes et ne pas se répéter, mais l'imprimer en une seule fois semble donner Erreur. Question similaire a été demandé here mais je ne suis pas sûr si cela a un sens pour moi. Aucune suggestion?
Code pour construire tableau 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";
Toujours 'use warnings 'et' use strict; 'au début de tous les programmes Perl. –
@brad: Oui. Le code ci-dessus est une infime partie du code actuel. alors c'est pourquoi ne l'a pas écrit ici. – shubster
Voir cette section de 'perldoc perldsc', la partie où il décrit" prendre une référence au même emplacement de mémoire à plusieurs reprises ": http://perldoc.perl.org/perldsc.html#COMMON-MISTAKES Tout le tutoriel est très bon , comme le 'perldoc perllol' – Telemachus