perl學(xué)習(xí)-day3-Perl 數(shù)組扑馁、哈希

1.2 數(shù)組

1.2.4 切割數(shù)組

跟python 的列表一致涯呻,指定有效的索引值切割,可以用逗號(hào)分割腻要,如果是連續(xù)的索引复罐,可以用.. 來(lái)表示指定范圍

@sites2 = @sites[3,4,5];
@sites2 = @sites[3..5];

1.2.5 替換數(shù)組元素

數(shù)組元素替換用splice()函數(shù)
splice(@nums, 5, 4, 21..24);
指第5位元素(從1開(kāi)始數(shù))替換4個(gè)元素,新的元素為21到24

1.2.6 將字符串轉(zhuǎn)換為數(shù)組

類似python中的字符串轉(zhuǎn)換為列表雄家,用split()函數(shù)

split [ PATTERN [ , EXPR [ , LIMIT ] ] ]

參數(shù)說(shuō)明:
PATTERN:分隔符效诅,默認(rèn)為空格。
EXPR:指定字符串?dāng)?shù)趟济。
LIMIT:如果指定該參數(shù)乱投,則返回該數(shù)組的元素個(gè)數(shù)。(一開(kāi)始對(duì)于這個(gè)參數(shù)不是很理解顷编,測(cè)試之后發(fā)現(xiàn)戚炫,這個(gè)參數(shù)為數(shù)字,這個(gè)數(shù)字表示你希望返回?cái)?shù)組的元素是幾個(gè)媳纬,如果不給該參數(shù)双肤,則不限制)

#!/usr/bin/perl 
# 定義字符串
$var_test = "runoob";
# 字符串轉(zhuǎn)為數(shù)組
@test = split('', $var_test);
@test1 = split('', $var_test, 3);
@test2 = split('', $var_test, 4);
print "@test\n";  # 輸出 數(shù)組
print "@test1\n";  # 輸出 數(shù)組
print "@test2\n";  # 輸出 數(shù)組

執(zhí)行以上程序,輸出結(jié)果為:

r u n o o b
r u noob
r u n oob

1.2.7 將數(shù)組轉(zhuǎn)換為字符串

跟python的列表轉(zhuǎn)換為字符串一樣钮惠,
$string2 = join( ',', @names );

1.2.8 數(shù)組排序

跟python列表排序一致
@sites = sort(@sites);
注意:數(shù)組排序是根據(jù) ASCII 數(shù)字值來(lái)排序茅糜。所以我們?cè)趯?duì)數(shù)組進(jìn)行排序時(shí)最好先將每個(gè)元素轉(zhuǎn)換為小寫(xiě)后再排序。

1.2.9 合并數(shù)組

數(shù)組的元素是以逗號(hào)來(lái)分割素挽,我們也可以使用逗號(hào)來(lái)合并數(shù)組蔑赘,如下所示:

實(shí)例

#!/usr/bin/perl
@numbers1 = (1,3,(4,5,6));
@odd = (1,3,5);
@even = (2, 4, 6);
@numbers2 = (@odd, @even);
print "numbers = @numbers1\n";
print "numbers = @numbers2\n";

執(zhí)行以上程序,輸出結(jié)果為:

numbers1 = 1 3 4 5 6
numbers = 1 3 5 2 4 6

1.3 哈希

哈希 % 開(kāi)始预明,哈希是一個(gè)key/values 對(duì)的集合,訪問(wèn)哈希元素格式:${key}缩赛。

%data = ('google', 45, 'runoob', 30, 'taobao', 40);
print "\$data{'google'} = $data{'google'}\n";

輸出結(jié)果為:

$data{'google'} = 45

這里可以看出跟python中的字典類似。

1.3.1 創(chuàng)建哈希

#!/usr/bin/perl
$data{'google'} = 'google.com';  #一撰糠、為每個(gè) key 設(shè)置 value
%data = ('google', 'google.com', 'runoob', 'runoob.com', 'taobao', 'taobao.com'); #二峦筒、通過(guò)列表設(shè)置 ,列表中第一個(gè)元素為 key,第二個(gè)為 value窗慎。
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com'); #也可以使用 => 符號(hào)來(lái)設(shè)置 key/value
%data = (-google=>'google.com', -runoob=>'runoob.com', -taobao=>'taobao.com'); #使用 - 來(lái)代替引號(hào),使用這種方式 key 不能出現(xiàn)空格,讀取元素方式為:
$val = $data{-google}
$val = $data{-runoob}

1.3.2 讀取哈希值

你可以像數(shù)組一樣從哈希中提取值遮斥。
哈希值提取到數(shù)組語(yǔ)法格式:@{key1,key2}峦失。

實(shí)例

#!/uer/bin/perl
%data = (-taobao => 45, -google => 30, -runoob => 40); 
@array = @data{-taobao, -runoob}; #從哈希中提取值
print "Array : @array\n"; 
@names = keys %data;#讀取所有key, keys %HASH, 該函數(shù)返回所有哈希的所有 key 的數(shù)組。
print "@names\n";
@urls = values %data;  #values %HASH,該函數(shù)返回所有哈希的所有 value 的數(shù)組术吗。
print "@urls\n"; 

執(zhí)行以上程序尉辑,輸出結(jié)果為:

Array : 45 40
-google -taobao -runoob
30 45 40

1.3.3 檢測(cè)元素是否存在

如果你在哈希中讀取不存在的 key/value 對(duì) ,會(huì)返回 undefined 值较屿,且在執(zhí)行時(shí)會(huì)有警告提醒隧魄。
為了避免這種情況,我們可以使用 exists 函數(shù)來(lái)判斷key是否存在隘蝎,存在的時(shí)候讀裙鹤摹:
實(shí)例

#!/usr/bin/perl
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
if( exists($data{'facebook'} ) ){
   print "facebook 的網(wǎng)址為 $data{'facebook'} \n";
}
else
{
   print "facebook 鍵不存在\n";
}

執(zhí)行以上程序,輸出結(jié)果為:

facebook 鍵不存在

1.3.4 獲取哈希大小與哈希中添加或刪除元素

哈希大小為元素的個(gè)數(shù)嘱么,我們可以通過(guò)先獲取 key 或 value 的所有元素?cái)?shù)組狮含,再計(jì)算數(shù)組元素多少來(lái)獲取哈希的大小,添加 key/value 對(duì)可以通過(guò)簡(jiǎn)單的賦值來(lái)完成曼振。但是刪除哈希元素你需要使用 delete 函數(shù)几迄,實(shí)例如下:

#!/usr/bin/perl
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
@keys = keys %data;
$size = @keys;
print "1 - 哈希大小: $size\n";
@values = values %data;
$size = @values;
print "2 - 哈希大小: $size\n";
# 添加元素
$data{'facebook'} = 'facebook.com';
@keys = keys %data;
$size = @keys;
print "3 - 哈希大小: $size\n";
# 刪除哈希中的元素
delete $data{'taobao'};
@keys = keys %data;
$size = @keys;
print "4 - 哈希大小: $size\n";

執(zhí)行以上程序,輸出結(jié)果為:

1 - 哈希大小: 3
2 - 哈希大小: 3
3 - 哈希大小: 4
4 - 哈希大小: 3

1.4 變量的上下文

perl 為每個(gè)變量類型設(shè)置了獨(dú)立的命令空間冰评,所以不同類型的變量可以使用相同的名稱映胁,不用擔(dān)心沖突。
所謂上下文:指的是表達(dá)式所在的位置甲雅。
舉例如下:

#!/usr/bin/perl 
@names = ('google', 'runoob', 'taobao');
@copy = @names;   # 復(fù)制數(shù)組
$size = @names;   # 數(shù)組賦值給標(biāo)量解孙,返回?cái)?shù)組元素個(gè)數(shù)
print "名字為 : @copy\n";
print "名字?jǐn)?shù)為 : $size\n";

以上程序執(zhí)行輸出結(jié)果為:

名字為 : google runoob taobao
名字?jǐn)?shù)為 : 3

代碼中 @names 是一個(gè)數(shù)組,它應(yīng)用在了兩個(gè)不同的上下文中务荆。第一個(gè)將其復(fù)制給另外一個(gè)數(shù)組妆距,所以它輸出了數(shù)組的所有元素。第二個(gè)我們將數(shù)組賦值給一個(gè)標(biāo)量函匕,它返回了數(shù)組的元素個(gè)數(shù)娱据。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盅惜,隨后出現(xiàn)的幾起案子中剩,更是在濱河造成了極大的恐慌,老刑警劉巖抒寂,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件结啼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡屈芜,警方通過(guò)查閱死者的電腦和手機(jī)郊愧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)朴译,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人属铁,你說(shuō)我怎么就攤上這事眠寿。” “怎么了焦蘑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵盯拱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我例嘱,道長(zhǎng)狡逢,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任拼卵,我火速辦了婚禮奢浑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘间学。我一直安慰自己殷费,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布低葫。 她就那樣靜靜地躺著详羡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘿悬。 梳的紋絲不亂的頭發(fā)上实柠,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音善涨,去河邊找鬼窒盐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛钢拧,可吹牛的內(nèi)容都是我干的蟹漓。 我是一名探鬼主播帮毁,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼痛阻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了黎炉?” 一聲冷哼從身側(cè)響起膜钓,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嗽交,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后颂斜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體夫壁,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年沃疮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盒让。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梅肤。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖邑茄,靈堂內(nèi)的尸體忽然破棺而出凭语,到底是詐尸還是另有隱情,我是刑警寧澤撩扒,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站吨些,受9級(jí)特大地震影響搓谆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜豪墅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一泉手、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偶器,春花似錦斩萌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至霎苗,卻和暖如春姆吭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唁盏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工内狸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厘擂。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓昆淡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親刽严。 傳聞我的和親對(duì)象是個(gè)殘疾皇子昂灵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容