Perl Pop和Perl Push操作异同之处
本文和大家重点讨论一下Perl Pop和Perl Push操作,可以使用新的,更大的索引(index)将新值存放在数组的末尾。但实际上,Perl程序员不使用索引,因此,在下面几段中,我们将介绍几种不使用索引来操作数组的方法。
Perl Pop和Perl Push操作
可以使用新的,更大的索引(index)将新值存放在数组的末尾。但实际上,Perl程序员不使用索引,因此,在下面几段中,我们将介绍几种不使用索引来操作数组的方法。
当然,我们是在开玩笑,但这个玩笑基于Perl的一些事实。数组中使用索引并没有发挥Perl的威力。如果使用Perl Pop,Perl 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。