建立全球資訊網酷頁使用Perl
文章推薦指數: 80 %
字串盡頭,只位於行尾:/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(
函數:
名稱
功能
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;
檔案開啟、讀取、寫入:
運作
說明
預設的行變數$_
存放著此行。
$a=
此處的print指述只是用於表示某種處理。
while($a=
while(<>){print;}
在令行上給定一串列檔案名稱(或一個泛用字元然後產生一串列檔案名稱),一個檔案接著一個檔案地處理,每次處理一行。
$thisFile=$ARGV;
當以while(<>)結構讀取檔案時,指派目前檔案的名稱給純量變數
$thisFile。
while()
{print;}
處理目前的目錄中所有副檔名為.txt的檔案,每次處理一行。
這可用來代替在命令行上輸入檔案描述
*.txt。
open(MYFILE,“filename.txt”);
開啟一個名稱為filename.txt的檔案並指派一個稱為MYFILE的filehandle。
以此方式開啟的檔案之預設模式為讀取模式。
open(MYFILE,“
右半的角形括號
>將檔案設為寫出模式。
open(MYFILE,“>>filename.txt”);
開啟一個名稱為filename.txt的檔案並指派一個稱為MYFILE的filehandle。
雙角形括號
>>將檔案設為附加(append)模式。
$a=
純量變數
$a只能存放一行,因此限制為只讀一行。
@lines=
@lines=<>;
讀入列於命令行上的所有檔案的所有行到陣列
@lines中。
open(MYFILE,“filename.txt”)||die(“Problemopening
$filename.txt”)
檔案錯誤;報導檔案開啟錯誤,中止程式。
循序檔格式之概要:
型態
記錄分界元
欄位分界元
欄位數
空白欄位
分界的
換行字元
字元
固定
必須加以分界
CSV
換行字元
逗號,字串加引號
固定
必須加以分界
以空白分界
空白行
換行字元
固定
必須有字元
含標記的
上述任何分界行
上述任何分界行
變動
忽略
延伸文章資訊
- 1PERL 正規表達式會用到的符號 - 精讚
自動目錄. PERL 正規表達式(Regular Expression, Regex)會用到的符號; 各種字元; 重覆; 控制字元; 字元集(群組)或特殊字元 ...
- 2perl中特殊符號 - w3c學習教程
perl中特殊符號,陣列x x名字前面是美元符號後面是花括號則其為hash 元素要引用整個hash 使用百分號作為字首。前面幾頁中使用的hash.
- 3Perl的基本語法
純量變數是Perl裡最基本的一種資料型態,它可以代表一個字元、字串、整數、甚至浮點數,而Perl把它們 ... 這是Perl的一個特殊用法,代表這個陣列最後一個元素的註標。
- 4Perl 常用的regexp 規則列表 - 朝陽科技大學
不過regexp 較之中英文, 簡單很多, 如果想把重要的符號及語法用有系統/有組織 ... 第一, perl 有一個很容易記的規則: 凡是標點符號, 加上倒斜線, 一定沒有特殊意義。
- 5Perl 學習手札- 8. 更多關於正規表示式 - Easun.org
\W:同樣的,如果你不希望看到任何在英文字母範圍裡的字符,不妨就用這個方式避開。 \d:這個特殊的字元就是字符集合[0-9]的縮寫。 \D:其實你也可以寫成[^0 ...