Perl Pop和Perl Push操作異同之處
本文和大家重點(diǎn)討論一下Perl Pop和Perl Push操作,可以使用新的,更大的索引(index)將新值存放在數(shù)組的末尾。但實(shí)際上,Perl程序員不使用索引,因此,在下面幾段中,我們將介紹幾種不使用索引來(lái)操作數(shù)組的方法。
Perl Pop和Perl Push操作
可以使用新的,更大的索引(index)將新值存放在數(shù)組的末尾。但實(shí)際上,Perl程序員不使用索引,因此,在下面幾段中,我們將介紹幾種不使用索引來(lái)操作數(shù)組的方法。
當(dāng)然,我們是在開(kāi)玩笑,但這個(gè)玩笑基于Perl的一些事實(shí)。數(shù)組中使用索引并沒(méi)有發(fā)揮Perl的威力。如果使用Perl Pop,Perl Push和類似的操作符以避免使用索引,那你的程序通常會(huì)比大量使用索引的情況要快,而且能避免"差一位(off-by-one)"類型的錯(cuò)誤,這類錯(cuò)誤通常叫做"邊界值錯(cuò)誤"。有時(shí),一個(gè)初級(jí)的Perl程序員(想比較Perl和C的速度)將針對(duì)C優(yōu)化過(guò)的排序程序(有大量的索引操作),用Perl來(lái)直接實(shí)現(xiàn)(從而有大量的索引操作),驚訝于它為什么如此慢。答案是,"用小提琴來(lái)訂釘子不是一個(gè)好辦法"。
通常將數(shù)組類似于棧來(lái)使用,在其右邊添加或者刪除數(shù)據(jù)。(這是數(shù)組中"***"一個(gè)元素,其索引***)。這些操作經(jīng)常出現(xiàn),因此提供了特殊的函數(shù)。
◆pop操作將數(shù)組的***一個(gè)元素取出并返回:
@array=5..9;
$fred=pop(@array);#$fred得到9,@array現(xiàn)在為(5,6,7,8)
$barney=pop@array;#$barneygets8,@array現(xiàn)在為(5,6,7)
pop@array;#@array現(xiàn)在為(5,6)(7被丟棄了)
***一個(gè)例子中,pop使用在"inavoidcontext",也就是說(shuō)沒(méi)有存放其返回值的地方。這樣使用pop是合法的。
如果數(shù)組為空,那pop什么也不做(因?yàn)闆](méi)有元素可以移出),并返回undef。
你可能已注意到pop后可以使用或者不使用括號(hào)。這在Perl中是一條通用規(guī)則:如果去掉括號(hào)含義不變,那括號(hào)就是可選的。和pop相反的操作是Perl_Push,它可以將一個(gè)元素(或者一列元素)加在數(shù)組的末尾:
◆受過(guò)相應(yīng)教育的人將發(fā)現(xiàn),這是同義反復(fù)。
Perl Push(@array,0);#@array現(xiàn)在為(5,6,0)
Perl Push@array,8;#@array現(xiàn)在為(5,6,0,8)
Perl Push@array,1..10;#@array現(xiàn)在多了10個(gè)元素
@others=qw/90210/;
Perl Push@array,@others;#@array現(xiàn)在又多了5個(gè)元素(共有19個(gè))
Perl Push的***個(gè)參數(shù)或者pop的唯一參數(shù)必須是數(shù)組變量。
出自:http://www.kklinux.com/html/biancheng/Perl/200901/26-2834.html
【編輯推薦】
- 實(shí)例解析Perl substr函數(shù)應(yīng)用
- Perl模式匹配參數(shù)使用詳解
- Windows下Perl開(kāi)發(fā)環(huán)境的安裝和配置
- 學(xué)習(xí)筆記 Perl split函數(shù)用法指導(dǎo)
- Perl多進(jìn)程及其和多線程的關(guān)系解析