【问题标题】:Perl: Return anonymous array from a subroutinePerl:从子例程返回匿名数组
【发布时间】:2016-02-13 04:53:12
【问题描述】:

我正在尝试从子例程返回一个匿名数组,但是,当转储返回的变量时,我只看到一个值(我期待两个)。

这是我的代码:

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my $fruits_ref = generate_fruits();
print "Fruits: " . Dumper($fruits_ref) . "\n";

sub generate_fruits
{
    return ("Apple", "Orange");
}

这个输出:

Fruits: $VAR1 = 'Orange';

如何让子例程返回该数组 ref?

【问题讨论】:

  • 您返回的不是数组,而是列表。一个数组是["Apple", "Orange"]
  • 是否可以返回整个列表?我该如何解压清单?
  • $fruits_ref = [ generate_fruits() ]
  • 当您将列表传递给标量上下文时,它成为它的最后一个元素。要传递到列表上下文,您可以执行 my @fruits = generate_fruits(); 。但这可能不是您需要的 - 您似乎需要参考。为此,只需使用方括号。哦,另一种选择是my $fruits_ref = [generate_fruits()];
  • 谢谢@arkadiy。如果您发布答案,我很乐意接受。

标签: perl


【解决方案1】:

匿名数组由方括号构成。

return [ 'Apple', 'Orange' ]

【讨论】:

    【解决方案2】:

    您不是在返回一个数组(或对数组的引用),而是在返回一个列表。匿名数组的引用是["Apple", "Orange"]

    当你将它传递给标量上下文时,List 成为它的最后一个元素。要传递到列表上下文,您可以这样做

    my @fruits = generate_fruits();
    

    但这可能不是您需要的 - 您似乎需要参考。为此,只需使用方括号。

    哦,另一种选择是

    my $fruits_ref = [generate_fruits()];
    

    【讨论】:

    • Nit: ["Apple", "Orange"]不是一个数组;它是对匿名数组的引用。数组将是 @array = ("Apple", "Orange")
    猜你喜欢
    • 1970-01-01
    • 2015-01-19
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多