以下两行perl的目的是什么?
my $host = shift || 'localhost';
my $port = shift || 200;
那应该返回localhost和端口10.什么是shift关键字?
答案 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
上工作。程序员必须同时记住的事情越多,他就越有可能犯错误。