Perl:函数返回引用还是复制?

时间:2012-10-12 15:26:30

标签: perl function return-type

我是perl的新手。所以这个问题可能听起来很幼稚。

我有两个以下功能

#This function will return the reference of the array
sub getFruits1
{
    my @fruits = ('apple', 'orange', 'grape');
    return \@fruits;
}

但在下列情况下?

#How it returns?
sub getFruits2
{
    my @fruits = ('apple', 'orange', 'grape');
    return @fruits;
}

getFruits2会返回引用,是否会创建该数组的新副本?

4 个答案:

答案 0 :(得分:12)

getFruits2子例程返回列表,可以将其分配给这样的新数组

my @newfruits = getFruits2();

是的,它会产生数组中数据的副本

答案 1 :(得分:4)

getFruits1将返回对数组的引用。 \会创建参考。

getFruits2将返回@fruits中的值列表。它不会返回引用。如果将返回值分配给数组,则只能获得数组的副本。

答案 2 :(得分:1)

getFruits1返回一个引用。没有创建新数组。

getFruits2返回一个列表

Perl引用的示例

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

my @array = ('a','b','c');
printf("[%s]\n",join('',@array));
my $ref=\@array;
${@{$ref}}[0]='x'; # Modifies @array using reference
printf("[%s]\n",join('',@array));

答案 3 :(得分:1)

sub可以返回的唯一内容是标量列表。无法返回数组。

\@fruits

评估参考,所以

return \@fruits;

返回引用。在列表上下文中,

@fruits

评估@fruits的元素列表,所以

return @fruits;
如果在列表上下文中评估子,则

返回@fruits的元素列表。