下面两行perl的目的是什么??
my $host = shift || 'localhost';
my $port = shift || 200;
那应该返回 localhost 和端口 10。什么是 shift 关键字?
这段代码是一种为$host
和提供默认值的方法$port
。它通常位于脚本或子例程的开头,并分别从@ARGV
和获取值@_
。
那应该返回本地主机和端口 10。
不,||
运算符是短路的OR
,这意味着如果 LHS 操作数返回真值,则忽略 RHS 操作数。基本上,它的意思是(并且仅此):“如果为真,则选择左侧值,否则选择右侧值。”
shift ARRAY
将返回 , 或的第一个值ARRAY
:
如果省略 ARRAY,则将 @_ 数组移到子例程和格式的词法范围内,并将 @ARGV 数组移到子例程之外以及由 eval STRING 、 BEGIN {} 、 INIT {} 、 CHECK {} 建立的词法范围内, UNITCHECK {} 和 END {} 结构。
引自http://perldoc.perl.org/functions/shift.html
此外,当然,shift
从移动的数组中删除值。因此,您可以shift
像这样连续两个,以便非常方便地处理参数。
如果没有提供参数,shift会将@ARGV 移到子程序之外,@_ 移到子程序内——即传递给主程序或子程序的参数数组。
在您的情况下, $host 被分配了@ARGV 的第一个元素(或@_,如果代码在子内部)或'localhost',如果元素为false。
这是一个非常常见的 Perl 习语。
如果您使用shift
,请始终将数组放在上面。我见过 Perl 程序员忘记在子例程之外,shift
在@ARGV
. 程序员必须同时记住的事情越多,他出错的可能性就越大。
shift 返回数组的第一个元素并将其从数组中删除。像流行音乐,但来自另一端。