子程序中`shift`和`@ _`之间有区别吗?

时间:2012-09-27 18:16:02

标签: perl

我总是使用@_[0]来获取第一个参数,并使用@_[1]来获取第二个参数。但是,当我在线搜索代码段时,我发现很多人都喜欢使用shift关键字。我发现shift关键字根本不直观。这两者之间是否有任何功能差异?

2 个答案:

答案 0 :(得分:14)

是的,两者之间存在差异。 shift会更改@_ (你可能会认为这将是一个让移动变慢的操作) $_[0]$_[1]只是转让,根本不会更改@_

写作的审美方式是:

sub this_is_better {
    my ( $foo, $bar, $hey, $whoa, $doll, $bugs ) = @_;
}

答案 1 :(得分:0)

documentation中所述,shift在不使用显式数组的情况下,只需从本地子程序中取@_的下一个参数,方法是从开头删除参数并将其余元素移到前面。