7

perl初心者です。そのため、この質問は素朴に聞こえるかもしれません。

次の2つの機能があります

#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

The getFruits2 subroutine returns a list, which can be assigned to a new array like this

my @newfruits = getFruits2();

And yes, it will produce a copy of the data in the array

于 2012-10-12T15:29:19.460 に答える
4

getFruits1 will return a reference to an array. The \ creates a reference.

getFruits2 will return a list of the values in @fruits. It won't return a reference. You'll only get a copy of the array if you assign the return value to an array.

于 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

サブルーチンによって返される唯一のものは、スカラーのリストです。配列を返すことはできません。

\@fruits

参照に評価されるので、

return \@fruits;

参照を返します。リストコンテキストでは、

@fruits

の要素のリストに評価される@fruitsので、

return @fruits;

@fruitsサブがリストコンテキストで評価される場合、要素のリストを返します。

于 2012-10-12T16:42:07.813 に答える