Perl中@_的含义是什么?

And*_*rei 85 variables perl

@_在Perl中是什么意思?

DVK*_*DVK 115

perldoc perlvar是第一个检查任何特殊命名的Perl变量信息的地方.

引用:

@_:在子例程中,数组@_包含传递给该子例程的参数.

更多细节可以在perlvar链接的perldoc perlsub(Perl子例程)中找到:

传入的任何参数都会显示在数组中@_.

因此,如果您使用两个参数调用函数,那么它们将存储在$_[0]和中$_[1].

该数组@_是一个本地数组,但其元素是实际标量参数的别名.特别是,如果更新元素$ _ [0],则更新相应的参数(如果不可更新,则会发生错误).

如果参数是调用函数时不存在的数组或散列元素,则仅在修改它时(或者如果)修改该元素或者对其进行引用.(Perl的某些早期版本创建了元素,无论元素是否已分配给.)分配给整个数组@_会删除该别名,并且不会更新任何参数.


eck*_*kes 25

通常,使用变量扩展传递给sub@_参数:

sub test{
  my ($a, $b, $c) = @_;
  ...
}

# call the test sub with the parameters
test('alice', 'bob', 'charlie');
Run Code Online (Sandbox Code Playgroud)

这是percritic声称是正确的方式.

  • 这是我一次不同意`perlcritic`的一次,我个人认为这对函数是最好的,但是对于一种方法来说,'移'自引用,然后解压缩@_数组很有用。这清楚表明这是一种方法,并且该方法采用某些参数 (2认同)

Pis*_*3.0 10

一的第一主打搜索perl @_这个:

@_是sub的传入参数列表.

它还有一个更长,更详细的解释.

  • 实际上,您的Google搜索的第一个匹配项现在已链接到此页面。 (3认同)
  • 是的,搜索是正确的第一步,但不必在答案中包含搜索说明。这是多余的信息,没有任何价值,而且具有讽刺意味,因为如果有人点击您答案中的搜索链接,它会将他们带回到他们开始的地方。 (2认同)

tch*_*ist 9

问题是Perl的@_ 意思.该问题的答案是,只要$_意味着在Perl,@_同样意味着他们.

似乎没有人提到它的意义的这个关键方面- 以及他们的意义.

因此它们既可以用作代词,也可以用作主题词.

它们通常具有名义上的前因,但并非总是如此.


asc*_*ler 5

所有Perl的"特殊变量"都列在perlvar文档页面中.


hoc*_*n86 5

在大多数情况下,您还可以对单个变量使用shift:

$var1 = shift;
Run Code Online (Sandbox Code Playgroud)

这是一个你应该进一步研究的主题,因为Perl有许多有趣的方法来访问子例程中的外部信息.

  • 很酷,无论是谁给了我一个简单的投票只是为了发布另一种方式来做类似的事情.我意识到我没有直接回答这个问题,因为有人已经做了,但我提供了另一种形式,新的perl程序员经常被混淆. (3认同)