如何在perl中返回局部变量数组(或任何变量(的值。例如。我必须返回对数组的引用吗。这似乎不太管用。
sub routine
{
my @array = ("foo", "bar");
return @array;
}
但这似乎不起作用。如何在perl中从局部变量返回值?
我的第二个相关问题是,如何将嵌套数组作为数组进行访问。上一个问题也产生了对这个解决方案的需求。
@nestedArray = ("hello", "there");
@array = ("the", @nestedArray);
($variable1, $variable2) = values @array;
这就是我尝试过的
($variable3, $variable4) values $$variable2; ## This doesn't seem to work?
:-/
对于第二个问题,您应该阅读perlreftut以澄清您对参考文献的理解。
此外,虽然keys
和values
在技术上可以在阵列上工作,但它们并不是真正用于阵列的。这是转移注意力。
sub routine {
my @array = ( "foo", "bar" );
return @array;
}
print join "n", routine();
上面确实返回了一个列表。
@nested_array = ( "hello", "there" );
@array = ( "the", @nested_array );
print join "n", ( $array[0], @{ $array[1] } );
这里,@array
的第一个元素是the
,第二个元素是数组引用。因此,您必须将第二个元素取消引用为数组。
然而,为了方便起见,您可以将第二个数组扁平化为一个列表:
@array = ( "the", @nested_array );
print join "n", @array;
对于第二个,这是有效的:
($variable3, $variable4) = @$variable2;
你的第一个例子看起来像你现有的一样。
您通常直接返回对非标量变量或标量值的引用。
return $var
or
return @var
or
return %var
然后将它们取消引用为%$var或@$var,或者使用箭头符号
$var->[0]或$var->{hash_key}
首先,您做了正确的事情。但我认为您在标量上下文中调用该函数,因此您只得到列表/数组中的元素数量。
sub routine
{
my @array = ("foo", "bar");
return @array;
}
my $a = routine(); # a will be **2** instead of an array ("foo", "bar")
my @a = routine(); # a will be an array ("foo", "bar")
如果您真的需要返回一个数组,并且希望确保子调用正确。您可以使用wantarray()
函数。
sub routine
{
my @array = ("foo", "bar");
return @array if wantarray;
die "Wrong invoking context";
}
第二,你可以使用推;
@nestedArray = ("hello", "there");
@narray = ("the", "world");
push @narray, @nestedArray; # @narray is ("the", "world", "hello", "there")