Perl移位操作简单的问题

时间:2011-05-21 09:09:43

标签: perl shift

以下两行perl的目的是什么?

my $host = shift || 'localhost';
my $port = shift || 200;

那应该返回localhost和端口10.什么是shift关键字?

5 个答案:

答案 0 :(得分:9)

第一行从@_@ARGV转移(取决于您在代码中的位置),或@_ / @ARGV中没有任何内容,将localhost分配给$host

第二个现在应该是不言自明的。

详情请查看the shift documentation

答案 1 :(得分:6)

这段代码是为$host$port提供默认值的一种方法。它通常位于脚本或子例程的开头,并分别从@ARGV@_获取值。

  

那应该返回localhost和port   10。

不,||运算符是短路OR,这意味着如果LHS操作数返回true值,则忽略RHS操作数。基本上,它意味着这个(并且只有这个):“如果是真的则选择左侧值,否则选择右侧值。”

shift ARRAY将返回ARRAY的第一个值,或:

  

如果省略ARRAY,则移动@_   词法范围内的数组   子程序和格式,以及@ARGV   子程序外的数组也是   在词汇范围内建立   通过评估STRING,BEGIN {},INIT   {},CHECK {},UNITCHECK {}和END   {}构造。

引自http://perldoc.perl.org/functions/shift.html

此外,当然,shift会从移位的数组中删除值。因此,您可以像这样连续使用两个shift,以便进行非常方便的参数处理。

答案 2 :(得分:3)

如果没有提供参数,shift将@ARGV移出子程序,将@_移到子程序中 - 即传递给主程序或子程序的参数数组。

在你的情况下,如果元素为false,则为$ host分配@ARGV的第一个元素(如果代码在sub中,则为@_)或'localhost'。

这是一种非常常见的Perl习语。

答案 3 :(得分:2)

shift返回数组的第一个元素并将其从数组中删除。像pop一样,但是来自另一端。

答案 4 :(得分:2)

如果您使用shift,请始终将数组放在其上。我见过经验Perl程序员忘记了在子程序之外,shift@ARGV上工作。程序员必须同时记住的事情越多,他就越有可能犯错误。