Как преобразовать ссылку на массив в массив в Perl? - PullRequest
14 голосов
/ 01 апреля 2011

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

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

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

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

}

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

Ответы [ 3 ]

19 голосов
/ 01 апреля 2011

У вас есть ответ на свой вопрос: -)

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);
7 голосов
/ 01 апреля 2011

Примерно так:

return @{$reference};

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

3 голосов
/ 01 апреля 2011

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

my @copy_of_array = @$array_ref;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...