找回密码
 注册
查看: 2317|回复: 0

perl语言中的pop 和push 操作

[复制链接]
发表于 2011-11-13 10:11:01 | 显示全部楼层 |阅读模式
可以使用新的,更大的索引(index)将新值存放在数组的末尾。但实际上,Perl 程序员不使用索引◆。因此,在下面几段中,
我们将介绍几种不使用索引来操作数组的方法。
◆当然,我们是在开玩笑,但这个玩笑基于Perl 的一些事实。数组中使用索引并没有发挥Perl 的威力。如果使用pop, push 和类似的操作
符以避免使用索引,那你的程序通常会比大量使用索引的情况要快,而且能避免“差一位(off-by-one)”类型的错误,这类错误通常叫做“边
界值错误”。有时,一个初级的Perl 程序员(想比较Perl 和C 的速度)将针对C 优化过的排序程序(有大量的索引操作),用Perl 来直
接实现(从而有大量的索引操作),惊讶于它为什么如此慢。答案是,“用小提琴来订钉子不是一个好办法”。
通常将数组类似于栈来使用,在其右边添加或者删除数据。(这是数组中“最后”一个元素,其索引最大)。这些操作经常
出现,因此提供了特殊的函数。
pop 操作将数组的最后一个元素取出并返回:
@array = 5..9;
$fred = pop(@array); #$fred 得到9,@array 现在为(5,6,7,8)
$barney = pop @array; #$barney gets 8, @array 现在为(5,6,7)
pop @array; #@array 现在为(5,6)(7 被丢弃了)
最后一个例子中,pop 使用在“in a void context”,也就是说没有存放其返回值的地方。这样使用pop 是合法的。
如果数组为空,那pop 什么也不做(因为没有元素可以移出),并返回undef。
你可能已注意到pop 后可以使用或者不使用括号。这在Perl 中是一条通用规则:如果去掉括号含义不变,那括号就是可选
的◆。和pop 相反的操作是push,它可以将一个元素(或者一列元素)加在数组的末尾:
◆受过相应教育的人将发现,这是同义反复。
push(@array,0); #@array 现在为(5,6,0)
push @array,8; #@array 现在为(5,6,0,8)
push @array,1..10; #@array 现在多了10 个元素
@others =qw/9 0 2 1 0 /;
push @array,@others; #@array 现在又多了5 个元素(共有19 个)
push 的第一个参数或者pop 的唯一参数必须是数组变量。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-12-4 01:37 , Processed in 0.033962 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表