我是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
会返回引用,是否会创建该数组的新副本?
答案 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
的元素列表。