下面这行可能是什么意思?
my $x = shift;
发布于 2008-11-17 21:27:26
shift()
是一个内置的Perl子例程,它接受一个数组作为参数,然后返回并删除该数组中的第一项。通常的做法是通过shift
调用获得传递给子例程的所有参数。例如,假设您有一个带有三个参数的子例程foo
。将这些参数分配给局部变量的一种方法是使用shift
,如下所示:
sub foo() {
my $x = shift;
my $y = shift;
my $z = shift;
# do something
}
这里的混乱之处在于,shift似乎没有作为参数传递给数组。实际上,它被隐式地传递给“默认”数组,这个数组是子例程内的@_
或子例程外部的@ARGV
。
发布于 2008-11-17 21:24:21
shift
函数从数组中删除第一个元素,然后返回它。该数组缩短了一个元素。
如果在函数中,默认数组(如果没有作为参数给出)是@_
,如果在文件作用域中,则为@ARGV
。
因此,在本例中,$x
要么设置为第一个函数参数,要么设置为第一个命令行参数。
发布于 2008-11-17 21:17:58
这通常是一种习惯用法:$x是一个局部变量,赋值给传递给子例程的第一个参数。
my ($x) = @_;
可能更清楚(而且它不会修改参数列表)。
https://stackoverflow.com/questions/296964
复制相似问题