English 中文(简体)
如何将函数返回值从引用转换为数组?
原标题:
  • 时间:2009-04-10 14:42:22
  •  标签:

我用Perl编写了以下代码:

sub f {
    return [1,2,3]
}

print f;

函数<code>f</code>返回对数组的引用,如何在没有额外变量的情况下将返回值转换为数组,如这里所示?

sub f {
    return [1,2,3]
}

$a = f;
print @$a;
最佳回答

你只是想这么做吗?

print @{ f() };

您可以取消引用任何返回引用的内容。它不一定是一个变量。它甚至可以是很多代码:

print @{ @a = grep { $_ % 2 } 0 .. 10; @a };

Perl v5.20添加了一个实验性的后解引用

print f()->@*
问题回答

You could rewrite the subroutine to return different things in different contexts.

sub f {
  my @return = 1..3;

  return  @return if wantarray;
  return @return;
  # if you want to return a copy of an array:
  # return [@return];
}

say f;        #   list context => wantarray == 1
say scalar f; # scalar context => wantarray == 0
f();          #   void context => wantarray == undef
123
ARRAY(0x9238880)
my $a_s  = f; # scalar
my($a_l) = f; # list

my @b_l  =        f; # list
my @b_s  = scalar f; # scalar

my %c_l  =        f; # list
my %c_s  = scalar f; # scalar

$a_s ==   [ 1..3 ];
$a_l ==     1;

@b_l == (   1..3   );
@b_s == ( [ 1..3 ] );

%c_l == ( 1 => 2, 3 => undef );
%c_s == ( ARRAY(0x9238880) => undef );

注意:这是Perl6子例程处理标量/列表上下文的方式





相关问题
热门标签