如何将传递的数组引用直接移到数组?

Eli*_*Eli 5 perl

我有一个函数(让我们称之为foo($array_reference, ...)),它需要一个数组引用和其他参数.我希望foo将数组引用从传递给它的参数列表中直接移到数组,而不必将其作为数组引用移出,然后单独将其转换为数组.

我想要的应该是这样的:

my @bar = @{shift};
Run Code Online (Sandbox Code Playgroud)

我不想要的,但目前仍然坚持:

my $bar = shift;
my @bar = @{$bar}
Run Code Online (Sandbox Code Playgroud)

后一种方法浪费线条,浪费记忆,并让我讨厌这种类型的Perl代码的作者充满激情.请帮忙?

And*_*ter 11

不要担心"浪费线,浪费记忆".这两行代码和内存都很便宜.

您可以@_像任何阵列一样操作,包括解除引用.听起来你想要一个:

my @bar = @{+shift};
my @bar = @{$_[0]};
Run Code Online (Sandbox Code Playgroud)

  • @Eli,请参阅perlop中的"一元+":http://perldoc.perl.org/perlop.html#Symbolic-Unary-Operators (4认同)
  • @Eli:IIRC,强制标量背景. (2认同)

Eug*_*ash 6

试试my @bar = @{shift()};my @bar = @{CORE::shift()};

@{shift}如果您启用警告,Perl会警告您这是不明确的use warnings;.


Eri*_*rom 5

由于它不在这里,我发现它是消除歧义的最清晰方法:

my @bar = @{shift @_}
Run Code Online (Sandbox Code Playgroud)

此处每个答案在内都添加非单词字符的@{ ... }原因是因为括号内的shift内容被视为未引用的裸字(类似于abc => 1$hash{key})。您可以添加+;()@_或其他非单词字符来强制解释为代码。