以下几行可能意味着什么?
my $x = shift;
以下几行可能意味着什么?
my $x = shift;
perldoc -f shift
包含来自“ perlfunc”的有用信息。参见perfun甚至perlfun:shift()。没有一个答案能很好地完成文档的链接/拉取。因此,无论是否为“ RTFM”,都应包括参考。
Answers:
shift()
是内置的Perl子例程,该例程将数组作为参数,然后返回并删除该数组中的第一项。通常的做法是通过shift
调用获取传递到子例程中的所有参数。例如,假设您有一个foo
接受三个参数的子程序。将这些参数分配给局部变量的一种方法是shift
像这样:
sub foo() {
my $x = shift;
my $y = shift;
my $z = shift;
# do something
}
这里的困惑是,似乎shift并没有传递给数组作为参数。实际上,它是隐式传递给“默认”数组的,该数组@_
位于子例程内部或子例程@ARGV
外部。
sub foo{ my($x,$y,$z) = @_ }
自己,它不那么重复。
如果您在子例程中,则此行将shift
打开@_
(传入的参数)。
因此$x
将是第一个项目popped
从@_
数组。
所以通常你会看到 $x = shift if @_;