2016-04-12 1 views
0

J'essaie de faire une copie d'un tableau imbriqué, et il semble que je continue à faire une référence avec mes tentatives. Pour être plus précis, j'essaie d'avoir un tableau de tableaux dans lequel chaque sous-groupe construit sur le tableau précédent. Voici ma tentative:Comment faire une copie d'un tableau imbriqué dans un tableau de la structure de tableau

#!/usr/bin/perl -w 
use strict; 
use warnings; 

my @aoa=[(1)]; 
my $i = 2; 
foreach (@aoa){ 
    my $temp = $_;#copy current array into $temp 
    push $temp, $i++; 
    push @aoa, $temp; 
    last if $_->[-1] == 5; 
} 
#print contents of @aoa 
foreach my $row (@aoa){ 
    foreach my $ele (@$row){ 
    print "$ele "; 
    } 
    print "\n"; 
} 

Ma sortie est:

1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 

Et je veux/attends que ce soit:

1 
1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5 

Je suppose que mes problèmes se trouve que je suis en assignant $ temp, s'il vous plaît laissez-moi savoir si ce n'est pas le cas. Toute aide est appréciée.

+0

http://stackoverflow.com/questions/388187/whats-the-best-way-to-make-a-deep-copy-of -a-data-structure-in-perl –

+0

De manière générale, vous pouvez utiliser 'dclone' de Storable. La solution de zdim est plus appropriée dans ce cas (puisque vous voulez juste une copie superficielle simple). – ikegami

Répondre

4

Créez un nouveau tableau avec my, copiez le contenu du tableau à construire, puis ajoutez-y.

garder aussi près que possible de votre code

foreach (@aoa) { 
    last if $_->[-1] == 5; 
    my @temp = @$_;   #copy current array into @temp 
    push @temp, $i++; 
    push @aoa, \@temp; 
} 
+0

Ou si vous vouliez utiliser un tableau anonyme, 'push @aoa, [@ $ _, $ i ++];' – ikegami

+0

@ikegami Merci beaucoup pour l'édition et le commentaire, c'est beaucoup mieux. – zdim