Perl 網頁程式設計課程目錄

Perl 表單資料取代 (Data Substitution of Perl Form)

還記得在第五章第三節 Perl 資料處理(二) 的表單嗎? 我們提到 :

非英文字母 及 非阿拉伯數字 的符號, 會以 % 符號加上該符號的 16 進位 ASCII 碼取代.

例如 : "+" 的 16 進位 ASCII 碼為 2B,

所以電話號碼 : +852 123456 會變成 phone=%2B852+123456

這一節會討論如何將 % 符號及符號的 16 進位 ASCII 碼被相對的字元取代 (Substitution).

取代 (Substitution) 在 Perl 程式設計是非常重要的, 尤其在資料庫 (database) 的管理設計 , 搜尋 (search engines) 設計, 及互動網頁設計都需要使用.

編寫及在瀏覽器執行以下 Perl 程式 :

#!/usr/bin/perl
print "Content-type: text/html\n\n";
#
#
$areacode = "%2B852";
#
print "Original area code : $areacode";
print "<P>";
#
### Substitution #######
#
$areacode =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#
#
### Print Result #######
#
print "Substituted area code : $areacode";

Perl 程式解釋如下:

第 12 行 :

取代 (Substitution) 的格式和前一章討論的轉換是很相似的 :

=~s/尋 找 目 標/取 代 要 求/

這長長的一句看似很複雜, 但只要分開來分析, 還不是太困難的.

首先看 /尋 找 目 標/ 的內容 :

/%([a-fA-F0-9][a-fA-F0-9])/

因為我們尋找目標是 % 符號及符號的 16 進位 ASCII 碼, 所以 :

% 符號是第一個目標,

因 16 進位 ASCII 碼是二個碼組成, 均以 a-f, A-F 和 0-9 來表示, 所以二個大括號內的是 16 進位 ASCII 碼的二個碼.

而 /取 代 要 求/ 的內容 :

/pack("C", hex($1))/

呼叫 pack function, 16 進位數字被相對的字元取代.

最後的 E 和 g :

E 表是 Expression,

g 表是 global

取代 (Substitution) 是 Perl 課程的一個大項目, 有機會稍後再詳細和各位一起研究吧.

瀏覽器應出現 :

Original area code : %2B852

Substituted area code : +852

實 例 View Example