将数组放在=>运算符的右侧会发生什么?

NXT*_*NXT 2 perl

这似乎是一个愚蠢的问题,但这是漫长的一天.我正在调整一些Perl代码以供其他用途,我遇到了这种语法:

my @request;

#... fill the array with stuff...

my $reply = $service->call('requestMessage' => @request, $header);
Run Code Online (Sandbox Code Playgroud)

该方法调用似乎难以置信,如果=>只是一种特殊的逗号而且@request被插入到列表中.

它实际上相当于:

my $reply = $service->call('requestMessage' => \@request, $header);
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

编辑:谢谢你的答案.我很清楚传递值和传递参考之间的区别.我问的是,一个明显的值传递是否被转换为参考传递.显然不是.谢谢大家回答.

Joh*_*usa 10

有问题的代码:

my $reply = $service->call('requestMessage' => @request, $header);
Run Code Online (Sandbox Code Playgroud)

相同的:

my $reply = $service->call('requestMessage' => \@request, $header);
Run Code Online (Sandbox Code Playgroud)

正如你所推测的那样,相当于:

my $reply = $service->call('requestMessage', @request, $header);
Run Code Online (Sandbox Code Playgroud)

有时,=>众所周知,"胖逗号" 用于表示位置参数之间的关系.例如,方法名称some_method@arguments此代码中的预期名称之间的链接:

$server->distribute_across_nodes(some_method => @arguments);
Run Code Online (Sandbox Code Playgroud)


Sin*_*nür 8

将数组放在=>运算符的右侧会发生什么?

=>胖子逗号.它有没有效果RHS.如果LHS是一个单词,它会自动引用LHS .

你的问题的其余部分似乎归结为如果将函数传递给数组与引用数组之间存在差异:是的,有.在第一种情况下,数组被展平并传递给函数.因此,如果数组有1,000个元素,函数参数列表将增加1,000个元素.

在第二种情况下,传递对数组的引用,因此参数列表的大小不依赖于传递给函数的引用所指向的数组的大小.


yst*_*sth 5

有一种观点认为=>应该被用作某种强调逗号,即使它没有任何区别.倡导者使用它来表明一件事描述或作用于另一件事,例如:

split /,/ => $var;
Run Code Online (Sandbox Code Playgroud)

也许你的代码的作者属于这个阵营?