2016-04-12 5 views
0

Я пытаюсь сделать копию вложенного массива, и кажется, что я продолжаю делать ссылку с моими попытками.Как сделать копию вложенного массива в массиве структуры массива

Чтобы быть более конкретным, я пытаюсь иметь массив массивов, в котором каждый вспомогательный массив основывается на предыдущем массиве. Вот моя попытка:

#!/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"; 
} 

Мой вывод:

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 

И я хочу/ожидать, что это будет:

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

Я предполагаю, что мои проблемы лежит, как я назначая $ temp, пожалуйста, дайте мне знать, если это не так. Любая помощь приветствуется.

+0

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

+0

Вообще говоря, вы можете использовать 'dclone' Storable. Решение zdim более подходит в этом случае (поскольку вам просто нужна простая мелкая копия). – ikegami

ответ

4

Создайте новый массив с my, скопируйте содержимое массива, на котором будет построен, затем добавьте его.

Держа его как можно ближе к коду

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

Или если вы хотите использовать анонимный массив, 'push @aoa, [@ $ _, $ i ++];' – ikegami

+0

@ikegami Большое спасибо за редактирование и комментарий, это намного лучше. – zdim

 Смежные вопросы

  • Нет связанных вопросов^_^