Perl 數(shù)組
數(shù)組一個是存儲標(biāo)量值的無序列表變量。
數(shù)組變量以 @ 開頭。訪問數(shù)組元素使用 $ + 變量名稱 + [索引值] 格式來讀取,實例如下:
#!/usr/bin/perl @hits = (25, 30, 40); @names = ("google", "youj", "taobao"); print "\$hits[0] = $hits[0]\n"; print "\$hits[1] = $hits[1]\n"; print "\$hits[2] = $hits[2]\n"; print "\$names[0] = $names[0]\n"; print "\$names[1] = $names[1]\n"; print "\$names[2] = $names[2]\n";
程序中 $ 符號使用了 \ 來轉(zhuǎn)義,讓他原樣輸出。
執(zhí)行以上程序,輸出結(jié)果為:
$hits[0] = 25 $hits[1] = 30 $hits[2] = 40 $names[0] = google $names[1] = youj $names[2] = taobao
創(chuàng)建數(shù)組
數(shù)組變量以 @ 符號開始,元素放在括號內(nèi),也可以以 qw 開始定義數(shù)組。
@array = (1, 2, 'Hello'); @array = qw/這是 一個 數(shù)組/;
第二個數(shù)組使用 qw// 運(yùn)算符,它返回字符串列表,數(shù)組元素以空格分隔。當(dāng)然也可以使用多行來定義數(shù)組:
@days = qw/google taobao ... youj/;
你也可以按索引來給數(shù)組賦值,如下所示:
$array[0] = 'Monday'; ... $array[6] = 'Sunday';
訪問數(shù)組元素
訪問數(shù)組元素使用 $ + 變量名稱 + [索引值] 格式來讀取,實例如下:
@sites = qw/google taobao youj/; print "$sites[0]\n"; print "$sites[1]\n"; print "$sites[2]\n"; print "$sites[-1]\n"; # 負(fù)數(shù),反向讀取
執(zhí)行以上程序,輸出結(jié)果為:
google taobao youj youj
數(shù)組索引值從 0 開始,即 0 為第一個元素,1 為第二個元素,以此類推。
負(fù)數(shù)從反向開始讀取,-1 為第一個元素, -2 為第二個元素
數(shù)組序列號
Perl 提供了可以按序列輸出的數(shù)組形式,格式為 起始值 + .. + 結(jié)束值,實例如下:
#!/usr/bin/perl @var_10 = (1..10); @var_20 = (10..20); @var_abc = (a..z); print "@var_10\n"; # 輸出 1 到 10 print "@var_20\n"; # 輸出 10 到 20 print "@var_abc\n"; # 輸出 a 到 z
<p>執(zhí)行以上程序,輸出結(jié)果為:</p> <pre> 1 2 3 4 5 6 7 8 9 10 10 11 12 13 14 15 16 17 18 19 20 a b c d e f g h i j k l m n o p q r s t u v w x y z
數(shù)組大小
數(shù)組大小由數(shù)組中的標(biāo)量上下文決定。:
@array = (1,2,3); print "數(shù)組大小: ",標(biāo)量 @array,"\n";
數(shù)組長度返回的是數(shù)組物理大小,而不是元素的個數(shù),我們可以看以下實例:
#!/uer/bin/perl @array = (1,2,3); $array[50] = 4; $size = @array; $max_index = $#array; print "數(shù)組大小: $size\n"; print "最大索引: $max_index\n";
執(zhí)行以上程序,輸出結(jié)果為:
數(shù)組大小: 51 最大索引: 50
從輸出的結(jié)果可以看出,數(shù)組元素只有四個,但是數(shù)組大小為 51。
添加和刪除數(shù)組元素
Perl 提供了一些有用的函數(shù)來添加和刪除數(shù)組元素。
如果你之前沒有編程經(jīng)驗,可能會問什么是函數(shù),其實我們之前使用的 print 即是一個輸出函數(shù)。
下表列出了數(shù)組中常用的操作函數(shù):
序號 | 類型和描述 |
---|---|
1 | push @ARRAY, LIST 將列表的值放到數(shù)組的末尾 |
2 | pop @ARRAY 彈出數(shù)組最后一個值,并返回它 |
3 | shift @ARRAY 彈出數(shù)組第一個值,并返回它。數(shù)組的索引值也依次減一。 |
4 | unshift @ARRAY, LIST 將列表放在數(shù)組前面,并返回新數(shù)組的元素個數(shù)。 |
實例
#!/usr/bin/perl # 創(chuàng)建一個簡單是數(shù)組 @sites = ("google","youj","taobao"); print "1. \@sites = @sites\n"; # 在數(shù)組結(jié)尾添加一個元素 push(@sites, "baidu"); print "2. \@sites = @sites\n"; # 在數(shù)組開頭添加一個元素 unshift(@sites, "weibo"); print "3. \@sites = @sites\n"; # 刪除數(shù)組末尾的元素 pop(@sites); print "4. \@sites = @sites\n"; # 移除數(shù)組開頭的元素 shift(@sites); print "5. \@sites = @sites\n";
執(zhí)行以上程序,輸出結(jié)果為:
切割數(shù)組
我們可以切割一個數(shù)組,并返回切割后的新數(shù)組:
#!/usr/bin/perl @sites = qw/google taobao youj weibo qq facebook 網(wǎng)易/; @sites2 = @sites[3,4,5]; print "@sites2\n";
執(zhí)行以上程序,輸出結(jié)果為:
weibo qq facebook
數(shù)組索引需要指定有效的索引值,可以是正數(shù)后負(fù)數(shù),每個索引值使用逗號隔開。
如果是連續(xù)的索引,可以使用 .. 來表示指定范圍:
#!/usr/bin/perl @sites = qw/google taobao youj weibo qq facebook 網(wǎng)易/; @sites2 = @sites[3..5]; print "@sites2\n";
執(zhí)行以上程序,輸出結(jié)果為:
weibo qq facebook
替換數(shù)組元素
Perl 中數(shù)組元素替換使用 splice() 函數(shù),語法格式如下:
splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]
參數(shù)說明:
- @ARRAY:要替換的數(shù)組。
- OFFSET:起始位置。
- LENGTH:替換的元素個數(shù)。
- LIST:替換元素列表。
以下實例從第6個元素開始替換數(shù)組中的5個元素:
#!/usr/bin/perl @nums = (1..20); print "替換前 - @nums\n"; splice(@nums, 5, 5, 21..25); print "替換后 - @nums\n";
執(zhí)行以上程序,輸出結(jié)果為:
替換前 - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 替換后 - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20
將字符串轉(zhuǎn)換為數(shù)組
Perl 中將字符串轉(zhuǎn)換為數(shù)組使用 split() 函數(shù),語法格式如下:
split [ PATTERN [ , EXPR [ , LIMIT ] ] ]
參數(shù)說明:
- PATTERN:分隔符,默認(rèn)為空格。
- EXPR:指定字符串?dāng)?shù)。
- LIMIT:如果指定該參數(shù),則返回該數(shù)組的元素個數(shù)。
實例
#!/usr/bin/perl # 定義字符串 $var_test = "youj"; $var_string = "www-youj-com"; $var_names = "google,taobao,youj,weibo"; # 字符串轉(zhuǎn)為數(shù)組 @test = split('', $var_test); @string = split('-', $var_string); @names = split(',', $var_names); print "$test[3]\n"; # 輸出 o print "$string[2]\n"; # 輸出 com print "$names[3]\n"; # 輸出 weibo
執(zhí)行以上程序,輸出結(jié)果為:
o com weibo
將數(shù)組轉(zhuǎn)換為字符串
Perl 中將數(shù)組轉(zhuǎn)換為字符串使用 join() 函數(shù),語法格式如下:
join EXPR, LIST
參數(shù)說明:
- EXPR:連接符。
- LIST:列表或數(shù)組。
實例
#!/usr/bin/perl # 定義字符串 $var_string = "www-youj-com"; $var_names = "google,taobao,youj,weibo"; # 字符串轉(zhuǎn)為數(shù)組 @string = split('-', $var_string); @names = split(',', $var_names); # 數(shù)組轉(zhuǎn)為字符串 $string1 = join( '-', @string ); $string2 = join( ',', @names ); print "$string1\n"; print "$string2\n";
執(zhí)行以上程序,輸出結(jié)果為:
www-youj-com google,taobao,youj,weibo
數(shù)組排序
Perl 中數(shù)組排序使用 sort() 函數(shù),語法格式如下:
sort [ SUBROUTINE ] LIST
參數(shù)說明:
- SUBROUTINE:指定規(guī)則。
- LIMIT:列表或數(shù)組。
實例
#!/usr/bin/perl # 定義數(shù)組 @sites = qw(google taobao youj facebook); print "排序前: @sites\n"; # 對數(shù)組進(jìn)行排序 @sites = sort(@sites); print "排序前: @sites\n";
執(zhí)行以上程序,輸出結(jié)果為:
排序前: google taobao youj facebook 排序前: facebook google youj taobao
注意:數(shù)組排序是根據(jù) ASCII 數(shù)字值來排序。所以我們在對數(shù)組進(jìn)行排序時最好先將每個元素轉(zhuǎn)換為小寫后再排序。
特殊變量: $[
特殊變量 $[ 表示數(shù)組的第一索引值,一般都為 0 ,如果我們將 $[ 設(shè)置為 1,則數(shù)組的第一個索引值即為 1,第二個為 2,以此類推。實例如下:
#!/usr/bin/perl # 定義數(shù)組 @sites = qw(google taobao youj facebook); print "網(wǎng)站: @sites\n"; # 設(shè)置數(shù)組的第一個索引為 1 $[ = 1; print "\@sites[1]: $sites[1]\n"; print "\@sites[2]: $sites[2]\n";
執(zhí)行以上程序,輸出結(jié)果為:
網(wǎng)站: google taobao youj facebook @sites[1]: google @sites[2]: taobao
一般情況我們不建議使用特殊變量 $[,在新版 Perl 中,該變量已廢棄。
合并數(shù)組
數(shù)組的元素是以逗號來分割,我們也可以使用逗號來合并數(shù)組,如下所示:
#!/usr/bin/perl @numbers = (1,3,(4,5,6)); print "numbers = @numbers\n";
執(zhí)行以上程序,輸出結(jié)果為:
numbers = 1 3 4 5 6
也可以在數(shù)組中嵌入多個數(shù)組,并合并到主數(shù)組中:
#!/usr/bin/perl @odd = (1,3,5); @even = (2, 4, 6); @numbers = (@odd, @even); print "numbers = @numbers\n";
執(zhí)行以上程序,輸出結(jié)果為:
numbers = 1 3 5 2 4 6
從列表中選擇元素
一個列表可以當(dāng)作一個數(shù)組使用,在列表后指定索引值可以讀取指定的元素,如下所示:
#!/usr/bin/perl $var = (5,4,3,2,1)[4]; print "var 的值為 = $var\n"
執(zhí)行以上程序,輸出結(jié)果為:
var 的值為 = 1
同樣我們可以在數(shù)組中使用 .. 來讀取指定范圍的元素:
#!/usr/bin/perl @list = (5,4,3,2,1)[1..3]; print "list 的值 = @list\n";
執(zhí)行以上程序,輸出結(jié)果為:
list 的值 = 4 3 2
更多建議: