shift
这个函数把数组的第一个值移出并且返回它,然后把数组长度减一并且把所有的东西都顺移。如果清丛稿在数组中不再存在元素,它返回 undef。
如果省略了 ARRAY,那么该函数在子过程和格式的词法范围里移动 @_;
它在文件范围(通常是主程序)里移动 @ARGV。
子过程通常以拷贝它们的参数到词法变量里开始,而 shift 可以用于这个目的:
sub marine {
my $fathoms = shift # 深度
my $fishies = shift # 鱼的数量
my $o2 = shift # 氧气问题
# ...
}
总之就是shift没答孝有数组作为参数时,就是郑早移动@_这个默认的参数。
perl里经常用这种缺省方法的。
首先, 你的 a 因为没有写成 "a", 或 'a' 所以, 这会当成一个 sub 来处理, 那也因为没有 sub a 这东西, 所以, $n = undef. 如果粗庆你有 use strict ( 十分建议使用 )
你就会得到报错了.
另外 @_ 的意思, 其实也是一个 array , 你传入一个 sub 里面的, 其实是
@_ = ( 1,2,3,4,5..10, undef ) # undef 是来自 $n 的
所以, 实际运作出来岩亏握的样空毁子, 其实是 :
my ( $newarr, $n ) = ( 1, 2 ) # 後面的忽略
最後:
$newarr = 1
$n = 2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)