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ù)娱据。