查看單個文章
舊 2005-10-07, 09:39 AM   #1
飛鳥
協調管理員
 
飛鳥 的頭像
榮譽勳章
UID - 23073
在線等級: 級別:72 | 在線時長:5513小時 | 升級還需:108小時級別:72 | 在線時長:5513小時 | 升級還需:108小時
註冊日期: 2003-01-07
VIP期限: 無限期
住址: 史萊姆團隊
文章: 7199
精華: 11
現金: 837 金幣
資產: 260029 金幣
預設 2.網路管理語言 Perl 的簡介

網路管理語言 Perl 的簡介
作者:臥龍小三 ols3@www.tnc.edu.tw

3. Perl 簡介
本章將對 Perl 做個簡單介紹。
3.1 Perl 是什麼?
Perl 是 Practical Extraction and Report Language(實務操作抽取與報告語言) 的簡稱。1987 年,Larry Wall 先生融合 AWK、Sed、C、shell 等語言的特色,創造了 Perl。最初 Larry Wall 在進行一項 WAN 的設定工作,他想要產生一份報告結果,但 AWK 做不到,不滿於 AWK sed shell 功能的不足,Larry Wall 發明了 Perl,並且開放出來給大家使用。
Perl 的出現,讓想要偷懶的管理者可以用非常輕鬆的方式完成工作。同樣一件事若用 C 來寫可能要幾百行甚至幾千行程式碼,但用 Perl 來寫可能只要幾十行就結束了,剩下的時間,當然可以用來偷偷懶,做一些工作之外比較有趣味的事情囉。後來大家都戲稱 Perl 是懶惰的程式設計師最愛用的語言,事實上,這也是 Perl 的設計風格之一。
Perl 最初僅著眼於文件(text)的處理,但因為實在太好用了,許多人要求 Larry Wall 先生加這個加那個,經過不斷的改良精進,發展至今,Perl 變成一個跨平台、十項全能、應用層面無所不包的重要語言,說它是一種通用目的高階程式語言,一點兒也不為過。
那麼,Perl 可以做什麼呢?舉凡:系統管理、網站設計、網路程式設計(FTP/Webmail/Mail/DNS....)、資料庫處理、文件處理、圖型使用介面、電腦病毒防治、垃圾郵件防堵、破解/防護、網路安全、駭客入侵等等.... 哇! 超能力! 有人說,現在網路管理者,不會寫 Perl 也要會用一點 Perl。可見 Perl 的重要性了! (事實上許多駭客,都喜歡用 Perl 來寫攻擊程式)
這麼強大的語言,會不會難用呢? 不會! Perl 不但功能完整而且相當容易使用、效率也不錯喔!
Perl 是直譯式的語言,寫好之後,馬上就可以執行,不必像 C 語言必須經過編譯、組譯、連結等冗長的過程,因此開發周期較短,也較為輕鬆。雖然 Perl 是直譯式的,但它的效能不錯,主要是因為 Perl 並非逐列直譯,Perl 執行前會先編譯為一種中間bytecode,然後再來執行。因此它有直譯式語言開發快速的優點,卻有編譯語言效率的優點。我們可以說 Perl 既是直譯又是編譯式的。
除此之外,Perl 自第 5 版之後,支援物件導向設計,具模組功能。Perl 的模組簡明易用,而且 Perl 的社群非常活躍,產量豐富,幾年下來,累聚非常龐大的模組程式庫,我們稱之為 CPAN (Comprehensive Perl Archive Network)。
通常,如果我們想要解決某一方面的問題時,都會先到 CPAN 程式庫去溜溜,看看是否有前輩已經寫出相關的模組?若有,就不再重新發明輪子,直接套用,或繼承之,做局部修改,即可輕鬆解決您所遇到的問題。
CPAN 可以說是目前全世界最豐富的模組函式庫之一,使用 Perl 的人就是這麼幸福!
Perl 要錢嗎?不用,Perl 不但免費而且跨平台,現今要找到一個平台不支援 Perl 的,恐怕很少了。
Perl 的主要站台:http://www.perl.com 目前由有名的書商 O'Reilly 大力支持。
Perl 最新的穩定版是 5.8.0,支援 unicode 喔! 而 Perl 的第六個版本:Perl 6 目前則已進入開發階段。Perl 6 採用 parrot 引擎,parrot 的網址:http://parrotcode.org/,parrot 是一個虛擬機器,可以有效地執行直譯語言的 bytecode,將來除了 Perl 6 之外,其它語言也可以通過 parrot 來執行,比如 Python、Java。
註 1:教網中心有收集完整的 CPAN,位址:ftp://ftp2.tnc.edu.tw/pub/unix/perl/CPAN/
________________________________________
3.2 Hello Perl!
現在就讓我們來寫支 Perl 程式吧! 您會發現寫 Perl 程式,就是這麼容易!
引用:
#! /usr/bin/perl

# 檔名: hello.pl
# 用途: 這是一支簡單的 Perl 示範程式
#
# 第一列以 #! 開頭,表示告訴 Shell 要用 /usr/bin/perl 程式來執行這個 script 檔
#
# 其它以 # 開頭,則為註解,Perl 不予處理。
#

print "Hello Perl !!\n";
執行前,應設妥執行權(chmod +x 或 chmod 755)。執行結果如下:
引用:
[ols3@p4 sample]$ chmod +x hello.pl
[ols3@p4 sample]$ ./hello.pl
Hello Perl !!
註 1:Perl 程式,我們通常稱為 "Perl script",中文稱為 "Perl 腳本" (抱歉,這個譯名我也不很欣賞!)。本講義將以 Perl script 來統一稱呼。
註 2:若不設執行權,直接用 perl hello.pl 執行亦可。
註 3:Perl 的路徑未必在 /usr/bin/perl,您可以先用 which perl 指令找找看 Perl 的路徑為何?通常,如果是用 rpm/deb/pkg等套件安裝的,Perl 大都在 /usr/bin/perl,若是用 tarball 原始碼編譯的,則大都位在 /usr/local/bin/perl
註 4:每一個 perl 的敘述要用 ; 號做為結束符號。
註 5:執行前,可以先用 perl -c hello.pl 來檢查 perl 程式語法的正確性,如下所示:
引用:
[ols3@p4 sample]$ perl -c hello.pl
hello.pl syntax OK
________________________________________
3.3 Perl 的命令列選項
除了用前一節的方式執行 Perl script 之外,還可以利用 Perl 的命令列選項:
引用:
[ols3@p4 sample]$ perl -e 'print "Hello Perl !!\n";'
Hello Perl !!
這種方式,主要是利用 -e 選項,將欲執行的述敘放在 '' 單引號之間。
比如,以下方法可以去掉文件中的 ^M 符號:
引用:
perl -pi.bak -e 's/\r//g;' index.html
^M 符號的產生,大多是由於 Windows 平台的文件,在上傳檔案至 Linux/Unix平台的過程中,其換行符號沒有做適當的轉換所致。
以下這個命令列選項可以得知 Perl 的版本代碼:
引用:
perl -v

結果:

This is perl, v5.8.0 built for i386-linux-thread-multi

Copyright 1987-2002, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.
由上可知,所用的 Perl 版本是 5.8.0
至於 perl -c 這個選項,在前一節中已提到,可用來檢查 Perl script 語法的正確性:
引用:
[ols3@p4 sample]$ perl -c hello.pl
hello.pl syntax OK
Perl 還有非常多的命令列選項,欲知詳情,請下:
引用:
[ols3@p4 perl_intro]$ perl -h

Usage: perl [switches] [--] [programfile] [arguments]
-0[octal] specify record separator (\0, if no argument)
-a autosplit mode with -n or -p (splits $_ into @F)
-C enable native wide character system interfaces
-c check syntax only (runs BEGIN and CHECK blocks)
-d[:debugger] run program under debugger
-D[number/list]set debugging flags (argument is a bit mask or alphabets)
-e 'command' one line of program (several -e's allowed, omit programfile)
-F/pattern/ split() pattern for -a switch (//'s are optional)
-i[extension] edit <> files in place (makes backup if extension supplied)
-Idirectory specify @INC/#include directory (several -I's allowed)
-l[octal] enable line ending processing, specifies line terminator
-[mM][-]module execute `use/no module...' before executing program
-n assume 'while (<>) { ... }' loop around program
-p assume loop like -n but print line also, like sed
-P run program through C preprocessor before compilation
-s enable rudimentary parsing for switches after programfile
-S look for programfile using PATH environment variable
-T enable tainting checks
-t enable tainting warnings
-u dump core after parsing program
-U allow unsafe operations
-v print version, subversion (includes VERY IMPORTANT perl info)
-V[:variable] print configuration summary (or a single Config.pm variable)
-w enable many useful warnings (RECOMMENDED)
-W enable all warnings
-X disable all warnings
-x[directory] strip off text before #!perl line and perhaps cd to director
除了 -e -c -v -h 之外,上述選項中比較常用的還有 -w (打開警告訊息) -T (安全檢查),往後我們會再加以說明。
________________________________________
3.4 習題
引用:
1. 請寫一支 Perl script,印出您的大名及電子郵件帳號。

2. Perl 的敘述結束符號為何?

3. Perl 的註解符號為何?

4. 直接在命令列執行 Perl 敘述,應使用那一個選項?
__________________
http://flybird017.googlepages.com/quok.gif http://flybird020.googlepages.com/new321.gif
寶貝你我的地球
, 請 少開電器,減少溫室氣體排放外,多種植植物,減少列印, 多用背面,丟棄時做垃圾分類。

http://netgames123.googlepages.com/tobikeways.jpg

飛鳥 目前離線  
送花文章: 11706, 收花文章: 3363 篇, 收花: 16453 次
回覆時引用此帖
向 飛鳥 送花的會員:
ccbear (2010-05-17)
感謝您發表一篇好文章