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

首頁 > 編程 > Perl > 正文

簡單敘述Perl的基本語法

2020-02-23 19:47:51
字體:
供稿:網(wǎng)友

一.?dāng)?shù)據(jù)類型(Data type)

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

1 Scalar(純量變量):

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

1-1 常用的操作運(yùn)算符

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

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

3)、字符串比較運(yùn)算符
lt(小于)、gt(大于)、eq(等于)、le(小于等于)、ge(大于等于)、ne(等于)、cmp(比較)
(1)字符串的比較原則:按照字母表的順序比較,數(shù)字 (2)字符串比較的次序:字符串從左到右比較。'azz' (3)當(dāng)一個(gè)串是另一個(gè)的前綴時(shí),長度長的為大。例如:dog (4)字符串可以從右向左進(jìn)位,且是字母數(shù)字分別進(jìn)行
(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'?? #假(當(dāng)成字符串來比較)
'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時(shí)可以直接寫print $a$b=>print $a.$b; 但是這兩者的原理是不一樣的
(2)重復(fù)( “x” ),注意:前后有空格(目的:為了和變量名分開),例如:‘a(chǎn)'? x? 5=‘a(chǎn)aaaa',若重復(fù)次數(shù) 例如:"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"
即:左邊是一個(gè)字符串,右邊是該字符串出現(xiàn)的次數(shù)

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

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

7)、賦值運(yùn)算符
=、+=、-=、*=、/=、%=、**=、&=、|=、^=、.=
(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)不要在變量自增/減后在同一表達(dá)式中再次使用:$var2 = $var1 + ++$var1;
(3)可用于字符串的自增,當(dāng)z、Z、9時(shí)進(jìn)位。$a=‘caz'; $a++; ==> $a=‘cba';
(4)不能用于字符串的自減,當(dāng)$a--時(shí),按數(shù)字運(yùn)算,字符先轉(zhuǎn)化為0再自減
(5)如果字符串含有非字母數(shù)字符號,或數(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)只能用于單一變量,不能對運(yùn)算后的變量進(jìn)行。例如:($a+$b)++

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

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

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

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

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

一、列表

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

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

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

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

列表例:

(17,$var,"astring")

(17,26

(17,$var1+$var2)

($value,"Theansweris$value")

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

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

@array=(1,2,3);

注:

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

(2)因?yàn)镻ERL用@和$來區(qū)分Perl數(shù)組變量和簡單變量,所以同一個(gè)名字可以同時(shí)用于Perl

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

$var=1;

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

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

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

◆對Perl數(shù)組中的值通過下標(biāo)存取,第一個(gè)元素下標(biāo)為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)

◆從標(biāo)準(zhǔn)輸入(STDIN)給變量賦值

$var=;

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

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

"$var[0]"為Perl數(shù)組@var的第一個(gè)元素。

"$var/[0]"將字符"["轉(zhuǎn)義,等價(jià)于"$var"."[0]",$var被變量替換,[0]保持不變。

"${var}[0]"亦等價(jià)于"$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í)數(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")

◆可包含變量或表達(dá)式

($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ù)組的長度

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

@array=(1,2,3);

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

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

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

$count=1;

while($count

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(鍵盤)輸入字符串時(shí)最后一個(gè)字符--換行符。而如果它作用到Perl數(shù)組上,則將Perl數(shù)組中每一個(gè)元素都做如此處理。

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

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

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

join的第一個(gè)參數(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.html" target="_blank">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 "$h{a}/n"; # 打印1$h = '2b';print "$h/n"; # 打印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}$h{$a}} (keys %h);
# 所有鍵值,是按hash的值從小往大排列的。值的比較是數(shù)字比較
@all_keys = sort{$h{$a}$h{$b}} (keys %h);
# 所有鍵值,是按hash的值從小往大排列的。值的比較是字符串比較(比如說,'10' @all_keys = sort{$h{$a} cmp $h{$b}} (keys %h);

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

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

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

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

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

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

函數(shù)返回hash,或者h(yuǎn)ash引用(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語言又另外多了些實(shí)用的語法,我用底線標(biāo)出來,大家一看便知。

# Expression 就是條件敘述式,Perl和C一樣沒有定義布爾數(shù)據(jù)型態(tài)(Boolean datatype),
# 因此 0 是false、非0 是ture。另外要注意字符串運(yùn)算子和數(shù)值運(yùn)算子要分清楚哦。
# Code Segment 就是用大括號括起來的一堆指令,也就是一個(gè)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)只有一項(xiàng),我們可以使用倒裝句法,看起來比較簡潔。
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 的人可以毫不費(fèi)力的學(xué)會Perl。

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

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

# while控制循環(huán)和后置循環(huán)。
while($i 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(標(biāo)記)的語法,也就是goto 指令,不過有經(jīng)驗(yàn)的programer并不喜歡用它,我也不建議大家使用,所以就此按下不講。有興趣的人請自行查閱。還有一點(diǎn)值得注意的是Perl沒有提供像C語言一樣的 switch 敘述,不過Perl的pattern match的功能非常強(qiáng),所以我建議你直接用 if else 敘述來做就好了。

3子程序(Subroutines)
(a) Syntax: sub NAME {Code}
(b) 呼叫子程序: &NAME(para1, para2,...)
(c) 參數(shù)傳遞:@_
Perl 和C一樣是采用Call by value的方式,不過因?yàn)镻erl不用事先宣告變量,所以建立子程序的時(shí)候也不用宣告要傳遞什么參數(shù)。當(dāng)主程序在傳遞參數(shù)給子程序時(shí),Perl會把括號括起來的參數(shù)按順序放在一個(gè)特殊的全域變量 @_ 數(shù)組中,然后子程序就可以隨意使用數(shù)組 @_ 里的參數(shù),例如 $_[0] 是第一個(gè)參數(shù), $_[1] 是第二個(gè),或是用 my($a1,$a2,$a3,...) = @_;來取出各個(gè)參數(shù),當(dāng)然 my @arg=@_; 或 my %arg=@_; 也是可以的。由于Perl的語法非?;顫姡沟贸绦蛟诰S護(hù)時(shí)特別棘手,因此寫批注成為一項(xiàng)很重要的工作。我建議你最好在每個(gè)子程序前面加上對這段子程序的描述,特別是需要傳遞的參數(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是一個(gè)敘述加上文件名稱,若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, " open(FH, ">&=N")? Where N is a number, this performs the equivalent of C'sfdopen for writing.
例:
# 開啟$filename這個(gè)檔案,若開啟失敗則印出die后面的訊息,并結(jié)束程序。
open(FILE, $filename) || die "Can't open file $filename : $!/n";

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

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

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

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

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

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

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

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

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

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

這招叫做 here document,XXX可以是你取的任何標(biāo)識符,在標(biāo)識符之間的字都會按照你所寫的樣子輸出,就像/標(biāo)簽一樣。而當(dāng)一行的開頭是XXX你取的這個(gè)標(biāo)識符時(shí),才會停止輸出。
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)過展開,但反斜線(/)后面的字符則不展開,當(dāng)作一般字符看待。而以單引號('')括起來的字符串完全不會展開,以反單引號(``)括起來的字符串會把它當(dāng)作命令列指令一樣執(zhí)行,等于system()一樣。初學(xué)者常常會搞混,但習(xí)慣之后就會覺得不這樣分清楚反而不行哩,舉個(gè)例吧:
$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ù)目個(gè)參數(shù)。
在函數(shù)內(nèi)部,所有參數(shù)按順序放在數(shù)組 @_ 中,在函數(shù)內(nèi)部,$_[0] 表示函數(shù)的第一個(gè)

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

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

出。

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

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

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

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

元素。
$currentMaxCnt = $_;
}
}
# 函數(shù)返回值為標(biāo)量$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ù)組的前三個(gè)元素值相應(yīng)地賦給($first, $second, $third)
(my $first, my $second, my $third) = @_;
# 返回其和值。缺點(diǎn): 如果是求四個(gè)參數(shù)的和,依然只能給出前三個(gè)的和。
return $first + $second + $third;
}

# 辦法2
sub sumarg {
# $_[0] 表示參數(shù)數(shù)組@_的第一個(gè)元素。其余類推。
my $first = $_[0];
my $second = $_[1];
my $third = $_[2];
# 返回其和值。缺點(diǎn): 同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ù)操作
* $ - 聲明與引用用一個(gè)scalar的變量
* @ - 聲明與引用一個(gè)list,但是當(dāng)訪問一個(gè)list的成員時(shí),需使用$ListName[index]
* % - 聲明與引用一個(gè)hash表,但是當(dāng)訪問一個(gè)hash的成員時(shí),需要使用$HashName

{key}

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

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

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

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

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

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

常用函數(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 - 文檔屬性,時(shí)間相關(guān)函數(shù)
* hex, oct - 二進(jìn)制,八進(jìn)制,十六進(jìn)制數(shù)轉(zhuǎn)化成十進(jìn)制的函數(shù)
* grep, map - list高級操作函數(shù)

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

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

以上就是簡單敘述Perl的基本語法的全部內(nèi)容,感謝大家的閱讀,更多內(nèi)容請關(guān)注武林技術(shù)頻道網(wǎng)站。

?

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

亚洲av成人片无码| 羞羞视频网站在线观看| 2019中文字幕在线观看| 国产人成网在线播放va免费| 国产精品国产三级国产普通话99| 最新欧美色图| 日韩小视频在线播放| 51ⅴ精品国产91久久久久久| 国产超碰在线一区| 99免费在线视频| 99久久精品免费视频| 日本暖暖在线视频| 久久一区二区三区超碰国产精品| 国产黄人亚洲片| 欧美午夜精品免费| 精品久久久久久久久久国产| 亚洲欧美视频一区二区| 在线小视频你懂的| 亚洲日本在线视频观看| 国产精品区免费视频| 久精品在线观看| 国产福利精品一区二区| 国产有码在线观看| 人妻无码视频一区二区三区| 超黄网站在线观看| 日韩综合一区| 任你弄在线视频免费观看| 久久精品久久久久久| 日韩一级二级三级精品视频| 中文字幕第2页| 三上悠亚ssⅰn939无码播放| 黄色av免费| 羞羞小视频在线观看| 久久精品日韩一区二区三区| 亚洲熟妇av一区二区三区漫画| 久久美女免费视频| 成品人视频ww入口| 久久久99久久精品欧美| 亚洲精品乱码久久久久久自慰| www.激情五月.com| 久久福利精品| 潘金莲一级淫片aaaaa免费看| 欧美18一14sex性处hd| 日韩欧美精品一区二区| 久久久久久久久久久久国产| 色婷婷综合久久久久久| 国产桃色电影在线播放| 免费一区二区三区在线视频| 欧美大片xxxx| www.91视频com| 特黄视频在线观看| 亚洲免费视频一区| 97视频com| 国产成人亚洲精品播放器下载| 欧美精品91| 欧美激情一区二区久久久| 国内在线高清免费视频| 亚洲成人在线视频播放| 午夜av成人| 亚洲精品一级二级三级| 男人添女人下部高潮视频在线观看| 成人久久久精品乱码一区二区三区| 国产精品日日摸夜夜添夜夜av| 欧美国产日本在线| 91一区在线观看| 国产精品白丝jk白祙喷水网站| xxx免费视频观看| 国产亚洲精品自拍| 国产精品第一| 日本一区免费视频| 亚洲最新在线| 国产精品亚洲片夜色在线| 欧美在线导航| 欧美亚州在线观看| 久久精品66| 国产精品十八以下禁看| 亚洲精品美女在线| 国产精品乱战久久久| 亚洲精品视频网上网址在线观看| caoporn成人| 亚洲一区二区三区精品在线观看| 亚洲福利在线视频| 伊人网在线免费| 美女免费黄视频网站| 一道本无吗dⅴd在线播放一区| 不卡的av电影| 91精品国产综合久久香蕉的用户体验| 国产乱淫a∨片免费视频| 日本美女一区二区三区| 欧美激情精品久久久久久黑人| 青青青青国产视频| 国产精品极品国产中出| 一级黄色大片免费| 在线播放欧美女士性生活| 久久综合婷婷| 日本成年免费网站| 一本色道久久综合精品竹菊| 国产精品乱子久久久久| 香蕉在线观看视频| 久久久一二三区| 国产一二三区精品视频| 少妇高潮流白浆| 亚洲小视频网站| 国产精品久久久久久久久鸭| 欧美综合视频| 国产一级片播放| 一级黄色在线视频| 美女www一区二区| 国产精品欧美激情| 成人3d动漫一区二区三区91| 亚洲精品国偷自产在线99热| 成人羞羞视频播放网站| 国产专区在线播放| 91精品国产免费久久久久久| 国产精品欧美激情在线观看| 国产理论电影在线| 福利视频理论电影| 曰本三级在线| 国模私拍视频在线| 国产精品视频久久| 中国黄色一级视频| 久久精品免费在线| 色播视频在线观看| 亚洲午夜一二三区视频| 国产精品久久久久久久午夜| 牛牛热在线视频| 欧美视频免费一区二区三区| 欧美日韩亚洲在线观看| 中文在线а√在线| 国模私拍视频在线观看| 福利在线网站| 91精品国产一区二区三区| 91麻豆精品国产91久久| 亚洲一区二区三区视频在线| 欧美在线性爱视频| 亚洲一区二区三区成人| 一二三四在线观看免费高清中文在线观看| 国风产精品一区二区| 国产精品亚洲一区| 久久久在线观看| 国内精品不卡在线| 色婷婷久久久亚洲一区二区三区| 亚洲国产精品毛片av不卡在线| 四虎成人在线视频| 成人免费三级在线| 国产福利在线免费| 久久嫩草捆绑紧缚| 最近中文字幕免费| 亚洲精品毛片一区二区三区| 亚洲激情视频| 久久人妻一区二区| 久久久久久福利| 88xx成人永久免费观看| 插插插亚洲综合网| 成人毛片在线免费观看| 久久久一区二区| 老司机很黄的视频免费| 农村妇女精品一二区| 亚洲国产av一区| 成人黄色免费在线观看| 日本亚洲欧美成人| 色偷偷av一区二区三区乱| 激情五月婷婷小说| 久久久久日韩精品久久久男男| 亚洲免费毛片| 九九热这里有精品| 日本aaa在线观看| 国外男同性恋在线看| 日韩精品在线免费播放| 久久手机免费观看| 91综合网人人| 久久av资源站| 日本粉色视频在线观看| 性爱视频在线播放| 久久中文娱乐网| 精品一区二区三区四区在线| 国内精品伊人久久久| 国产精品yjizz视频网一二区| 亚洲最新无码中文字幕久久| 能在线观看的av网站| 另类人妖一区二区av| 免费观看精品视频| 在线中文字幕第一区| 一区二区视频在线观看免费的| 欧美1区2区视频| 婷婷亚洲天堂| 国产制服丝袜在线| 国产91在线播放九色快色| 欧美精品国产精品日韩精品| 在线不卡国产精品| 亚洲人高潮女人毛茸茸| 福利91精品一区二区三区| 在线免费电影观看| 欧美在线精品免播放器视频| 免费毛片在线播放| 欧美日韩国产精品激情在线播放| 九一在线视频| 日韩欧美一级特黄在线播放| 中文字幕有码无码人妻av蜜桃| 天天添天天操| 免费在线毛片| 日本不卡一区二区三区高清视频| 国产精品久久久久久久久果冻传媒| 欧美日韩欧美| 丁香影院在线| 男人午夜影院| 欧美一区二区三区……| 亚洲h精品动漫在线观看| 成人欧美大片| av老司机在线观看| 欧美白人最猛性xxxxx| 成人久久视频在线观看| 色综合91久久精品中文字幕| 久久久精品欧美丰满| 欧美日韩在线观看不卡| 亚洲天堂2018av| 特级毛片www| 欧美白人最猛性xxxxx| 欧美一级爆毛片| 在线亚洲免费| 午夜精品一区二区三区在线播放| 亚洲综合欧美在线| 国产1区2区3区中文字幕| 国模私拍在线观看| 精品人伦一区二区三区| 日本一级一片免费视频| 亚洲免费成人在线视频| 麻豆精品精品国产自在97香蕉| 伊人网视频在线| av网址在线看| 91精品国产综合久久久久久| 日日摸日日添日日躁av| 国产色在线观看| 狠狠久久伊人中文字幕| 成人直播在线观看| 欧美日本一区| 99这里有精品| 91亚洲一线产区二线产区| 亚洲欧美欧美一区二区三区| 精品国产成人在线影院| 日韩免费在线播放| 毛片毛片毛片毛| 国产一区二区三区视频在线观看| 中文一区二区| a日韩av网址| 免费又黄又爽又色的视频| 在线播放中文字幕一区| av大全在线免费看| 国产精品美女一区二区在线观看| 日本美女高潮视频| 欧美12一14sex性hd| 亚洲免费av观看| 欧美日韩中文字幕在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲精品国产91| 日韩在线观看免| 91亚洲精品一区二区乱码| 濑亚美莉一二区在线视频| 国产成人综合av| 99精品国产在热久久下载| 丰满少妇一区二区三区| 亚洲理伦在线| 日本一区二区三区高清不卡| 天天艹天天操| 亚洲女则毛耸耸bbw| 国产在线视频资源| 日韩一区二区三区四区| 国产欧美日韩中文字幕| 黑鬼大战白妞高潮喷白浆| 亚洲视频 欧美视频| 色综合免费视频| 欧美激情视频在线免费观看 欧美视频免费一| 欧美视频裸体精品| 国内外成人免费激情在线视频网站| 久久久久久久久影院| 国产成人精品免费视频| 色网站免费观看| 亚洲欧美一区二区激情| 国产黄色一级大片| 国产乱子伦三级在线播放| 91精品久久久久久久91蜜桃| 这里是久久伊人| 久久不射2019中文字幕| 国产精品人人人人| 欧美一区二区三区在线播放| 欧美精品激情视频| 日本中文字幕在线看| 亚洲精品视频中文字幕| 国产精品xxx在线观看| 一级特黄毛片| 国产三级做爰在线观看| 欧美激情aaa| 欧美sm视频| 日韩高清影视在线观看| 你懂的视频网站| 国产在线精品一区二区三区不卡| 日韩国产在线看| 精品久久久久久久大神国产| 性网站在线观看| 无码人妻丰满熟妇区毛片蜜桃精品| 国产欧美一区二区视频| 国产中文字幕视频| 女同毛片一区二区三区| 欧美视频在线一区二区三区| 蜜桃传媒入口| 99热精品在线| 欧日韩不卡视频| 亚洲毛片在线观看| 在线视频不卡国产| 久久er99热精品一区二区三区| 日韩欧美a级成人黄色| 久久电影tv| 北岛玲一区二区三区| 亚洲日本中文字幕免费在线不卡| 波多野结衣啪啪| 国产精品91xxx| 高潮白浆女日韩av免费看| 久久人人爽爽爽人久久久| 天堂中文在线观看| 91精品久久久| 久久av.com| 你懂的在线视频观看| 99视频热这里只有精品免费| 毛片在线看网站| 亚洲色图16p| 久久久久黄色| 一区二区三区视频免费视频观看网站| 美国三级日本三级久久99|