如何在Perl中将数组引用转换为数组?

21

我知道我可以按照以下方式创建一个数组和一个数组引用:

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

然后我可以按以下方式遍历数组引用:

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

}

有没有一种方法可以将数组引用复制或转换为普通数组,以便我可以从函数中返回它?(最好不使用那个foreach循环和push)。


2
在Perl中,你不能返回一个数组(但是你可以返回数组包含的列表)。 - tadmc
3个回答

22

你在问题中已经有了答案 :-)

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);

可以只写 return @arr; 吗? - Sergei Krivonos

11

像这样:

return @{$reference};

你只是返回了一个解引用后的引用。


1
这样返回一个空数组。 - Sergei Krivonos

4

你可以通过将数组赋值给一个新数组来简单地复制数组:

my @copy_of_array = @$array_ref;

但是,你不需要这样做就可以返回修改后的数组。由于它是对数组的引用,通过引用更新数组就是你所需要做的!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接