7

我是 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

4 回答 4

12

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

my @newfruits = getFruits2();

是的,它将生成数组中数据的副本

于 2012-10-12T15:29:19.460 回答
4

getFruits1将返回对数组的引用。\创建一个引用。

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

于 2012-10-12T15:28:17.400 回答
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));
于 2012-10-12T15:50:31.110 回答
1

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

\@fruits

评估为参考,所以

return \@fruits;

返回一个参考。在列表上下文中,

@fruits

计算为 的元素列表@fruits,因此

return @fruits;

@fruits如果在列表上下文中评估子,则返回元素列表。

于 2012-10-12T16:42:07.813 回答