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。
你可能已注意到pop后可以使用或者不使用括號。這在Perl中是一條通用規則:如果去掉括號含義不變,那括號就是可選的。和pop相反的操作是Perl_Push,它可以將一個元素(或者一列元素)加在數組的末尾:
◆受過相應教育的人將發現,這是同義反復。
Perl Push(@array,0);#@array現在為(5,6,0)
Perl Push@array,8;#@array現在為(5,6,0,8)
Perl Push@array,1..10;#@array現在多了10個元素
@others=qw/90210/;
Perl Push@array,@others;#@array現在又多了5個元素(共有19個)
Perl Push的***個參數或者pop的唯一參數必須是數組變量。
出自:http://www.kklinux.com/html/biancheng/Perl/200901/26-2834.html
【編輯推薦】