范例三: $string="ww22cgi44"; $string=~s/(d+)/$1*2/e; (d+)代表要找尋$string中一個或是多個數(shù)值的字符串,再將找到的字符串設(shè)成 $1。加上參數(shù)e是代表要把$l*2當(dāng)作是一個運(yùn)算式,所以$string="www44cgi44"; $string="www22cgi44"; $string=~s/(d+)/$1*2/eg; 加上參數(shù)e,所以會把$1*2當(dāng)作是一個運(yùn)算式來看, 加上參數(shù)g就會把全部符合數(shù) 值 的字符串經(jīng)過運(yùn)算式運(yùn)算之后再把它取代,所以$string="www44cgi88";
范例四: 假設(shè)原本的字符串是$value="三八!",經(jīng)CGI數(shù)據(jù)編碼之后,這個字符串就會變成 $value="%A4T%A4K%21"。以下是一個解碼的示范程序: $value="%A4T%A4K%2l"; $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($l))/eg;
在傳送CGI數(shù)據(jù)的時候會把數(shù)據(jù)編碼,其中會將特殊字符或是中文字符編碼成以% 開頭的連續(xù)兩個十六進(jìn)制數(shù)的字符串,所以要用s這個函數(shù)來找尋這個以%開頭的 字符串。為了要把找到的字符串再做解碼的處理, 所以要在%這個符號之后加上 ()這個符號, 表示會把找到的字符串記憶起來并指定給$1這個變量,而且要在() 中加上代表是連續(xù)兩個十六進(jìn)制數(shù)值的文字處理模式(Regular Expression),也 就是[a-fA-F0-9][a-fA-F0-9]。再用hex這個函數(shù)($1是代表符合的字符串)把十 六進(jìn)制數(shù)值轉(zhuǎn)成十進(jìn)制的碼,之后再用pack這個函數(shù)(以C為參數(shù),是代表 unsigned char value的意思)把這個十進(jìn)制碼還原成原來的字符串。最后就會 把這個字符串解碼成$value="三八!"。值得一提的是也可以把這個解碼的程序 寫成:
$value=~s/%(..)/pack("C",hex($l))/eg;
|