5

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

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

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

4

5 回答 5

9

第一行从@_or @ARGV(取决于您在代码中的位置)或 / 中没有任何内容的情况@_@ARGV转换localhost$host

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

有关详细信息,请查看班次文档

于 2011-05-21T09:15:30.430 回答
6

这段代码是一种为$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像这样连续两个,以便非常方便地处理参数。

于 2011-05-21T11:29:51.770 回答
3

如果没有提供参数,shift会将@ARGV 移到子程序之外,@_ 移到子程序内——即传递给主程序或子程序的参数数组。

在您的情况下, $host 被分配了@ARGV 的第一个元素(或@_,如果代码在子内部)或'localhost',如果元素为false。

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

于 2011-05-21T09:19:28.817 回答
2

如果您使用shift,请始终将数组放在上面。我见过 Perl 程序员忘记在子例程之外,shift@ARGV. 程序员必须同时记住的事情越多,他出错的可能性就越大。

于 2011-05-21T12:34:57.910 回答
2

shift 返回数组的第一个元素并将其从数组中删除。像流行音乐,但来自另一端。

于 2011-05-21T09:13:42.157 回答