将引用作为参数传递而不在Perl中命名

时间:2019-06-21 08:26:44

标签: perl

所以我有这样的东西:

@result = myfun \@args;

我想做这样的事情:

sub myfun{
foreach (@@_){ $_ = $_**2; } #foreach element the argument is referring to square the element
return @@_; # return the list that the argument is referring to
}

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以尝试:

my @args = 1..5;
my @result = myfun( \@args );
say for @result;

sub myfun{
    map {$_**2} @{$_[0]};
}

输出

1
4
9
16
25

答案 1 :(得分:2)

如前所述,一个人可以简单地使用

sub myfun { map { $_ ** 2 } @{ $_[0] } }

my @args = 1..5;
say for myfun(\@args);

但是人们不得不怀疑为什么您希望通过参考。以下更简单:

sub myfun { map { $_ ** 2 } @_ }

my @args = 1..5;
say for myfun(@args);

如果您恰好在外部具有参考,则可以始终在此处“拉平”它,而不是在子窗口中。

sub myfun { map { $_ ** 2 } @_ }

my $args = [ 1..5 ];
say for myfun(@$args);

答案 2 :(得分:1)

  

如何告诉perl,选择@_元素并取消引用而无需   创建更多的引用或变量?

要取消引用SIGTERM的元素,例如说@_,请将其括在$_[0]中,并以任何类型的语法将其命名为变量名(不包括符号)。 。例如。 {}代替@{$_[0]}@array代替${$_[0]}[0]

有关更多示例,请参见http://perlmonks.org?node=References+quick+reference