亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Perl > 正文

perl 基本語法介紹

2020-10-31 15:20:23
字體:
供稿:網(wǎng)友

一.數(shù)據(jù)類型(Data type)

Perl 的數(shù)據(jù)類型大致分為四種:Scalar(變量)、Scalar Array(數(shù)組)、Hash Array(散列)、References(指針),看起來雖少但用起來卻綽綽有余。尤其在寫Perl程序時可以不必事先宣告變量,這一點對剛學(xué)程序語言的人甚為方便,不過為了以后程序除錯和維護方便,我建議你還是養(yǎng)成事先聲明變量的習(xí)慣比較好。

1 Scalar(純量變量):

純量變量是Perl里最基本的一種數(shù)據(jù)型態(tài),它可以代表一個字符、字符串、整數(shù)、甚至浮點數(shù),而Perl把它們都看成是一樣的東東! 你甚至可以混著用,不可思議吧。例如:
# 井字號開頭的后面都是批注。
# 純量變數(shù)以$開頭。
# my 是一種宣告變量的方式,它可以使變量區(qū)域化。
# 宣告變量時若不加 my 或 local 則Perl會把它當作全域變量使用。
# 習(xí)慣上,我們會將字符串用雙引號括起來,而數(shù)值就不用加引號。
my $x="abc";
my $x=123;
my $x=4.56;

1-1 常用的操作運算符

1)、算術(shù)運算符
+(加)、-(減)、*(乘)、/(除)、**(冪)、%(余)、-(負)
(1)求冪(**) 結(jié)果不能超出數(shù)的范圍。當指數(shù)為小數(shù)時,底數(shù)不能為負數(shù),例如:25**1.5=125,(-25)**1.5=?(不成立)
(2)取余(%) 操作數(shù)為整數(shù),否則要截取。第二個數(shù)不能為0(因為除數(shù)不能為0)
(3)負(-) -$a=$a*(-1)
此外,注意當一個字符串參加運算,需要轉(zhuǎn)化為整數(shù)時,如果不能轉(zhuǎn)化為整數(shù)則值為0。例如:'2'+1=3,'a'+1=1

2)、數(shù)字比較運算符
<(小于)、=(等于)、>(大于)、==(等于)、<=(小于等于)、>=(大于等于)、!=(不等于)、<=>(比較)
(1)==:比較運算,比較的結(jié)果為真或非零,假或零
(2)<=>:比較運算 例如:$a<=>$b,當$a>$b時,值為1;當$a<$b時,值為-1;當$a==$b時,值為0
(3)自動把操作數(shù)轉(zhuǎn)化為整數(shù),不能轉(zhuǎn)化為整數(shù)則為0
(4)浮點數(shù)不精確,不要把值相近的數(shù)比較,否則得到的結(jié)果是出乎意料的

3)、字符串比較運算符
lt(小于)、gt(大于)、eq(等于)、le(小于等于)、ge(大于等于)、ne(等于)、cmp(比較)
(1)字符串的比較原則:按照字母表的順序比較,數(shù)字<大寫字母<小寫字母(a小―z大)
(2)字符串比較的次序:字符串從左到右比較。'azz'<‘bc'(即:首先a與b進行比較,然后z與c進行比較)
(3)當一個串是另一個的前綴時,長度長的為大。例如:dog<doghouse
(4)字符串可以從右向左進位,且是字母數(shù)字分別進行
(5)自動把操作數(shù)轉(zhuǎn)化為字符串。123 lt 45 => '123' lt '45'
(6)cmp等同于<=>,結(jié)果為-1,0, 1
例如:$str1=”a”,$str2=”a“,則print ($str1 cmp $str2) ==> 0
例如:$str1=”a”,$str2=”b”,則print($str1 cmp $str2)===> -1
例如:$str1=”b”,$str2=”a”,則print($str1 cmp $str2)===> 1
(7)空串,0,Undef,這三種情況都為假
例如:如下比較的結(jié)果
35 != 30+5     #假
35 == 35.0     #真
'35' eq '35.0'   #假(當成字符串來比較)
'fred'  lt  'barney'  #假
'fred'  lt  'free'      #假
'fred'  eq "fred"    #真
'fred'  eq  "Fred"  #假
'   '  gt  ' '  #真

4)、字符串連接(.)、字符/字符串重復(fù)(x)
(1)連接( “.“),例如:$a=‘a(chǎn)'.'b';  =>‘a(chǎn)b'
在print時可以直接寫print $a$b=>print $a.$b; 但是這兩者的原理是不一樣的
(2)重復(fù)( “x” ),注意:前后有空格(目的:為了和變量名分開),例如:‘a(chǎn)'  x  5=‘a(chǎn)aaaa',若重復(fù)次數(shù)<1,則返回空串
例如:"5" x 4,即為:"5555"
例如:"love" x (4+1),即為:"lovelovelovelovelove"
例如:"4.8" x 4,即為:"4.84.84.84.8"
例如:6.1 x 3,即為:"6.16.16.1"
即:左邊是一個字符串,右邊是該字符串出現(xiàn)的次數(shù)

5)、邏輯運算符(&&(and)(與)、||(or)(或)、!(not)(非)、xor(異或)
(1)先算左邊的值,后算右邊的值
(2)&&和and的優(yōu)先級不同,但除非特殊情況,很難有區(qū)別

6)、位操作運算符
&(按位與)、 |(按位或)、 ~(按位非)、 ^(按位異或)、 <<(左移)、>>(右移)
(1)操作數(shù)為二進制整數(shù),如果是小數(shù)則截取為整數(shù)
(2)<<左移,移開后空位補0,值為原數(shù)值的2*N倍(例如:z<<4,則z=z*(2的4次方))
(3)>>右移,首位補0,值為原值一半(并取整)(例如:z>>4,則z=z/(2的的次方))

7)、賦值運算符
=、+=、-=、*=、/=、%=、**=、&=、|=、^=、.=
(1)$a+=1=>$a=$a+1
(2)可以連等$a=$b=3;=>$a=3;$b=3;
(3)混用 ($a=$b)+=3;=>$a=$b;$a=$a+3;(不建議使用)

8)、自增(++)、自減(--)
(1)不要在變量兩邊都使用此種操作符:++$var--
(2)不要在變量自增/減后在同一表達式中再次使用:$var2 = $var1 + ++$var1;
(3)可用于字符串的自增,當z、Z、9時進位。$a=‘caz'; $a++; ==> $a=‘cba';
(4)不能用于字符串的自減,當$a--時,按數(shù)字運算,字符先轉(zhuǎn)化為0再自減
(5)如果字符串含有非字母數(shù)字符號,或數(shù)字位于字母中時,自增也先化為0再自增
例如:$a=‘a(chǎn)b*c'; $a++;  ==> $a=1;
例如:$a=‘a(chǎn)b5c'; $a++;  ==> $a=1;
(6)預(yù)增$b=++$a,$a先自增再賦值,后增$b=$a++;$a先賦值再自增;反之,同理
例如:$a=1; $b=++$a; =>$a=2,$b=2;
例如:$a=1; $b=$a++; =>$a=2,$b=1;
(7)只能用于單一變量,不能對運算后的變量進行。例如:($a+$b)++

9)、逗號(相當于:將兩條語句寫在一行)
適用范圍: 只有當兩個語句關(guān)聯(lián)緊密時才使用
例如:$a+=1,$b=$a;  => $a+=1; $b=$a;
例如:$a="ab5c", print $a."/n";

10、條件運算符
條件? 真:假
(1)三個操作數(shù):先對條件表達式運算,為真時執(zhí)行:的左邊的運算,為假時執(zhí)行:的右邊的運算
例如:$result = $var == 0 ? 14 : 7;
(2)用于簡單的條件
(3)條件表達式用在=的左邊
例如:$condvar == 43 ? $var1 : $var2 = 14;
例如:$condvar == 43 ? $var1 = 14 : $var2 = 14;

三、操作符優(yōu)先級別( precedence--優(yōu)先級)
當一個表達式中出現(xiàn)幾種不同的運算符,哪個先計算,哪個后計算
例如:$condvar == 43 ? $var1 : $var2 = 14;(先算條件,后算賦值)
例如:$x = $a == $b;(先算關(guān)系,后算賦值)
例如:$x == 0 || $y / $x > 5;(先算除,接著算大于、接著算等于,最后算關(guān)系或)
例如:$result = 11 * 2 + 6 ** 2 << 2;(先算冪,再算乘,接著算加,再接著算左移,最后算賦值)
(1)一般的優(yōu)先級如下:自增自減最高,單操作數(shù)高于多操作數(shù),數(shù)字運算 > 比較運算(數(shù)字比較與字符串比較) > 位運算 > 賦值運算 > 邏輯運算
(2)數(shù)字運算:冪 > */>+-
(3)比較運算: <(小于)、>(大于)高于(== 與!=)

2 Scalar Array
Perl數(shù)組變量和列表的概念,列表是包含在括號里的一序列的值,可以為任何數(shù)值,也可為空,并且列表存貯于Perl數(shù)組變量中,與簡單變量不同,Perl數(shù)組變量以字符"@"打頭。

Perl數(shù)組變量和列表

一、列表

列表是包含在括號里的一序列的值,可以為任何數(shù)值,也可為空,如:

(1,5.3,"hello",2),空列表:()。

注:只含有一個數(shù)值的列表(如:(43.2))與該數(shù)值本身(即:43.2)是不同的,但它們可

以互相轉(zhuǎn)化或賦值。

列表例:

(17,$var,"astring")

(17,26<<2)

(17,$var1+$var2)

($value,"Theansweris$value")

二、Perl數(shù)組--列表的存貯

列表存貯于Perl數(shù)組變量中,與簡單變量不同,Perl數(shù)組變量以字符"@"打頭,如:

@array=(1,2,3);

注:

(1)Perl數(shù)組變量創(chuàng)建時初始值為空列表:()。

(2)因為PERL用@和$來區(qū)分Perl數(shù)組變量和簡單變量,所以同一個名字可以同時用于Perl

數(shù)組變量和簡單變量,如:

$var=1;

@var=(11,27.1,"astring");

但這樣很容易混淆,故不推薦。

1、Perl數(shù)組的存取

◆對Perl數(shù)組中的值通過下標存取,第一個元素下標為0。試圖訪問不存在的Perl數(shù)組元

素,則結(jié)果為NULL,但如果給超出Perl數(shù)組大小的元素賦值,則Perl數(shù)組自動增長,原

來沒有的元素值為NULL。如:

@array=(1,2,3,4);

$scalar=$array[0];

$array[3]=5;#now@arrayis(1,2,3,5)

$scalar=$array[4];#now$scalar=null;

$array[6]=17;#now@arrayis(1,2,3,5,"","",17)

◆Perl數(shù)組間拷貝

@result=@original;

◆用Perl數(shù)組給列表賦值

@list1=(2,3,4);

@list2=(1,@list1,5);#@list2=(1,2,3,4,5)

◆Perl數(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)

◆從標準輸入(STDIN)給變量賦值

$var=<STDIN>;

@array=<STDIN>;#^D為結(jié)束輸入的符號

2、字符串中的方括號和變量替換

"$var[0]"為Perl數(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ù)

(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")

◆可包含變量或表達式

($var1..$var2+5)

◆小技巧:

$fred="Fred";

print(("Hello,".$fred."!/n")x2);

其結(jié)果為:

Hello,Fred!

Hello,Fred!

4、Perl數(shù)組的輸出:

(1)@array=(1,2,3);

print(@array,"/n");

結(jié)果為:

123

(2)@array=(1,2,3);

print("@array/n");

結(jié)果為:

123

5、列表/Perl數(shù)組的長度

當Perl數(shù)組變量出現(xiàn)在預(yù)期簡單變量出現(xiàn)的地方,則PERL解釋器取其長度。

@array=(1,2,3);

$scalar=@array;#$scalar=3,即@array的長度

($scalar)=@array;#$scalar=1,即@array第一個元素的值

注:以Perl數(shù)組的長度為循環(huán)次數(shù)可如下編程:

$count=1;

while($count<=@array){

print("element$count:$array[$count-1]/n");

$count++;

}

6、子Perl數(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

可以用子Perl數(shù)組形式來交換元素:

@array[1,2]=@array[2,1];

7、有關(guān)Perl數(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)Perl數(shù)組

@array2=reverse(@array);

@array2=reversesort(@array);

(3)chop--Perl數(shù)組去尾

chop的意義是去掉STDIN(鍵盤)輸入字符串時最后一個字符--換行符。而如果它作用到Perl數(shù)組上,則將Perl數(shù)組中每一個元素都做如此處理。

@list=("rabbit","12345","quartz");

chop(@list);#@list=("rabbi","1234","quart")now

(4)join/split--連接/拆分

join的第一個參數(shù)是連接所用的中間字符,其余則為待連接的字符Perl數(shù)組。

$string=join("","this","is","a","string");#結(jié)果為"thisisastring"

@list=("words","and");

$string=join("::",@list,"colons");#結(jié)果為"words::and::colons"

@array=split(/::/,$string);#@array=("words","and","colons")now

3 Hash Array(Associative Array)
perl hash 常見用法
基本用法
# 初始化 %h為空數(shù)組%h = {};# 用數(shù)組初始化%h為 a=>1, b=>2%h = ('a', 1, 'b', 2);# 意義同上,只是另一種更形象化的寫法。%h = ('a'=>1, 'b'=>2);#如果key是字符串,可以省略引號。下面這行和上面那行是一樣的%h = (a=>1, b=>2);# 用{}來訪問print &quot;$h{a}/n&quot;; # 打印1$h = '2b';print &quot;$h/n&quot;; # 打印2b# 刪除key用deletedelete $h; # 從$h刪除'b'
清空hash
undef %h

得到hash的所有鍵值
# 得到所有keys,順序取決于hash函數(shù),或者說是亂序
@all_keys = keys %h;
# 所有鍵值,是按hash的值從大往小排列的。值的比較是數(shù)字比較(比如說,10>9)
@all_keys = sort{$h{$b}&lt;=>$h{$a}} (keys %h);
# 所有鍵值,是按hash的值從小往大排列的。值的比較是數(shù)字比較
@all_keys = sort{$h{$a}&lt;=>$h{$b}} (keys %h);
# 所有鍵值,是按hash的值從小往大排列的。值的比較是字符串比較(比如說,'10' &lt; '9')
@all_keys = sort{$h{$a} cmp $h{$b}} (keys %h);

判斷hash是否包含key
exists($h{$key});

Hash的長度
想要知道一個hash存放多少數(shù)據(jù)
$hash_size = keys %h
# 把%h的長度放到$hash_size中
print scalar kes %h, &quot;/n&quot;
# 打印%h的長度。這里用了scalar來返回數(shù)組長度。

遍歷一個hash
while (my ($k, $v) = each %h) {print &quot;$k ---> $v/n&quot;;}

Reference引用
Reference類似于C/C++的指針
$h_ref = /%h;
# 獲得一個hash的reference%aHash = %{$h_ref};
# 把hash reference當成hash用$value = $h_ref->{akey}
# 這個和%h{akey}是一樣的

傳遞hash到函數(shù)
一般都是傳遞一個reference到函數(shù)

%h = ();$h{a}=1;foo(/%h)print $h, &quot;/n&quot;;
# 打印出2。
這個值來自于函數(shù)foo() sub foo {my ($h) = @_;print $h->{a}, &quot;/n&quot;;
# 打印出1$h-> = 2;}

函數(shù)返回hash,或者hash引用(hash reference)
函數(shù)可以返回hash
sub foo {my %fh;$fh{a} = 1;return %h;} my %h = foo();print

控制結(jié)構(gòu)(Control Statements)
1 選擇 if結(jié)構(gòu)
Perl的條件控制敘述和C語言很像,讓使用者很快就能掌握它。不過Perl比C語言又另外多了些實用的語法,我用底線標出來,大家一看便知。

# Expression 就是條件敘述式,Perl和C一樣沒有定義布爾數(shù)據(jù)型態(tài)(Boolean datatype),
# 因此 0 是false、非0 是ture。另外要注意字符串運算子和數(shù)值運算子要分清楚哦。
# Code Segment 就是用大括號括起來的一堆指令,也就是一個Block。
if (Expression) {Code Segment}
if (Expression) {Code Segment} else {Code Segment}
if (Expression) {Code Segment} elsif (Expression) {Code Segment} else {CodeSegment}
# elsif 就是 else if
# 如果指令(statement)只有一項,我們可以使用倒裝句法,看起來比較簡潔。
statement if (Expression);
# unless 就是if not
statement unless (Expression);例:
print "HELLO!/n" if ($name eq "friend");
$x-=10 if ($x == 100);
看吧! C 語言有的Perl大部分都有,學(xué)過 C 的人可以毫不費力的學(xué)會Perl。

2循環(huán)結(jié)構(gòu)
Perl的循環(huán)控制敘述也和C語言很像,當然,照例Perl也另外多了些實用的語法:
# 注意:純量變數(shù)前面要加個 $ 字號,這一點和C語言不一樣哦。
for($i=0; $i<=10; $i++) {Code Segment}

# foreach 是承襲UNIX的shell script來的,
# 第一個自變量是純量變數(shù),第二個自變量要用括號括起來,里面是一個純量數(shù)組,
# 顧名思義它就是把數(shù)組中的每個元素依序傳給第一個自變量,直到全部傳完。
# 它和 for($i=0; $i<=$#array; $i++) 用法雖然不同,但目的都是要取出數(shù)組的每個元素。
foreach $i (@array) {Code Segment}
# 其實在Perl中,for和foreach是可以混著用的,就看個的人習(xí)慣了。
# 下面這行就等于上面第一個敘述,不過簡潔多了,大家可以試著用用看。
for $i (0..10) {Code Segment}

# while控制循環(huán)和后置循環(huán)。
while($i<=10) {Code Segment}
do {Code Segment} while(Expression);
# Perl也有和C語言的break和continue一樣的指令,Perl叫它做 last 和 next (較口語化)。
# last是跳出現(xiàn)在所在的循環(huán),next則是跳過下面的指令直接執(zhí)行下一次的循環(huán)。
while(chomp($i=)) {
next if ($i == 5);
last unless ($i > 10);
}

Perl 還有提供label(標記)的語法,也就是goto 指令,不過有經(jīng)驗的programer并不喜歡用它,我也不建議大家使用,所以就此按下不講。有興趣的人請自行查閱。還有一點值得注意的是Perl沒有提供像C語言一樣的 switch 敘述,不過Perl的pattern match的功能非常強,所以我建議你直接用 if else 敘述來做就好了。

3子程序(Subroutines)
(a) Syntax: sub NAME {Code}
(b) 呼叫子程序: &NAME(para1, para2,...)
(c) 參數(shù)傳遞:@_
Perl 和C一樣是采用Call by value的方式,不過因為Perl不用事先宣告變量,所以建立子程序的時候也不用宣告要傳遞什么參數(shù)。當主程序在傳遞參數(shù)給子程序時,Perl會把括號括起來的參數(shù)按順序放在一個特殊的全域變量 @_ 數(shù)組中,然后子程序就可以隨意使用數(shù)組 @_ 里的參數(shù),例如 $_[0] 是第一個參數(shù), $_[1] 是第二個,或是用 my($a1,$a2,$a3,...) = @_;來取出各個參數(shù),當然 my @arg=@_; 或 my %arg=@_; 也是可以的。由于Perl的語法非?;顫?,使得程序在維護時特別棘手,因此寫批注成為一項很重要的工作。我建議你最好在每個子程序前面加上對這段子程序的描述,特別是需要傳遞的參數(shù)要注明清楚。
(d) Variable Localization:my or local
通常我們在程序中定義的變量都是全域變量,所以在子程序中若要把變量區(qū)域化則要加上 my 或 local 關(guān)鍵詞,例如:my $x=3;,若子程序所用的變量名不小心和主程相同,Perl會以目前正在執(zhí)行的子程序里的變量為優(yōu)先。

4 I/O和檔案處理
(a) Syntax:
open(FILEHANDLE,"Expression");
close(FILEHANDLE);
這里的Expression是一個敘述加上文件名稱,若Expression只有文件名稱沒有加上敘述,則預(yù)設(shè)是只讀。Expressions敘述如下:

Expression    Effect
open(FH, " filename")
open(FH, "+filename")
open(FH, ">filename")      Opens filename for writing.
open(FH, "+>filename")    Opens filename for both reading and writing.
open(FH, ">>filename")    Appends to filename.
open(FH, "command|")     Runs the command and pipes its output to thefilehandle.
open(FH, "command|")     Pipes the output along the filehandle to thecommand.
open(FH, "-")     Opens STDIN.
open(FH, ">-")     Opens STDOUT.
open(FH, "<&=N") Where N is a number, this performs the equivalent of C'sfdopen for reading.
open(FH, ">&=N")  Where N is a number, this performs the equivalent of C'sfdopen for writing.
例:
# 開啟$filename這個檔案,若開啟失敗則印出die后面的訊息,并結(jié)束程序。
open(FILE, $filename) || die "Can't open file $filename : $!/n";

# 下面是一個十分精簡的寫法,和 while($_=){print "$_";} 是等效的。
print while();

# 檔案開啟后要記得隨手關(guān)閉,這才是寫程序的好習(xí)慣。
close(FILE);

# $!和$_都是Perl的特殊變數(shù),下面會介紹的。

(b) Input:
Perl沒有特別用來輸入的函數(shù),因為Perl在執(zhí)行程序時,會自動開啟標準輸入裝置,其filehandle定為STDIN,所以在Perl中要輸入數(shù)據(jù)的方法就是使用:

# Perl不會自動去掉結(jié)尾的CR/LF,跟C語言不同,所以要用chomp函數(shù)幫你去掉它。
# 大家常常會忘記這個動作,導(dǎo)致結(jié)果跟你想的不一樣,要特別注意一下。
$input=<STDIN>; chomp $input;
# 下面是較簡潔的寫法。
chomp($input=<STDIN>);

(c) Output:print "variables or 字符串";
Perl也有printf()函數(shù),語法和C語言一模一樣,我就不多做介紹了。Perl另外有個print函數(shù),比printf()更方便、更好用,包你愛不釋手。Output不外乎是輸出到屏幕或檔案,用例子來說明比較容易了解。

# 不用再指定變量的data type,這樣不是比printf()方便多了嗎?
print "Scalar value is $x/n";

# . 是字符串加法的運算子,上下這兩行是等效的。
print "Scalar value is " . $x . "/n";

# 輸出到檔案的方法。
print FILE "print $x to a file.";

# 下面是print的特殊用法,學(xué)自shell script的用法:
print<XXX

這招叫做 here document,XXX可以是你取的任何標識符,在標識符之間的字都會按照你所寫的樣子輸出,就像/標簽一樣。而當一行的開頭是XXX你取的這個標識符時,才會停止輸出。
XXX

Perl 也有和 C 一樣以 "/" 開頭的特殊字符:
/t    tab
/n    newline
/r    return
/f    form feed
/b    backspace
/a    alarm(bell)
/e    escape
/033  octalchar
/x1b  hex char
/c[   control char
/l    lowercase next char
/u    uppercase next char
/L    lowercase till /E
/U    uppercase till /E
/E    end case modification
/Q    quoteregexp metacharacters till /E

另外需要說明的是 Perl 融合了unix shell script的使用慣例,以雙引號("")括起來的字符串會先經(jīng)過展開,但反斜線(/)后面的字符則不展開,當作一般字符看待。而以單引號('')括起來的字符串完全不會展開,以反單引號(``)括起來的字符串會把它當作命令列指令一樣執(zhí)行,等于system()一樣。初學(xué)者常常會搞混,但習(xí)慣之后就會覺得不這樣分清楚反而不行哩,舉個例吧:
$x="ls -l";
print "$x";             # Output ls -l
print "/$x";            # Output $x
print '$x';             # Output $x
print `$x`;             # Output files in this directory

函數(shù)
1. Perl函數(shù)
通過 & 調(diào)用.

2. Perl參數(shù)
Perl天然支持可變數(shù)目個參數(shù)。
在函數(shù)內(nèi)部,所有參數(shù)按順序放在數(shù)組 @_ 中,在函數(shù)內(nèi)部,$_[0] 表示函數(shù)的第一個

參數(shù),其余類推。

3. shift
shift 后跟一個數(shù)組,表示將數(shù)組的第一個值返回。數(shù)組也被改變,其第一個元素被彈

出。

演示代碼一(求最大值):
#!/usr/bin/perl -w
use strict;
# 調(diào)用函數(shù)max,取得一組數(shù)值的最大值,并輸出。
my $maxCnt = &max(11,22,33);
print "maxCnt=$maxCnt/n";

sub max {
# 采用遍歷算法。先將參數(shù)中的第一個值賦給$currentMaxCnt。
# @_ 是默認的包含本函數(shù)所有參數(shù) [如(11,22,33)]的數(shù)組。
# shift @_ 有兩個結(jié)果: 1. 將數(shù)組 @_ 中的第一個值做為返回值(賦給了

$currentMaxCnt). 2. 將@_數(shù)組第一個值彈出[此后@_的值變?yōu)?22,33)].
my $currentMaxCnt = shift @_;
# 函數(shù)中使用shift時,@_可以省略。上面代碼也可以寫成這樣。
#  my $currentMaxCnt = shift;

# 遍歷整個@_數(shù)組。
foreach ( @_ ) {
# $_ 表示數(shù)組@_中當前被遍歷到的元素.
if ( $_ > $currentMaxCnt ) {
# 如果發(fā)現(xiàn)當前數(shù)組元素比$currentMaxCnt大,那就將$currentMaxCnt重新賦值為當前

元素。
$currentMaxCnt = $_;
}
}
# 函數(shù)返回值為標量$currentMaxCnt.
return $currentMaxCnt;
}

演示代碼二(求和):
#!/usr/bin/perl -w
use strict;

# 求一組數(shù)的和并打印。
my $s1 = &sumvar(11,22,33);
my $s2 = &sumarg(22,33,44);
my $s3 = &sumgod(11,22,33,44,55);
print "s1=$s1, s2=$s2, s3=$s3/n";

# 辦法1
sub sumvar {
# 將參數(shù)數(shù)組的前三個元素值相應(yīng)地賦給($first, $second, $third)
(my $first, my $second, my $third) = @_;
# 返回其和值。缺點: 如果是求四個參數(shù)的和,依然只能給出前三個的和。
return $first + $second + $third;
}

# 辦法2
sub sumarg {
# $_[0] 表示參數(shù)數(shù)組@_的第一個元素。其余類推。
my $first = $_[0];
my $second = $_[1];
my $third = $_[2];
# 返回其和值。缺點: 同sumvar. 只是通過這里學(xué)習(xí) $_[0] 這種用法。
return $first + $second + $third;
}

# 辦法3, 參數(shù)可以任意多。都能求其和。
sub sumgod{
my $s = shift @_;
foreach ( @_ ) {
$s = $s + $_;
}
# 同前面函數(shù)max。
return $s;
}

8總結(jié)
整理了一下自己覺得用的比較多的一些符號、用法、函數(shù)、庫之類的,這些都是很基本

的,但是“背熟”了,對提高效率會很有幫助。

數(shù)據(jù)操作
* $ - 聲明與引用用一個scalar的變量
* @ - 聲明與引用一個list,但是當訪問一個list的成員時,需使用$ListName[index]
* % - 聲明與引用一個hash表,但是當訪問一個hash的成員時,需要使用$HashName

{key}

特殊變量
* $0 - 當前運行腳本的文件名
* @ARGV - 當前運行腳本的命令行參數(shù)列表
* $_ - 默認變量,如循環(huán)中的當前變量
* @_ - 函數(shù)的輸入?yún)?shù)列表
* %ENV - 系統(tǒng)的環(huán)境變量
* @INC - Perl的Include路徑列表,我們可以往該列表中添加我們自己的目錄來方便引

用自定義的庫
* $! - 當前系統(tǒng)提示,錯誤信息
* $^O - 操作系統(tǒng)的名字
* STDIN,STDOUT,STDERR - 輸入輸出的默認句柄,可以作一定的自定義
* => - 聲明一個hash時可以用來明確的表示出key=>value的對應(yīng)關(guān)系
* $^I- 指定備份的文件的后綴名,如此,被修改的文件將會自動以該后綴名保存一個副

特殊用法
* &Sub - 調(diào)用一個函數(shù),雖然Perl有些規(guī)則讓你在某些時候可以省略這里的&符號,但

是處于一致性考慮,所以自定義的函數(shù)的調(diào)用,我一律采用此種方式。
* $# - 用來取得模個數(shù)組的最大index, 一般情況下,也可以用-1來表示最后一個元素

的index的
* qw() - 快速聲明一個字符串數(shù)組,可以省略那些煩人的引號

正則表達式
* $ - 獲取被括號捕獲的匹配
* $`, $&, $' - 獲取匹配的字符串,以及其前后兩個部分
* ^,$ - 字符串的始末位置,用作定位

常用函數(shù)
* pop, push, shift, unshift, reverse - list的操作函數(shù)
* keys,values, exists, each, delete - hash的操作函數(shù)
* chomp, split, join, index, substr, sort - 字符串操作函數(shù)
* sprintf,printf, print - 格式化輸出函數(shù)
* system, exec, `` - 系統(tǒng)命令調(diào)用函數(shù)
* glob, unlink, mkdir, rmdir, rename,chmod,chown, open, close, opendir,

closedir - 文件系統(tǒng)操作函數(shù)
* stat, lstat,localtime,gmtime,utime - 文檔屬性,時間相關(guān)函數(shù)
* hex, oct - 二進制,八進制,十六進制數(shù)轉(zhuǎn)化成十進制的函數(shù)
* grep, map - list高級操作函數(shù)

這些函數(shù)的詳細介紹,都可以通過命令:
#perldoc -f functionname
查到

常用庫
* File::Basename - 根據(jù)path獲取文件名或者文件路徑
* File::Spec - 根據(jù)文件名與路徑組合成全路經(jīng)
* File::Find - 遞歸遍歷某個目錄下所有文件
* XML::Simple - 以一個復(fù)雜的結(jié)構(gòu)來表示xml文件,使用起來相當方便
* Time::HiRes - 經(jīng)常用來計算一個操作所耗費的時間
* Getopt::Long - 當腳本需要復(fù)雜的輸入?yún)?shù)與選項時用到
* Cwd - 拿到當前工作目錄
* IO::File - 文件操作
* Win32 - 當需要調(diào)用一些Windows API時我會用它

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
日韩中文在线字幕| 午夜视频你懂的| 91看片在线观看| 综合视频在线| 蜜臀a∨国产成人精品| 亚洲天堂2020| 国产自摸综合网| 女同久久另类69精品国产| 爱看av在线| 免费国产精品视频| www.久久成人| 亚州欧美一区三区三区在线| 国产精品资源站在线| 欧美一级视频免费在线观看| 日韩高清三区| 国产激情小视频| 亚洲毛片在线看| 在线精品高清中文字幕| av不卡中文字幕| 国产一区91精品张津瑜| 九九热爱视频精品视频高清| 精品亚洲欧美日韩| 久久久久免费av| 国产人妻人伦精品1国产丝袜| 在线观看av一区二区| 久久久久9999| 黄色片在线看| 毛片网站免费观看| 国产二区国产一区在线观看| 欧美日韩加勒比精品一区| 久久精品中文字幕一区| 少妇一级淫片日本| 日本在线视频www鲁啊鲁| 91成人在线看| 男人和女人做事情在线视频网站免费观看| 最近中文字幕在线观看| 91麻豆成人久久精品二区三区| 欧美亚洲天堂网| 色先锋av资源在线| h网站在线看| 国产一级免费大片| 91免费在线视频网站| 在线成人一区| 免费在线精品视频| 国产一区二区三区丝袜| 精品美女久久久久久免费| 免费观看黄色一级视频| 韩国三级在线播放| 奇米影视狠狠狠| 国产乱码字幕精品高清av| 国产精品99久久精品| 国产精品亚洲产品| 一级在线观看| 久久一级黄色片| 国产精品极品美女粉嫩高清在线| 一级毛片在线播放| 国产亚洲精品美女久久久m| 可以在线观看的av| 欧美18一19xxx性| 亚洲国产日韩欧美在线| 亚洲图片激情小说| 中文字幕欧美日韩一区二区三区| 日韩限制级电影在线观看| 2018国产精品视频| 人妻无码久久一区二区三区免费| 99久久久精品视频| 日韩精品一区二区三区中文字幕| 手机在线理论电影| 成人短视频在线观看| 国产一区二区视频在线观看| 国产一区 二区 三区一级| 粉嫩精品一区二区三区在线观看| 99国产精品免费| 春意影院午夜免费入口| 最新在线观看av| 国产精品国产亚洲精品| 高清日韩av| 在线视频超级| 日韩高清免费在线| 成人信息集中地欧美| 欧美日韩国产探花| 亚洲av无码乱码国产精品| 美女久久精品| 久久免费看毛片| 一级毛片免费视频| 国产黄色免费观看| 精品欠久久久中文字幕加勒比| 欧美电影免费看| 中国免费黄视频| 青青青草网站免费视频在线观看| 好吊日视频在线观看| 国产成人精品久久二区二区91| 午夜一级电影| 2023国产在线观看| 亚洲欧美日韩系列| 亚洲国模精品一区| 精油按摩中文字幕久久| 国产三级国产精品国产国在线观看| 亚洲精品久久久久久久久久久久久| 国产变态拳头交视频一区二区| av三级在线播放| 久久成人综合网| 国产精品一线| 尤物网址在线观看| 欧美日韩精品专区| 香蕉人妻av久久久久天天| 黄色网页在线| 久草在线在线精品观看| 97久久久久久| 亚洲色成人网站www永久四虎| 久久久久久久久久久久久久久久久久久| 亚洲综合一区二区三区| 好吊色视频在线观看| 色婷婷综合中文久久一本| 国产伦精品一区三区精东| 黄色三级视屏| 亚洲 另类 春色 国产| 新版中文字幕在线资源| 国产精品久久久久久久久久久久冷| 久久精品一区二区三区四区五区| 国产日韩欧美精品一区| 欧美一区国产在线| 丰满少妇又爽又紧又丰满电影| 日韩一级淫片| 国产一二区视频| 在线国产成人影院| 亚洲国产精品久久久久婷蜜芽| 亚洲一区在线观看免费观看电影高清| 91porny在线| av观看成片免费网站| 日韩成人免费在线观看| 在线伊人免费视频| 亚洲一区 在线播放| 成人一区在线看| 午夜av电影| 97人人模人人爽视频一区二区| 日韩免费毛片视频| 极品美乳网红视频免费在线观看| 国产精品nxnn| 麻豆传媒网站在线观看| 精品丰满少妇一区二区三区| www.久久精品.com| 日韩中文字幕在线免费| 亚洲国产日韩综合久久精品| 午夜日韩成人影院| 国产性xxxx18免费观看视频| 成人app下载| 成人av电影天堂| 夜夜爽妓女8888视频免费观看| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲成人激情综合网| 欧美猛交xxxxx| 日本视频在线免费观看| 神马亚洲视频| 无码人妻丰满熟妇区毛片18| 亚洲国产日韩欧美在线图片| 99久久免费国产| 婷婷综合在线观看| 99re在线视频上| 国产一区二中文字幕在线看| 日韩一二三区在线观看| 成人久久久久久| gogo高清免费视频| 路边理发店露脸熟妇泻火| 欧美日韩色综合| 亚洲精品一区二区三区新线路| 日本成人一区| 欧美最猛黑人xxxx黑人猛交3p| 午夜精品视频网站| 国产一区二区女| 欧美1区2区3区4区| 亚洲男人天堂久| 免费**毛片在线| 国产精品久久久久精| 中文字幕一区二区三区域| 久久久久国产精品熟女影院| 91精品欧美综合在线观看最新| 好色视频app| 国产九九精品视频| 91亚洲国产成人精品性色| 污视频网站在线看| 成人免费毛片男人用品| avtt天堂资源网| 深夜精品寂寞黄网站在线观看| 国产毛片欧美毛片久久久| 女人18毛片水真多18精品| 国产一级做a爱片久久毛片a| 欧美在线观看网址综合| 男人天堂午夜在线| 中文字幕激情视频| 久久五月精品| 国产在线第一页| 精品国产乱码一区二区三区| 成人看片视频| 成人免费视频97| 色偷偷av亚洲男人的天堂| 日本一二三区在线视频| 欲求不满的岳中文字幕| 一区不卡在线观看| 精品成a人在线观看| 国产亚洲黄色片| 625成人欧美午夜电影| 欧美日韩一区 二区 三区 久久精品| 国产成人无码精品久久久久| 欧美疯狂性受xxxxx喷水图片| 在线视频欧美日韩精品| 经典三级一区二区| 国产精品高潮呻吟AV无码| 午夜久久久久久电影| 午夜精品美女自拍福到在线| 亚洲人成在线网站| 超级白嫩亚洲国产第一| 日韩.欧美.亚洲| 欧美精品成人一区二区在线观看| 国产免费的av| 91亚洲精选| 欧美另类第一页| 国产永久在线观看| 男女小视频在线观看| 91成人短视频在线观看| 欧美日韩裸体免费视频| 4438x亚洲最大成人网| 午夜肉伦伦影院| 国内自拍视频在线播放| 成人小电影网站| 欧美国产三区| 老太脱裤让老头玩ⅹxxxx| av网站中文字幕| 十九岁完整版在线观看好看云免费| 欧美中文在线观看国产| 深爱激情综合网| 91精品国产综合久久精品图片| 欧美二三四区| 欧美一区午夜精品| 亚洲国产不卡| 日韩免费电影一区| 欧美福利视频在线观看| 日本高清网站| 国产激情在线看| 成人网页在线观看| 男女午夜刺激视频| 黄色大片在线免费看| 国产精品久久久久久免费免熟| 日韩欧美中文在线| 日本va欧美va精品发布| 偷拍视频一区二区| 性娇小13――14欧美| 成人精品在线| sm性调教片在线观看| 亚洲精品久久久久avwww潮水| 九九亚洲视频| 日本一区免费观看| 国产乱子精品一区二区在线观看| 年轻的保姆91精品| 久久中文免费视频| 精品国产欧美| 91九色老女人| 欧洲亚洲一区二区三区| 亚洲图片激情小说| 欧美xxxx18| 日本韩国欧美一区二区三区| 一区二区自拍偷拍| 天天色综合久久| 无码人妻精品一区二区蜜桃色欲| 一级毛片在线观| 久久午夜av| av日韩在线免费| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 精品国产欧美日韩一区二区三区| 亚洲精品视频在线| 国产精品国产三级国产普通话三级| 91在线视频免费看| 成人h片在线播放免费网站| 中国女人内谢25xxxxx| wwwav在线| 久久久久久久久久一区二区| 亚洲午夜久久| 一区二区三区无码高清视频| 久久久999精品视频| 久久精品论坛| 久久久99久久精品欧美| 日本精品视频网站| 国内一区二区视频| 永久免费毛片在线播放| 一线天粉嫩在线播放| 久久精品视频在线观看免费| 日韩一级精品视频在线观看| 国产综合精品一区二区三区| 成人网在线免费视频| 亚洲精品一区二区在线| 国产乱码精品一区二区三区五月婷| 日本xxxxxxxxxx75| 久久综合色视频| 国产又黄又猛的视频| 四虎精品一区二区| 日韩大陆欧美高清视频区| 日夜干在线视频| 禁久久精品乱码| 91人人爽人人爽人人精88v| 黄色资源网久久资源365| 免费a级人成a大片在线观看| 国产卡一卡2卡三卡免费视频| 一广人看www在线观看免费视频| 国产乱人伦真实精品视频| 9191成人精品久久| 国产精品高清乱码在线观看| 一区二区三区亚洲变态调教大结局| 亚洲一区日韩精品| 亚洲自拍av在线| 日本欧美电影在线观看| 最新在线观看av网站| 国产一区二区三区四区| 亚洲人高潮女人毛茸茸| 国产淫片av片久久久久久| 国产乱人伦真实精品视频| 国产一区精品二区| 欧美日韩性视频一区二区三区| 2023亚洲男人天堂| 日韩精彩视频在线观看| 日韩一级电影| 一区二区三区在线视频111| 国产精久久一区二区| 午夜午夜精品一区二区三区文| 狠狠躁夜夜躁人人躁婷婷91| 久久精品视频在线免费观看| eeuss影院www在线播放| 国产毛片久久| 欧美综合在线播放|