建立全球資訊網酷頁使用Perl

文章推薦指數: 80 %
投票人數:10人

字串盡頭,只位於行尾:/Chicago$/. \. 解除特殊功能的字元+ ? . * ( ) [ ] { } | \ / 之意義. \r. Carriage return, ASCII 13(十進位制). \n. Line feed. UNIX Perl中 ... 建立全球資訊網酷頁使用Perl perl 參數: 命令行選項 作用 檔名 執行載明的script檔 -v 檢查板本號碼 -e 視其後的運算式為單一行程式來執行: perl–e“print‘Hello’;” -n 視其後的運算式為重複迴圈的程式來執行: -n選項通知Perl讀取整個檔案,每次讀入一行,而非只讀入第一行便離開。

perl–n–e“printif/Chicage/;” -i 忽略大小寫 以/exp/進行樣型比對(patternmatching): 一般性運算式(regularexpression)所使用的基本樣型是將想要找尋的字串隔離起來的一對斜線。

樣型是對大小寫靈敏的(casesensitive) 一般性運算式: 元件 意義 /abc/ 文字:”abc” . 換行字元之外的任何字元 ? 0個或1個前導字元:/d?/為0個或1個”d” * 0個或更多個前導字元:/d*/為0個或更多個”d” + 至少1個或更多個前導字元:/d+/為1個或更多個”d” ^ 字串起點,只位於行首:/^Chi/ $ 字串盡頭,只位於行尾:/Chicago$/ \ 解除特殊功能的字元+?.*()[]{}|\/ 之意義 \r Carriagereturn,ASCII13(十進位制) \n Linefeed UNIXPerl中為ASCII10(十進位制) MacintoshPerl中為ASCII13(十進位制) DOSPerl中為ASCII13+ASCII10(兩個字元) \t Tab,ASCII9(十進位制) \f Formfeed,ASCII12(十進位制) \d 數字,同[0-9] \D 非數字,同[^0-9] \w 同[a-zA-Z0-9_],比對包含底線在內的所有英數字 \W 同[^a-zA-Z0-9_],為\w的否定,比對非英數字 \s 空白-實際上為白色的空間,包括space,tab,carriagereturn,linefeed和formfeed(ASCII32,9,13,10和12),同 [\r\t\n\f] \S 非空白,\s的否定,同 [^\r\t\n\f] \b 字的邊界;比對位於字串起點和終點處的標點符號、白色空間或非英數字字元。

\B 非字的邊界,\b的否定 (…) 將元件集合成群 $1..$9 往回參照成群的元件 {x,y} x,y為所要比對的前導元件的最少和最多數目 {x} 比對前導元件x次 {x,} 比對前導元件x或更多次 […] 比對此類別中的任何元件 (…|…|…) 比對替換選擇 //i 忽略大小寫用法 特殊的樣型運算子和變數: 樣型運算子/變數 意義 =~ 將樣型比對的目標從預設的$_(現行)重新指派為具有名稱的變數 s/// 代換 s///i 在尋找符合的字串行代換時,忽略大小寫用法 s///g 整體性(global),代換在目標中所發現的每個相符處 s///e 將交換的部份視為Perl運算式,然後執行取代的工作 s/()/$1/ 子運算式代換或將元件依編號的參照來分群 s/%(..)/pack(“C”,hex($1))/ge; tr/// 字譯運算子,將第一個運算式中的字母代換為第二個運算式中的字母 $& 前一次比對成功的樣型 $` 前一次比對成功樣型左方的字串 $’ 前一次比對成功樣型右方的字串 $1..$9 最近一次比對成功的樣型中所對應的子運算式內容 陣列功能: 陣列 功能 @var=(listofvalues) 建立正規陣列 $nmbr=@var 設定$nmbr為陣列@var中的元素個數 @nmlast=$#var 設定$nmlast為陣列@var中的最高註標。

%var=(listofkey/valuepairs) 建立組合陣列 $var($i) 以數值索引利用小括號來引用正規陣列之元素 $var{$i} 以字串索引利用大括號來引用組合陣列之元素 print@var 列印陣列中的每個元素,並不添加空白或換行 print“@var” 列印陣列中的每個元素,在元素之間加上一個空白 @var=split(/expr/,$str) 使用expr樣型作為分隔元,將 $str切分為子字串串列 foreach(@var) 循環處理@var陣列,每次處理一個元素 foreach$tmp(@var) 循環處理@var陣列,每次處理一個元素,並將元素載入 $tmp @avar=keys(%var) 將組合陣列%var的索引鍵傳入正規陣列@avar中 foreach$tmp(keys(%var)) 循環處理%var組合陣列,每次處理一個索引鍵,將此索引鍵載入 $tmp while(($key,$val)=each(%var)) 循環處理%var組合陣列,每次處理一個索引鍵/值配對,將索引鍵放入 $key及將值放入$val 各種運算子: 數學運算子: 符號 所執行的運算 + 加法:3+4=7 - 減法:11-5=6 * 乘法:3*5=15 ** 次方:2**3=8 / 除法:21/7=3 % 餘數:25%7=4 += 加法:$var+=4表示 $var=$var+4 -= 減法:$var-=4表示 $var=$var–4 *= 乘法:$var*=4表示 $var=$var*4 **= 次方:$var**=4表示 $var=$var**4 /= 除法:$var/=4表示 $var=$var/4 %= 餘數:$var%=4表示 $var=$var%4 字串運算子: 符號 所執行的運算 . 連接字串:$dot=“beg”.“end”;#$dotnow“begend” .= 連接字串至原變數: $new=“beg”; $new.=“end”;#$newnow“begend” x 製作多份拷貝:$old=“beg”x3;#“begbegbeg” x= 製作多份拷貝附加至原變數: $old=“beg”; $oldx=3;#“begbegbegbeg” 數值比較運算子: 符號 所執行的運算 > 大於 < 小於 == 等於 >= 大於或等於 <= 小於或等於 != 不等於 <=> 比較,並以–1,0或1傳回結果顯示左邊的運算元與右邊的運算元之比較情形:-1=左邊小於右邊,0=左邊等於右邊,1=左邊大於右邊。

字串比較運算子: 符號 所執行的運算 gt 大於 lt 小於 eq 等於 ge 大於或等於 le 小於或等於 ne 不等於 cmp 比較,並以–1,0或1傳回結果顯示左邊的運算元與右邊的運算元之比較情形:-1=左邊小於右邊,0=左邊等於右邊,1=左邊大於右邊。

跳越指令:if-elsif-else 迴圈:含last,next和 <>的while() 純量變數的名稱以$符號起始,可存放一個物件。

指派值給變數是藉由指派運算子 =來進行的:$myVar=”apple”。

值可由字元或數字組成。

陣列變數的名稱以 @符號起始,可存放一串列物件。

指派值的方式是描述此串列:@fruit=(“apples”,“oranges”,“pears”)。

值可為字串、數字或變數。

陣列以註標來加以存取,以0作為第1個元素。

當指單一元素時,@識別符號須變換為 $:@fruit=(“apples”,“oranges”,“pears”),而 $fruit[2]為第3個元素 “pears”。

Perl溝通的方式是藉由讀入及寫出到以稱為filehandles的特殊變數加以識別的檔案中。

STDIN、STDOUT、STDERR是每次Perl執行時自動產生的filehandles。

Filehandles 用於print命令及”讀檔”結構<>。

條件運算子if具有線上形式----“dosomethingifsomethingistrue”。

譬如, printif/Chicago/。

迴圈運算子while在測試條件為真時,重複執行以大括號標識起來的區塊中的指述。

讀檔結構總是為真,直到檔案盡頭為止。

如果要重複讀取標準輸入並印出每一行,請採用如下的迴圈: while(){ printif/Chicago/; } @ARGV是一個存放命令行參數的特殊陣列。

  函數:   名稱 功能 chop($var) chop(@array) 刪除特定字串或陣列中每個字串的最後一個字元(或如果為CRLF則是兩個字元) index($target,$substring[,office]) 傳回在$target中找到$substring時所略過的字元數,或未找到時傳回 –1 rindex($target,$substring[,office]) 與index相同,但其運作方向是從字串盡頭往前,並傳回在 $target中最後一個 $substring的位置 length($var) 字串的長度 substr($source,start[,length]) 傳回$source的一個子字串。

此子字串是字元數start開始,持續length的一個字串。

如果不指定length, 則是傳回由start到字串盡頭所組成的子字串。

split(/expr/,$var) 以/expr/中的運算式作為子字串分界字元來傳回 $var中的子字串串列 join(“str”,@array) 傳回由@array的所有元素組合起來且以str作為各元素分界的一個字串。

push(@array,list) 將list(一個串列或單一變數)加入 @array的盡頭 pop(@array) 傳回@array中的最後一個元素,然後將元素從 @array中刪除 unshift(@array,list) 將list(一個串列或單一變數)加入 @array的前端 shift(@array) 傳回@array中的第一個元素,然後將元素從 @array中刪除 sort(@array) 傳回經過排序的@array 複本,通常指派給新的陣列。

values(%array) 傳回組合陣列中的值所成的串列 keys(%array) 傳回組合陣列中的索引鍵所成的串列 each(%array) 傳回組合陣列中的索引鍵/值配對。

通常放在迴圈中,每次它被呼叫時便傳回一組不同的配對,直到陣列中的元素都被處理過為止。

delete$array{$key} 傳回組合陣列中$key的對應值,並將 $key和其值從陣列中刪除。

die(“errormessage”) 程式將立即中止執行,並送出一個訊息到STDERR。

如果訊息不包含換行字元,die將把程式和行號加入訊息中。

pack(“C”,65) 將十進位制數字轉換為字元 $CRLF=pack(“CC”,hex(“0D”),hex(“0A”)) hex(“0D”) 十六進位制至十進位制 副程式和程式庫: 宣告副程式的語法為: submysub{ …#statements } 呼叫副程式的語法為: &mysub; $var=&mysub; $var=&mysub($var1,$var2); return()傳回值給發出呼叫的指述。

隱喻的return:如果副程式中不使用return,Perl將以副程式所計值的最後一個指述的值來作為return的值。

(使用隱喻的return比使用明確的return效能好) local()宣告變數為副程式的區域(或私人)變數。

@_代表包含由發出呼叫的指述傳給副程式的一串列參數值之特殊陣列。

藉由@_傳值給區域變數。

$_[0]是 @_陣列的第一個元素。

@_陣列存放著傳給副程式作為參數的一串列值。

$_ 則是參照現行(或列近從檔案讀入的那一行)的變數。

@_如何傳送多個值給副程式: 一次一個元素: $a=$_[0]; $b=$_[1]; $c=$_[2]; 一整批元素:(如果列示中接收變數少於 @_中的參數數目,多的參數將被丟棄) ($a,$b,$c)=@_; 迴圈處理: foreach$item(@_){ $a+=$item; } 整個陣列的指派: @basket=@_; 字串組合: $fruitCompote=join(“+”,@_); 區域性宣告與指派組合: local($petTrick)=@_; 複合變數與陣列的指派: local($head,@tokens)=@_; 程式庫的格式為不含Perl直譯器位置註解的標準PerlScript。

程式庫通常包含一群副程式。

以require函數來依附程式庫:require(“mylib.pl”)。

程式庫檔案的最後一個指述必須為計值為非零的值,例如1; 檔案開啟、讀取、寫入: 運作 說明 ; 從STDIN(鍵盤或重導的檔案) 讀入一行。

預設的行變數$_ 存放著此行。

$a=; 從STDIN(鍵盤或重導的檔案) 讀入一行到純量變數$a中 while() {print;} 從STDIN一次讀入一行直到到達檔案的盡頭(或如果輸入來自鍵盤則為Ctrl+Z)。

此處的print指述只是用於表示某種處理。

while($a=) {print$a;} 從STDIN一次讀入一行直到到達檔案的盡頭(或如果輸入來自鍵盤則為Ctrl+Z),指派每一行給一個純量變數 $a。

while(<>){print;} 在令行上給定一串列檔案名稱(或一個泛用字元然後產生一串列檔案名稱),一個檔案接著一個檔案地處理,每次處理一行。

$thisFile=$ARGV; 當以while(<>)結構讀取檔案時,指派目前檔案的名稱給純量變數 $thisFile。

while() {print;} 處理目前的目錄中所有副檔名為.txt的檔案,每次處理一行。

這可用來代替在命令行上輸入檔案描述 *.txt。

open(MYFILE,“filename.txt”); 開啟一個名稱為filename.txt的檔案並指派一個稱為MYFILE的filehandle。

以此方式開啟的檔案之預設模式為讀取模式。

open(MYFILE,“filename.txt”); 開啟一個名稱為filename.txt的檔案並指派一個稱為MYFILE的filehandle。

右半的角形括號 >將檔案設為寫出模式。

open(MYFILE,“>>filename.txt”); 開啟一個名稱為filename.txt的檔案並指派一個稱為MYFILE的filehandle。

雙角形括號 >>將檔案設為附加(append)模式。

$a=; 從被開啟並指派給filehandleMYFILE的檔中讀入一行。

純量變數 $a只能存放一行,因此限制為只讀一行。

@lines=; 將整個檔案讀入陣列 @lines,每個陣列元素存放一行,串列變數可存放許多物件,因而可讀取多行。

@lines=<>; 讀入列於命令行上的所有檔案的所有行到陣列 @lines中。

open(MYFILE,“filename.txt”)||die(“Problemopening $filename.txt”) 檔案錯誤;報導檔案開啟錯誤,中止程式。

循序檔格式之概要: 型態 記錄分界元 欄位分界元 欄位數 空白欄位 分界的 換行字元 字元 固定 必須加以分界 CSV 換行字元 逗號,字串加引號 固定 必須加以分界 以空白分界 空白行 換行字元 固定 必須有字元 含標記的 上述任何分界行 上述任何分界行 變動 忽略  



請為這篇文章評分?