Как преобразовать ссылку массива в массив в Perl?

Я знаю, что могу создать массив и ссылку на массив следующим образом:

my @arr = ();
my $rarr = \@arr;

Затем я могу выполнить итерацию по ссылке массива следующим образом:

foreach my $i (@{$rarr}){

}

Есть ли способ скопировать или преобразовать массив ref в обычный массив, чтобы я мог вернуть его из функции? (В идеале без использования этого цикла foreach и нажатия).

Ответ 1

У вас есть ответ в вашем вопросе: -)

use warnings;
use strict;

sub foo() {
    my @arr = ();
    push @arr, "hello", ", ", "world", "\n";
    my $arf = \@arr;
    return @{$arf}; # <- here
}

my @bar = foo();
map { print; } (@bar);

Ответ 2

Вот так:

return @{$reference};

Затем вы просто возвращаете ссылку с разыменованием.

Ответ 3

вы можете скопировать массив, просто назначив новый массив:

my @copy_of_array = @$array_ref;

НО, вам не нужно это делать, чтобы вернуть измененный массив. Поскольку это ссылка на массив, обновление массива через ссылку - это все, что вам нужно сделать!