一.數據類型(Data type):
Perl 的數據類型大致分為四種:Scalar(變量)、Scalar Array(數組)、Hash Array(散列)、References(指針),看起來雖少但用起來卻綽綽有余。尤其在寫Perl程序時可以不必事先宣告變量,這一點對剛學程序語言的人甚為方便,不過為了以后程序除錯和維護方便,我建議你還是養成事先聲明變量的習慣比較好。
1 Scalar(純量變量):
純量變量是Perl里最基本的一種數據型態,它可以代表一個字符、字符串、整數、甚至浮點數,而Perl把它們都看成是一樣的東東! 你甚至可以混著用,不可思議吧。例如:
# 井字號開頭的后面都是批注。
# 純量變數以$開頭。
# my 是一種宣告變量的方式,它可以使變量區域化。
# 宣告變量時若不加 my 或 local 則Perl會把它當作全域變量使用。
# 習慣上,我們會將字符串用雙引號括起來,而數值就不用加引號。
my $x="abc";
my $x=123;
my $x=4.56;
1-1 常用的操作運算符
1)、算術運算符
+(加)、-(減)、*(乘)、/(除)、**(冪)、%(余)、-(負)
(1)求冪(**) 結果不能超出數的范圍。當指數為小數時,底數不能為負數,例如:25**1.5=125,(-25)**1.5=?(不成立)
(2)取余(%) 操作數為整數,否則要截取。第二個數不能為0(因為除數不能為0)
(3)負(-) -$a=$a*(-1)
此外,注意當一個字符串參加運算,需要轉化為整數時,如果不能轉化為整數則值為0。例如:'2'+1=3,'a'+1=1
2)、數字比較運算符
(大于)、==(等于)、=(大于等于)、!=(不等于)、(比較)
(1)==:比較運算,比較的結果為真或非零,假或零
(2):比較運算 例如:$a$b,當$a>$b時,值為1;當$a (3)自動把操作數轉化為整數,不能轉化為整數則為0
(4)浮點數不精確,不要把值相近的數比較,否則得到的結果是出乎意料的
3)、字符串比較運算符
lt(小于)、gt(大于)、eq(等于)、le(小于等于)、ge(大于等于)、ne(等于)、cmp(比較)
(1)字符串的比較原則:按照字母表的順序比較,數字 (2)字符串比較的次序:字符串從左到右比較。'azz' (3)當一個串是另一個的前綴時,長度長的為大。例如:dog
(5)自動把操作數轉化為字符串。123 lt 45 => '123' lt '45'
(6)cmp等同于,結果為-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,這三種情況都為假
例如:如下比較的結果
35 != 30+5???? #假
35 == 35.0???? #真
'35' eq '35.0'?? #假(當成字符串來比較)
'fred'? lt? 'barney'? #假
'fred'? lt? 'free'????? #假
'fred'? eq "fred"??? #真
'fred'? eq? "Fred"? #假
'?? '? gt? ' '? #真
4)、字符串連接(.)、字符/字符串重復(x)
(1)連接( “.“),例如:$a=‘a'.'b';? =>‘ab'
在print時可以直接寫print $a$b=>print $a.$b; 但是這兩者的原理是不一樣的
(2)重復( “x” ),注意:前后有空格(目的:為了和變量名分開),例如:‘a'? x? 5=‘aaaaa',若重復次數 例如:"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"
即:左邊是一個字符串,右邊是該字符串出現的次數
5)、邏輯運算符(&&(and)(與)、||(or)(或)、!(not)(非)、xor(異或)
(1)先算左邊的值,后算右邊的值
(2)&&和and的優先級不同,但除非特殊情況,很難有區別
6)、位操作運算符
&(按位與)、 |(按位或)、 ~(按位非)、 ^(按位異或)、 >(右移)
(1)操作數為二進制整數,如果是小數則截取為整數
(2) (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--時,按數字運算,字符先轉化為0再自減
(5)如果字符串含有非字母數字符號,或數字位于字母中時,自增也先化為0再自增
例如:$a=‘ab*c'; $a++;? ==> $a=1;
例如:$a=‘ab5c'; $a++;? ==> $a=1;
(6)預增$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)、逗號(相當于:將兩條語句寫在一行)
適用范圍: 只有當兩個語句關聯緊密時才使用
例如:$a+=1,$b=$a;? => $a+=1; $b=$a;
例如:$a="ab5c", print $a."/n";
10、條件運算符
條件? 真:假
(1)三個操作數:先對條件表達式運算,為真時執行:的左邊的運算,為假時執行:的右邊的運算
例如:$result = $var == 0 ? 14 : 7;
(2)用于簡單的條件
(3)條件表達式用在=的左邊
例如:$condvar == 43 ? $var1 : $var2 = 14;
例如:$condvar == 43 ? $var1 = 14 : $var2 = 14;
三、操作符優先級別( precedence--優先級)
當一個表達式中出現幾種不同的運算符,哪個先計算,哪個后計算
例如:$condvar == 43 ? $var1 : $var2 = 14;(先算條件,后算賦值)
例如:$x = $a == $b;(先算關系,后算賦值)
例如:$x == 0 || $y / $x > 5;(先算除,接著算大于、接著算等于,最后算關系或)
例如:$result = 11 * 2 + 6 ** 2 (1)一般的優先級如下:自增自減最高,單操作數高于多操作數,數字運算 > 比較運算(數字比較與字符串比較) > 位運算 > 賦值運算 > 邏輯運算
(2)數字運算:冪 > */>+-
(3)比較運算: (大于)高于(== 與!=)
2 Scalar Array:
Perl數組變量和列表的概念,列表是包含在括號里的一序列的值,可以為任何數值,也可為空,并且列表存貯于Perl數組變量中,與簡單變量不同,Perl數組變量以字符"@"打頭。
Perl數組變量和列表
一、列表
列表是包含在括號里的一序列的值,可以為任何數值,也可為空,如:
(1,5.3,"hello",2),空列表:()。
注:只含有一個數值的列表(如:(43.2))與該數值本身(即:43.2)是不同的,但它們可
以互相轉化或賦值。
列表例:
(17,$var,"astring")
(17,26
(17,$var1+$var2)
($value,"Theansweris$value")
二、Perl數組--列表的存貯
列表存貯于Perl數組變量中,與簡單變量不同,Perl數組變量以字符"@"打頭,如:
@array=(1,2,3);
注:
(1)Perl數組變量創建時初始值為空列表:()。
(2)因為PERL用@和$來區分Perl數組變量和簡單變量,所以同一個名字可以同時用于Perl
數組變量和簡單變量,如:
$var=1;
@var=(11,27.1,"astring");
但這樣很容易混淆,故不推薦。
1、Perl數組的存取
◆對Perl數組中的值通過下標存取,第一個元素下標為0。試圖訪問不存在的Perl數組元
素,則結果為NULL,但如果給超出Perl數組大小的元素賦值,則Perl數組自動增長,原
來沒有的元素值為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數組間拷貝
@result=@original;
◆用Perl數組給列表賦值
@list1=(2,3,4);
@list2=(1,@list1,5);#@list2=(1,2,3,4,5)
◆Perl數組對簡單變量的賦值
(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=
@array=
2、字符串中的方括號和變量替換
"$var[0]"為Perl數組@var的第一個元素。
"$var/[0]"將字符"["轉義,等價于"$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)
◆用于實數
(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);
其結果為:
Hello,Fred!
Hello,Fred!
4、Perl數組的輸出:
(1)@array=(1,2,3);
print(@array,"/n");
結果為:
123
(2)@array=(1,2,3);
print("@array/n");
結果為:
123
5、列表/Perl數組的長度
當Perl數組變量出現在預期簡單變量出現的地方,則PERL解釋器取其長度。
@array=(1,2,3);
$scalar=@array;#$scalar=3,即@array的長度
($scalar)=@array;#$scalar=1,即@array第一個元素的值
注:以Perl數組的長度為循環次數可如下編程:
$count=1;
while($count
print("element$count:$array[$count-1]/n");
$count++;
}
6、子Perl數組
@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數組形式來交換元素:
@array[1,2]=@array[2,1];
7、有關Perl數組的庫函數
(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--反轉Perl數組
@array2=reverse(@array);
@array2=reversesort(@array);
(3)chop--Perl數組去尾
chop的意義是去掉STDIN(鍵盤)輸入字符串時最后一個字符--換行符。而如果它作用到Perl數組上,則將Perl數組中每一個元素都做如此處理。
@list=("rabbit","12345","quartz");
chop(@list);#@list=("rabbi","1234","quart")now
(4)join/split--連接/拆分
join的第一個參數是連接所用的中間字符,其余則為待連接的字符Perl數組。
$string=join("","this","is","a","string");#結果為"thisisastring"
@list=("words","and");
$string=join("::",@list,"colons");#結果為"words::and::colons"
@array=split(/::/,$string);#@array=("words","and","colons")now
3 Hash Array(Associative Array):
perl.html" target="_blank">perl hash 常見用法
基本用法
# 初始化 %h為空數組%h = {};# 用數組初始化%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{b} = '2b';print "$h{b}/n"; # 打印2b# 刪除key用deletedelete $h{b}; # 從$h刪除'b'
清空hash
undef %h
得到hash的所有鍵值
# 得到所有keys,順序取決于hash函數,或者說是亂序
@all_keys = keys %h;
# 所有鍵值,是按hash的值從大往小排列的。值的比較是數字比較(比如說,10>9)
@all_keys = sort{$h{$b}$h{$a}} (keys %h);
# 所有鍵值,是按hash的值從小往大排列的。值的比較是數字比較
@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的長度
想要知道一個hash存放多少數據
$hash_size = keys %h
# 把%h的長度放到$hash_size中
print scalar kes %h, "/n"
# 打印%h的長度。這里用了scalar來返回數組長度。
遍歷一個hash
while (my ($k, $v) = each %h) {print "$k ---> $v/n";}
Reference引用
Reference類似于C/C++的指針
$h_ref = /%h;
# 獲得一個hash的reference%aHash = %{$h_ref};
# 把hash reference當成hash用$value = $h_ref->{akey}
# 這個和%h{akey}是一樣的
傳遞hash到函數
一般都是傳遞一個reference到函數
%h = ();$h{a}=1;foo(/%h)print $h{b}, "/n";
# 打印出2。
這個值來自于函數foo() sub foo {my ($h) = @_;print $h->{a}, "/n";
# 打印出1$h->{b} = 2;}
函數返回hash,或者hash引用(hash reference)
函數可以返回hash
sub foo {my %fh;$fh{a} = 1;return %h;} my %h = foo();print
二 控制結構(Control Statements)
1 選擇 if結構
Perl的條件控制敘述和C語言很像,讓使用者很快就能掌握它。不過Perl比C語言又另外多了些實用的語法,我用底線標出來,大家一看便知。
# Expression 就是條件敘述式,Perl和C一樣沒有定義布爾數據型態(Boolean datatype),
# 因此 0 是false、非0 是ture。另外要注意字符串運算子和數值運算子要分清楚哦。
# 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大部分都有,學過 C 的人可以毫不費力的學會Perl。
2循環結構
Perl的循環控制敘述也和C語言很像,當然,照例Perl也另外多了些實用的語法:
# 注意:純量變數前面要加個 $ 字號,這一點和C語言不一樣哦。
for($i=0; $i
# foreach 是承襲UNIX的shell script來的,
# 第一個自變量是純量變數,第二個自變量要用括號括起來,里面是一個純量數組,
# 顧名思義它就是把數組中的每個元素依序傳給第一個自變量,直到全部傳完。
# 它和 for($i=0; $i foreach $i (@array) {Code Segment}
# 其實在Perl中,for和foreach是可以混著用的,就看個的人習慣了。
# 下面這行就等于上面第一個敘述,不過簡潔多了,大家可以試著用用看。
for $i (0..10) {Code Segment}
# while控制循環和后置循環。
while($i do {Code Segment} while(Expression);
# Perl也有和C語言的break和continue一樣的指令,Perl叫它做 last 和 next (較口語化)。
# last是跳出現在所在的循環,next則是跳過下面的指令直接執行下一次的循環。
while(chomp($i=)) {
next if ($i == 5);
last unless ($i > 10);
}
Perl 還有提供label(標記)的語法,也就是goto 指令,不過有經驗的programer并不喜歡用它,我也不建議大家使用,所以就此按下不講。有興趣的人請自行查閱。還有一點值得注意的是Perl沒有提供像C語言一樣的 switch 敘述,不過Perl的pattern match的功能非常強,所以我建議你直接用 if else 敘述來做就好了。
3子程序(Subroutines)
(a) Syntax: sub NAME {Code}
(b) 呼叫子程序: &NAME(para1, para2,...)
(c) 參數傳遞:@_
Perl 和C一樣是采用Call by value的方式,不過因為Perl不用事先宣告變量,所以建立子程序的時候也不用宣告要傳遞什么參數。當主程序在傳遞參數給子程序時,Perl會把括號括起來的參數按順序放在一個特殊的全域變量 @_ 數組中,然后子程序就可以隨意使用數組 @_ 里的參數,例如 $_[0] 是第一個參數, $_[1] 是第二個,或是用 my($a1,$a2,$a3,...) = @_;來取出各個參數,當然 my @arg=@_; 或 my %arg=@_; 也是可以的。由于Perl的語法非常活潑,使得程序在維護時特別棘手,因此寫批注成為一項很重要的工作。我建議你最好在每個子程序前面加上對這段子程序的描述,特別是需要傳遞的參數要注明清楚。
(d) Variable Localization:my or local
通常我們在程序中定義的變量都是全域變量,所以在子程序中若要把變量區域化則要加上 my 或 local 關鍵詞,例如:my $x=3;,若子程序所用的變量名不小心和主程相同,Perl會以目前正在執行的子程序里的變量為優先。
4 I/O和檔案處理
(a) Syntax:
open(FILEHANDLE,"Expression");
close(FILEHANDLE);
這里的Expression是一個敘述加上文件名稱,若Expression只有文件名稱沒有加上敘述,則預設是只讀。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這個檔案,若開啟失敗則印出die后面的訊息,并結束程序。
open(FILE, $filename) || die "Can't open file $filename : $!/n";
# 下面是一個十分精簡的寫法,和 while($_=){print "$_";} 是等效的。
print while();
# 檔案開啟后要記得隨手關閉,這才是寫程序的好習慣。
close(FILE);
# $!和$_都是Perl的特殊變數,下面會介紹的。
(b) Input:
Perl沒有特別用來輸入的函數,因為Perl在執行程序時,會自動開啟標準輸入裝置,其filehandle定為STDIN,所以在Perl中要輸入數據的方法就是使用:
# Perl不會自動去掉結尾的CR/LF,跟C語言不同,所以要用chomp函數幫你去掉它。
# 大家常常會忘記這個動作,導致結果跟你想的不一樣,要特別注意一下。
$input=
# 下面是較簡潔的寫法。
chomp($input=
(c) Output:print "variables or 字符串";
Perl也有printf()函數,語法和C語言一模一樣,我就不多做介紹了。Perl另外有個print函數,比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的特殊用法,學自shell script的用法:
print
這招叫做 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的使用慣例,以雙引號("")括起來的字符串會先經過展開,但反斜線(/)后面的字符則不展開,當作一般字符看待。而以單引號('')括起來的字符串完全不會展開,以反單引號(``)括起來的字符串會把它當作命令列指令一樣執行,等于system()一樣。初學者常常會搞混,但習慣之后就會覺得不這樣分清楚反而不行哩,舉個例吧:
$x="ls -l";
print "$x";???????????? # Output ls -l
print "/$x";??????????? # Output $x
print '$x';???????????? # Output $x
print `$x`;???????????? # Output files in this directory
函數
1. Perl函數
通過 & 調用.
2. Perl參數
Perl天然支持可變數目個參數。
在函數內部,所有參數按順序放在數組 @_ 中,在函數內部,$_[0] 表示函數的第一個
參數,其余類推。
3. shift
shift 后跟一個數組,表示將數組的第一個值返回。數組也被改變,其第一個元素被彈
出。
演示代碼一(求最大值):
#!/usr/bin/perl -w
use strict;
# 調用函數max,取得一組數值的最大值,并輸出。
my $maxCnt = &max(11,22,33);
print "maxCnt=$maxCnt/n";
sub max {
# 采用遍歷算法。先將參數中的第一個值賦給$currentMaxCnt。
# @_ 是默認的包含本函數所有參數 [如(11,22,33)]的數組。
# shift @_ 有兩個結果: 1. 將數組 @_ 中的第一個值做為返回值(賦給了
$currentMaxCnt). 2. 將@_數組第一個值彈出[此后@_的值變為(22,33)].
my $currentMaxCnt = shift @_;
# 函數中使用shift時,@_可以省略。上面代碼也可以寫成這樣。
#? my $currentMaxCnt = shift;
# 遍歷整個@_數組。
foreach ( @_ ) {
# $_ 表示數組@_中當前被遍歷到的元素.
if ( $_ > $currentMaxCnt ) {
# 如果發現當前數組元素比$currentMaxCnt大,那就將$currentMaxCnt重新賦值為當前
元素。
$currentMaxCnt = $_;
}
}
# 函數返回值為標量$currentMaxCnt.
return $currentMaxCnt;
}
演示代碼二(求和):
#!/usr/bin/perl -w
use strict;
# 求一組數的和并打印。
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 {
# 將參數數組的前三個元素值相應地賦給($first, $second, $third)
(my $first, my $second, my $third) = @_;
# 返回其和值。缺點: 如果是求四個參數的和,依然只能給出前三個的和。
return $first + $second + $third;
}
# 辦法2
sub sumarg {
# $_[0] 表示參數數組@_的第一個元素。其余類推。
my $first = $_[0];
my $second = $_[1];
my $third = $_[2];
# 返回其和值。缺點: 同sumvar. 只是通過這里學習 $_[0] 這種用法。
return $first + $second + $third;
}
# 辦法3, 參數可以任意多。都能求其和。
sub sumgod{
my $s = shift @_;
foreach ( @_ ) {
$s = $s + $_;
}
# 同前面函數max。
return $s;
}
8總結
整理了一下自己覺得用的比較多的一些符號、用法、函數、庫之類的,這些都是很基本
的,但是“背熟”了,對提高效率會很有幫助。
數據操作
* $ - 聲明與引用用一個scalar的變量
* @ - 聲明與引用一個list,但是當訪問一個list的成員時,需使用$ListName[index]
* % - 聲明與引用一個hash表,但是當訪問一個hash的成員時,需要使用$HashName
{key}
特殊變量
* $0 - 當前運行腳本的文件名
* @ARGV - 當前運行腳本的命令行參數列表
* $_ - 默認變量,如循環中的當前變量
* @_ - 函數的輸入參數列表
* %ENV - 系統的環境變量
* @INC - Perl的Include路徑列表,我們可以往該列表中添加我們自己的目錄來方便引
用自定義的庫
* $! - 當前系統提示,錯誤信息
* $^O - 操作系統的名字
* STDIN,STDOUT,STDERR - 輸入輸出的默認句柄,可以作一定的自定義
* => - 聲明一個hash時可以用來明確的表示出key=>value的對應關系
* $^I- 指定備份的文件的后綴名,如此,被修改的文件將會自動以該后綴名保存一個副
本
特殊用法
* &Sub - 調用一個函數,雖然Perl有些規則讓你在某些時候可以省略這里的&符號,但
是處于一致性考慮,所以自定義的函數的調用,我一律采用此種方式。
* $# - 用來取得模個數組的最大index, 一般情況下,也可以用-1來表示最后一個元素
的index的
* qw() - 快速聲明一個字符串數組,可以省略那些煩人的引號
正則表達式
* $ - 獲取被括號捕獲的匹配
* $`, $&, $' - 獲取匹配的字符串,以及其前后兩個部分
* ^,$ - 字符串的始末位置,用作定位
常用函數
* pop, push, shift, unshift, reverse - list的操作函數
* keys,values, exists, each, delete - hash的操作函數
* chomp, split, join, index, substr, sort - 字符串操作函數
* sprintf,printf, print - 格式化輸出函數
* system, exec, `` - 系統命令調用函數
* glob, unlink, mkdir, rmdir, rename,chmod,chown, open, close, opendir,
closedir - 文件系統操作函數
* stat, lstat,localtime,gmtime,utime - 文檔屬性,時間相關函數
* hex, oct - 二進制,八進制,十六進制數轉化成十進制的函數
* grep, map - list高級操作函數
這些函數的詳細介紹,都可以通過命令:
#perldoc -f functionname
查到
常用庫
* File::Basename - 根據path獲取文件名或者文件路徑
* File::Spec - 根據文件名與路徑組合成全路經
* File::Find - 遞歸遍歷某個目錄下所有文件
* XML::Simple - 以一個復雜的結構來表示xml文件,使用起來相當方便
* Time::HiRes - 經常用來計算一個操作所耗費的時間
* Getopt::Long - 當腳本需要復雜的輸入參數與選項時用到
* Cwd - 拿到當前工作目錄
* IO::File - 文件操作
* Win32 - 當需要調用一些Windows API時我會用它
以上就是簡單敘述Perl的基本語法的全部內容,感謝大家的閱讀,更多內容請關注武林技術頻道網站。
?
新聞熱點
疑難解答
圖片精選