Transcript 網路與通訊-
網路與通訊 -- 實習課
PERL 程式設計
PERL 使用環境的建立
Windows 的使用環境建立
編輯軟體
記事本
Ultra editor
Power Builder
PERL 的編譯器
ActivePERL
http://www.activestate.com
PERL 簡介
Perl
Practical Extraction and Report Language
實務操作抽取與報告語言
Perl 可以做什麼呢?
系統管理、網站設計、資料庫處理、文件處
理、圖型使用介面、電腦病毒防治、垃圾郵件
防堵、駭客入侵、網路程式設計
(FTP/Webmail/Mail/DNS....)等等
PERL 程式的執行
命令提示字元底下
切換到 PERL 檔案存放的工作目錄
執行 “perl 檔案名稱”
假設是存成 hello.pl 則執行方式為
perl hello.pl
加上 –w 的參數可以顯示警告訊息
perl -w hello.pl
Demo (hello2.pl)
對 PERL 的基本認識
區分大小寫
變數名稱、函數名稱
註解使用方式
註解符號 #
一次只能註解一行
特別用法 __END__
表示整份程式執行到這裡就算結束了
DEMO (hello3.pl)
PERL 的變數型態
變數名稱
第一個字元一定是英文字或底線( _ )
變數不需要宣告立即可以使用
純量變數 (Scalar)
變數名稱前加上 $ 字元
陣列變數 (Array)
變數名稱前加上 @ 字元
雜湊變數 (Hash)
變數名稱前加上 % 字元
PERL 陣列的使用
假設變數名稱為 aryTest
變數名稱前加上 @ 符號
@aryTest
陣列起始索引值為 0
最終索引值存在 $#aryTest 之中
陣列長度可自由變動
pop、push:從陣列尾端刪除、新增資料
shift、unshift :從陣列前頭刪除、新增資料
Demo (array.pl)
Perl 雜湊的使用
雜湊是由 Key 和 Value 所組成的一組資料
A123456789 => 王小明
假設變數名稱為 hashTest
變數名稱前加上 % 符號
%hashTest
雜湊的處理
keys、values、each、exists、delete
Demo (hash.pl)
元素值的取用
陣列變數
格式:$陣列名稱[索引值]
範例:$aryTest[0], $aryTest[1], …
雜湊變數
格式:$雜湊名稱{鍵值}
範例:$hashTest{key value}
Demo (getElement.pl)
PERL 的資料型態
數值型態
整數
1, 0, -1, 37999
浮點數
3.1415, 4.00, 1.96E24, -3.2E-18
八進位數 (以 0 開頭)
012 (為十進位的 10)
十六進位數 (以 0x 開頭)
0x12 (為十進位的 18)
二進位數 (以 0b 開頭)
0b110 (為十進位的 6)
PERL 的資料型態
非數值型態
字串
字串是以雙引號或單引號括起來
雙引號和單引號的差別
null
在單引號中,跳脫符號沒有功用
在單引號中,無法做變數代換
Demo (string.pl)
PERL 資料的操作
數值
加(+)、減(-)、乘(*)、除(/)
餘數除法(%)、乘冪(**)
非數值
字串的合併:點( . )這個符號
字串的重覆:x 這個符號
Demo (dataOper.pl)
PERL 的函數
函數格式
函數名稱規則和變數名稱規則一樣
sub function_name {
statement
…
}
函數呼叫
&function_name([arg1[, arg2[, …]]]);
PERL 的函數 (續)
參數的取得
利用 shift 指令
Demo (function.pl)
PERL 的函數 – 遞迴呼叫
(Recursive Call)
函數呼叫函數,而且最後一個函數又呼叫到一開
始呼叫的函數,稱之為遞迴呼叫。
假設有函數 f1, f2, f3;f1 呼叫 f2,f2 呼叫 f3,f3 又呼
叫到 f1。
外部遞迴
呼叫外部函數,最後又呼叫到自己,如上一個例子
內部遞迴
函數呼叫函數本身
如函數 f1,在 f1 函數中有一行是呼叫到 f1
遞迴呼叫一定要有終止遞迴的條件
PERL 練習作業
印出下列圖形
*
***
*****
*******
*****
***
*
*
**
***
****
*****
*
**
***
****
*****
注意事項
作業禁止抄襲 (抄襲與被抄襲者成績都要被打折)
程式中所用到的技巧越多,加分越多
如:使用到遞迴、印出星星的深度可由呼叫者自由設定等
PERL 的檔案處理
使用到的函數指令
open、sysopen、close、<>
檔案開啟
使用open指令
常用格式:oepn (File_Handle, Expression);
範例:
open(INPUT, “< list.txt”); # 唯讀模式
open(INPUT, “+< list.txt”); #讀寫模式
open(OUTPUT, “> list.txt”); # 寫入模式
…
Demo (fileOper_read.pl)
PERL 的檔案處理 (續)
檔案開啟
使用 sysopen 指令
格式:
sysopen (File_Handle, Filename, Open_mode,
Permission_mode);
Open_mode:檔案開啟的模式
O_RDONLY => 唯讀
O_WRONLY => 唯寫
O_RDWR => 可讀可寫
O_APPEND => 增加資料到檔案尾端
…
參考網址
http://www.fanqiang.com/a4/b3/20011227/07100020_b.html
PERL 的檔案處理 (續)
檔案開啟
使用 sysopen 指令
Permission_mode
這個參數適用在 UNIX 的主機上
範例:0600
使用 sysopen 指令前一定要宣告所使用的程式庫
use Fcntl;
Demo (fileOper_read_sysopen.pl)
PERL 的檔案處理 (續)
檔案關閉
使用 close 指令
格式:close(File_Handle);
檔案讀取
使用 <> 指令
格式:@lines = <File_Handle>
因為會直接回傳所有的檔案資料,要用陣列承接
PERL 的檔案處理 (續)
檔案寫入
使用 print 指令
格式:print File_Handle Data
Demo (fileOper_write.pl)
PERL 的正規表示法 - Regular
Expression
是由字元組成的樣式(Pattern),用來比對資
料,看看究竟符合或不符合這個樣式,然
後可做進一步的處理。
樣式是由字元集所組成的
常用的字元集定義
. 代表任意字元,但不包括換行字元 \n
* 代表比對成功的次數是 0 或 0 次以上
+ 代表比對成功的次數是 1 或 1 次以上
? 代表比對成功的次數是 0 或 1 次
PERL 的正規表示法 - Regular
Expression (續)
樣式是由字元集所組成的
常用的字元集定義
^ 代表字串開頭
$ 代表字串結尾
\ 將其後的字元跳脫,使其回歸原字元的涵義
如:\\ , \. , \@ , \? , \*
| 樣式中的 或
( ) 群集
[ ] 字元類別
參考網址
http://www.perldoc.com/perl5.8.0/pod/perlre.html
PERL 的正規表示法 - Regular
Expression (續)
樣式比對 (Pattern Match)
格式:m/Pattern/[修飾子]
(簡寫成 /Pattern/[修飾子])
修飾子
i
m
o
s
x
g
不計大小寫
視字串為多列
只編譯一次,以加快迴圈處理速度
當含有換列符號時,仍視為一列
允許含有註解,並忽略空白
全域比對
PERL 的正規表示法 - Regular
Expression (續)
樣式比對 (Pattern Match)
使用的指令
=~ 表示比對符合
!~ 表示比對不符合
$& 代表最後一次成功比對的字串
$` 代表比對到的字串之前半段所有字串
$’代表比對到的字串之後半段所有字串
Demo (regular_match.pl)
PERL 的正規表示法 - Regular
Expression (續)
樣式取代 (Pattern Substitution)
格式:s/Pattern/New String/[修飾子]
修飾子:
樣式比對中的修飾子都可在此使用
e 代表將欲置換的字串視為一運算式
Demo (regular_substitution.pl)
PERL 的正規表示法 - Regular
Expression (續)
樣式轉換 (Pattern Transfer)
格式:tr/Pattern/New String/[修飾子]
修飾子:
d 刪除字元
c 將不在指定字元集中的字元(包括換行字元)
換成欲轉換的字元集
s 將重覆字元刪除
Demo (regular_transfer.pl)