从返回值引用参数

Dac*_*cav 1 perl

假设我们有一个返回引用的子例程

sub aspirin {
    my @items = qw(some items in here);
    return \@items;
}
Run Code Online (Sandbox Code Playgroud)

另一个子程序采用数组引用

sub beetroot (\@) {
    my $lst = shift;
    print "$_\n" for @$lst;
}
Run Code Online (Sandbox Code Playgroud)

我想从中获取数组aspirinbeetroot用它提供.我想做点什么(方法A)

my $L = aspirin;
beetroot $L;
Run Code Online (Sandbox Code Playgroud)

但翻译抱怨,我需要做以下事情(方法B):

my $L = aspirin;
beetroot @$L;
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 为什么方法A不起作用?该参数实际上是一个数组引用,这是我们想要的;
  • 没有赋值的解除引用(如方法B中的那个)需要整个列表内容的副本吗?(我猜不是,因为没有明确的副本).

谢谢你的回答

cho*_*oba 6

原型\@并不意味着数组引用.这意味着给我一个数组,但我会得到一个参数作为参数(见perldoc perlsub.

引用:

任何backslashed原型字符代表一个绝对必须以该字符开头的实际参数.作为一部分传递的值@_将是对子程序调用中给出的实际参数的引用,通过应用于"\"该参数获得.

换句话说,除非你真的知道他们做了什么,否则不要使用原型.