一、列表
??列表是包含在括號里的一序列的值,可以為任何數(shù)值,也可為空,如:(1,?5.3?,?"hello"?,?2),空列表:()。
??注:只含有一個數(shù)值的列表(如:(43.2)?)與該數(shù)值本身(即:43.2?)是不同的,但它們可以互相轉(zhuǎn)化或賦值。
??列表例:
????(17,?$var,?"a?string")
????(17,?26? ????(17,?$var1?+?$var2)
????($value,?"The?answer?is?$value")
二、數(shù)組--列表的存貯?
??列表存貯于數(shù)組變量中,與簡單變量不同,數(shù)組變量以字符"@"打頭,如:
????@array?=?(1,?2,?3);
??注:
?(1)數(shù)組變量創(chuàng)建時初始值為空列表:()。
?(2)因?yàn)镻ERL用@和$來區(qū)分?jǐn)?shù)組變量和簡單變量,所以同一個名字可以同時用于數(shù)組變量和簡單變量,如:
????$var?=?1;
????@var?=?(11,?27.1?,?"a?string");
??但這樣很容易混淆,故不推薦。
1、數(shù)組的存取?
??.對數(shù)組中的值通過下標(biāo)存取,第一個元素下標(biāo)為0。試圖訪問不存在的數(shù)組元素,則結(jié)果為NULL,但如果給超出數(shù)組大小的元素賦值,則數(shù)組自動增長,原來沒有的元素值為NULL。如:
????@array?=?(1,?2,?3,?4);
????$scalar?=?$array[0];
????$array[3]?=?5;?#?now?@array?is?(1,2,3,5)
????$scalar?=?$array[4];?#?now?$scalar?=?null;
????$array[6]?=?17;?#?now?@array?is?(1,2,3,5,"","",17)
??.數(shù)組間拷貝
????@result?=?@original;?
??.用數(shù)組給列表賦值
????@list1?=?(2,?3,?4);
????@list2?=?(1,?@list1,?5);?#?@list2?=?(1,?2,?3,?4,?5)
??.數(shù)組對簡單變量的賦值
????(1)?@array?=?(5,?7,?11);
????($var1,?$var2)?=?@array;?#?$var1?=?5,?$var2?=?7,?11被忽略
????(2)?@array?=?(5,?7);
????($var1,?$var2,?$var3)?=?@array;?#?$var1?=?5,?$var2?=?7,?$var3?=""?(null)
??.從標(biāo)準(zhǔn)輸入(STDIN)給變量賦值
????$var?=?
????@array?=?
2?、字符串中的方括號和變量替換?
????"$var[0]"?為數(shù)組@var的第一個元素。
????"$var/[0]"?將字符"["轉(zhuǎn)義,等價于"$var".?"[0]",$var被變量替換,[0]保持不變。
????"${var}[0]"?亦等價于"$var"?."[0]"。
????"$/{var}"則取消了大括號的變量替換功能,包含文字:${var}.
3、列表范圍:?
????(1..10)?=?(1,?2,?3,?4,?5,?6,?7,?8,?9,?10)
????(2,?5..7,?11)?=?(2,?5,?6,?7,?11)
????(3..3)?=?(3)
??.用于實(shí)數(shù)
????(2.1..5.3)?=?(2.1,?3.1?,4.1,?5.1)
????(4.5..1.6)?=?()
??.用于字符串
????("aaa".."aad")?=?("aaa","aab",?"aac",?"aad")
????@day_of_month?=?("01".."31")
??.可包含變量或表達(dá)式
????($var1..$var2+5)
??.小技巧:
????$fred?=?"Fred";
????print?(("Hello,?"?.?$fred?.?"!/n")?x?2);?
??其結(jié)果為:
????Hello,?Fred!
????Hello,?Fred!?
4、數(shù)組的輸出:?
(1)?@array?=?(1,?2,?3);
????print?(@array,?"/n");
??結(jié)果為:
????123
(2)?@array?=?(1,?2,?3);
????print?("@array/n");
??結(jié)果為:
????1?2?3
5、列表/數(shù)組的長度?
??當(dāng)數(shù)組變量出現(xiàn)在預(yù)期簡單變量出現(xiàn)的地方,則PERL解釋器取其長度。
????@array?=?(1,?2,?3);
????$scalar?=?@array;?#?$scalar?=?3,即@array的長度
????($scalar)?=?@array;?#?$scalar?=?1,即@array第一個元素的值
??注:以數(shù)組的長度為循環(huán)次數(shù)可如下編程:
????$count?=?1;
????while?($count? ????print?("element?$count:?$array[$count-1]/n");
????$count++;
????}
6、子數(shù)組?
????@array?=?(1,?2,?3,?4,?5);
????@subarray?=?@array[0,1];?#?@subarray?=?(1,?2)
????@subarray2?=?@array[1..3];?#?@subarray2?=?(2,3,4)
????@array[0,1]?=?("string",?46);?#?@array?=("string",46,3,4,5)?now?
????@array[0..3]?=?(11,?22,?33,?44);?#?@array?=?(11,22,33,44,5)?now
????@array[1,2,3]?=?@array[3,2,4];?#?@array?=?(11,44,33,5,5)?now
????@array[0..2]?=?@array[3,4];?#?@array?=?(5,5,"",5,5)?now
??可以用子數(shù)組形式來交換元素:
????@array[1,2]?=?@array[2,1];
7、有關(guān)數(shù)組的庫函數(shù)?
(1)sort--按字符順序排序
????@array?=?("this",?"is",?"a","test");
????@array2?=?sort(@array);?#?@array2?=?("a","is",?"test",?"this")
????@array?=?(70,?100,?8);
????@array?=?sort(@array);?#?@array?=?(100,?70,?8)?now
(?2)reverse--反轉(zhuǎn)數(shù)組
????@array2?=?reverse(@array);
????@array2?=?reverse?sort?(@array);
(3)chop--數(shù)組去尾
????chop的意義是去掉STDIN(鍵盤)輸入字符串時最后一個字符--換行符。而如果它作用到數(shù)組上,則將數(shù)組中每一個元素都做如此處理。
????@list?=?("rabbit",?"12345","quartz");
????chop?(@list);?#?@list?=?("rabbi",?"1234","quart")?now
(?4)join/split--連接/拆分
????join的第一個參數(shù)是連接所用的中間字符,其余則為待連接的字符數(shù)組。
????$string?=?join("?",?"this",?"is","a",?"string");?#?結(jié)果為"this?is?a?string"
????@list?=?("words","and");
????$string?=?join("::",?@list,?"colons");?#結(jié)果為"words::and::colons"
????@array?=?split(/::/,$string);?#?@array?=?("words","and",?"colons")?now
以上就是關(guān)于Perl數(shù)組變量和列表的概念,感謝大家的閱讀,更多內(nèi)容請關(guān)注武林技術(shù)頻道網(wǎng)站。
|
新聞熱點(diǎn)
疑難解答
圖片精選