一、簡(jiǎn)介
- 列表:標(biāo)量的有序集合
- 數(shù)組:儲(chǔ)存列表的變量
區(qū)別:列表指的是數(shù)據(jù),數(shù)組指的是變量,列表的值不一定要放在數(shù)組里,但每個(gè)數(shù)組變量都一定包含一個(gè)列表。
二、訪問(wèn)數(shù)組中的元素
$fred [0] = "hello"
$fred [3.2] ; " # 下標(biāo)不為整數(shù),自動(dòng)舍去小數(shù)。--等效于$fred[3] "
特殊的數(shù)組索引:
- 找到數(shù)組里最后一個(gè)元素的索引值:
法1:比如數(shù)組rock最后一個(gè)元素的索引值為:$#rock
$rocks[ $#rocks ] = ' beatu '
法2: 負(fù)數(shù)索引值
$rocks[-1] = ' beatu '
三、列表直接量
- 列表直接量就是程序代碼中表示一列數(shù)據(jù)的寫(xiě)法
( 1, 2, 3 ) #含有1,2,3三個(gè)數(shù)字的列表
或者寫(xiě)成( 1, 2, 3, ) ,末尾的逗號(hào)會(huì)被忽略。
( 1..100 ) #100個(gè)整數(shù)構(gòu)成的列表
" .. " :范圍操作符
eg:( 1..4 ) 等效于 ( 1,2,3,4 ), 也等效于( 1.6..4.6 )
( 5..1 ) #空列表:只能向上計(jì)數(shù)
( 0..$#rocks ) # rocks的所有索引值
qw(quoted word):建立簡(jiǎn)單的單詞列表,省去每個(gè)單詞都加 引號(hào)的麻煩
qw( fred barney batty hello )
同( "fred","barney","batty","hello" )
定界符除了圓括號(hào)還有:||,//, ##, {}
四、列表的賦值
- 列表值也可被賦值給變量
( $fred, $bar, $dino ) = ( "fine", "rub", "und" ) # 三次賦值
( $fred, $barney ) = ( $barrney,$fred ); #交換兩個(gè)變量值
當(dāng)希望引用整個(gè)數(shù)組時(shí):@
@rock = qw(hello ge gg man)
@quarry = ( @ rock,"yy","js")
五、pop和push操作符
- 新增元素到數(shù)組末尾
- 刪除數(shù)組的最后一個(gè)元素
pop:負(fù)責(zé)取出數(shù)組中最后一個(gè)元素并將其作為返回值返回
@del = 5..9
$fred = pop(@del) #$fred=9,del為( 5,6,7,8 );
push:添加一個(gè)或一串元素到數(shù)組的末尾
push(@del,0) ; #del現(xiàn)在為( 5,6,7,8,0 )
push @del, 1..10 ;
push @del,@quarry ;
print @del ; #打印列表
注意:push的第一個(gè)參數(shù)或pop的唯一參數(shù)都必須是要操作的數(shù)組變量,不能對(duì)列表直接進(jìn)行壓入或彈出
六、shift和unshift
- 與pop和push類似操作,shift針對(duì)的是低下標(biāo)。
@array = qw(a b c) ;
$m = shift @array ; #$m="a",@array為(b,c)
unshift ( @array, 5 ) #@array為(5,b,c);
七、splice操作符
- pop/push/shift/unshift都是針對(duì)首尾操作的,針對(duì)中間某些元素用splice。
splice操作符:最多接受四個(gè)參數(shù)
第一個(gè)參數(shù):目標(biāo)數(shù)組
二:開(kāi)始位置
三:元素長(zhǎng)度
四:要替換的列表
@array = qw( a b c d )
@remove = splice @array, 1, 2, qw(wilma) #刪除bc,替換wilma
#所以,@remove=qw(b c) ;@array=qw(a wilma d)
八、字符串中的數(shù)組內(nèi)插
- 內(nèi)插:將數(shù)組內(nèi)容插到雙引號(hào)中,在數(shù)組的各個(gè)元素間自動(dòng)添加分隔用的空格。
print " quart @remove limestone \n " ; #內(nèi)插@remove數(shù)組的值
print "hanjing@outlook.com" #打印郵箱不能帶入數(shù)組,錯(cuò)誤
print 'hanjing@outlook.com' #用單引號(hào)避免
九、foreach控制結(jié)構(gòu)
- 循環(huán):能逐項(xiàng)遍歷列表中的值,依次迭代。
foreach $rock ( qw/ bedrock slate lava / ) {
print "One rock is $rock. \n"
}
控制變量是$rock:若此值缺省,該值默認(rèn)為$_.
控制變量是數(shù)組本身,若在循環(huán)中改變,列表值相應(yīng)也改變
十、reverse操作符
- reverse操作符會(huì)讀取到列表的值,并按相反的次序返回該列表。
@a = reverse 6..10 ;
@b = reverse @b ;
reverse @b # reverse不會(huì)改變傳進(jìn)來(lái)的參數(shù)
所以返回值沒(méi)有去處將沒(méi)有意義。
十一、sort操作符
- sort會(huì)根據(jù)內(nèi)部的編碼順序?qū)λ麄冞M(jìn)行排序。
@rock = qw/ bed slate lava / ;
@sorted = sort(@rocks) ;
@back = reverse sort @rock ;
@num = sort 97..102 #得:100,101,102,97,98,99
將數(shù)字作為字符串來(lái)排序,1開(kāi)頭的數(shù)字會(huì)排在9開(kāi)頭的前面
十二、each
- 調(diào)用each會(huì)返回下一個(gè)元素的值及其索引。
use 5.012
my @rocks = qw / a b c d / ;
while( my( $index,$value ) = each @rocks ){
says "$index: $value" ;
}
十三、標(biāo)量上下文與列表上下文
- Perl會(huì)結(jié)合表達(dá)式的意思轉(zhuǎn)換字符串或數(shù)字的意思,取決于操作符。
@peple = qw( fred bar bet ) ;
@sort = sort @peple ; #列表上下文
$num = 42 + @peple #標(biāo)量上下文
- 標(biāo)量上下文產(chǎn)生列表的表達(dá)式
@bak = reverse qw / a g b fq / ; # f, b, g, a
$bake = reverse qw / a g b fq / ; # qfbga
$fred = something #標(biāo)量上下文
( $fred ) = something #列表上下文()括號(hào)的作用
- 在列表上下文產(chǎn)生標(biāo)量的表達(dá)式
@wilma = undef ; #有一個(gè)元素為未定義的(undef)
@Betty = () ; # 清空數(shù)組
- 強(qiáng)制指定標(biāo)量上下文
使用偽函數(shù):scalar
@rock = qw ( ta f f d ) ;
print "I have ",@rock ," rocks! \n" # error
print "I have ", scalar @rock ," rocks! \n" # num
- 列表上下文的< STDIN >
將鍵盤讀入的成為列表的元素。
@line = <STDIN> ;
chomp(@line = <STDIN> ) ;
鍵盤輸入結(jié)尾用ctrl+D的方式標(biāo)記結(jié)尾(此處linux和Mac OS X系統(tǒng))
其他系統(tǒng),如Windows/DOS來(lái)告知系統(tǒng)用:ctrl+Z