perl pop和push函数,不使用索引更能利用perl的特性,减少边界值错误发生的几率...

Perl_Pop和Push操作
2009年09月24日 星期四 10:41 A.M.

可以使用新的,更大的索引(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;    #$barneygets8,@array  现在为(5,6,7)
pop@array;            #@array  现在为(5,6)(7 被丢弃了)
最后一个例子中,pop 使用在"inavoidcontext",也就是说没有存放其返回值的地方。这样使用 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 个)

转载于:https://www.cnblogs.com/dulalaqiuzhi/archive/2009/10/20/1587023.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值