首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Perl中,shift()做什么?

在Perl中,shift()做什么?
EN

Stack Overflow用户
提问于 2008-11-17 21:16:35
回答 4查看 47.6K关注 0票数 74

下面这行可能是什么意思?

my $x = shift;
EN

回答 4

Stack Overflow用户

发布于 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

票数 63
EN

Stack Overflow用户

发布于 2008-11-17 21:24:21

shift函数从数组中删除第一个元素,然后返回它。该数组缩短了一个元素。

如果在函数中,默认数组(如果没有作为参数给出)是@_,如果在文件作用域中,则为@ARGV

因此,在本例中,$x要么设置为第一个函数参数,要么设置为第一个命令行参数。

票数 15
EN

Stack Overflow用户

发布于 2008-11-17 21:17:58

这通常是一种习惯用法:$x是一个局部变量,赋值给传递给子例程的第一个参数。

my ($x) = @_;

可能更清楚(而且它不会修改参数列表)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/296964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档