多维数组-Perl编程和返回值



如何在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以澄清您对参考文献的理解。

此外,虽然keysvalues在技术上可以在阵列上工作,但它们并不是真正用于阵列的。这是转移注意力。

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")

相关内容

  • 没有找到相关文章

最新更新