[Perl] 程式設計教學:基本觀念| 開源技術教學網
文章推薦指數: 80 %
Perl 程式有兩種執行方式:. 撰寫Perl 命令稿後,執行該命令稿; 從命令列直接執行Perl 程式(即Perl one-liner). 第一種方式是大部分高階直譯語言都會 ...
由MichelleChen撰寫。
最後修改於西元2022年01月30日
開源教學Perl程式設計基本觀念
前言
本文假定讀者沒有寫過Perl程式或僅寫過少量Perl程式,從頭介紹一些撰寫Perl程式相關的基本概念和工具,讓讀者可以開始撰寫Perl程式。
Perl程式碼的副檔名
獨立的Perl命令稿以.pl為副檔名,Perl模組則以.pm為副檔名,而Perl延伸模組則以.xs為副檔名。
只有文件的Perl命令稿會用.pod為副檔名。
測試程式會以.t為副檔名。
執行Perl程式的方式
Perl程式有兩種執行方式:
撰寫Perl命令稿後,執行該命令稿
從命令列直接執行Perl程式(即Perlone-liner)
第一種方式是大部分高階直譯語言都會採用的方式,但第二種方式則相對少見,由於Perl兩者兼具,故筆者認為Perl做為一個命令列工具仍然有其一定的價值。
在本文中,我們會用這兩種方式各寫一個HelloWorld程式,以熟悉撰寫Perl程式的方式。
使用命令稿寫HelloWorld程式
HelloWorld程式是用來熟悉開發流程的經典範例,原見於經典的TheCProgrammingLanguage,此處撰寫Perl的版本。
Windows
使用編輯器撰寫hello.pl程式,加入以下程式碼:
print"HelloWorld\n";
不用在意程式的細節,我們只是要確認程式可執行。
使用以下指令來執行該命令稿:
>perlhello.pl
HelloWorld
若出現HelloWorld訊息,代表程式執行成功;若沒有執行成功,需自行根據錯誤訊息來除錯。
Unix
如果讀者使用類Unix系統,可以把Perl命令稿製作成命令列程式。
略為修改一下hello.pl的內容:
#!/usr/bin/envperl
print"HelloWorld\n";
我們額外加入的一行稱為shebang。
對Perl來說,該行只是註解,但類Unix系統會根據該行的內容啟動該行所指定的直譯器。
以本例來說,就是啟動Perl。
把該命令稿加上可執行的權限:
$chmod+xhello.pl
執行該命令稿:
$./hello.pl
HelloWorld
這裡有用到類Unix系統的特性,在Windows上則無法使用這個方法。
使用命令列即時撰寫HelloWorld程式
以下是直接使用命令列撰寫HelloWorld程式的版本:
$perl-e'print"HelloWorld\n";'
HelloWorld
在Windows則要稍微修改一下:
>perl-e"print\"HelloWorld\n\";"
HelloWorld
這是因為命令提示字元的字串只能用雙引號括起來的緣故,所以在Windows寫Perlone-liner會稍微麻煩一點。
Perlone-liner有許多使用方式,國外也出過一些相關的專書。
Perlone-liner主要是用在命令列上即時輸入一些短小的Perl程式,如果發現Perlone-liner可能會很長時,最好就轉成命令稿的形式來寫。
再訪HelloWorld
我們再看一次HelloWorld:
print"HelloWorld\n";
Perl和C或Java不同,沒有主函式(mainfunction)的概念,執行某個命令稿時,該命令稿本身等同於主函式。
print是Perl的內建函式(builtinfunctions),功能為在終端機輸出字串,由於print尾端不會自動加入換行符號,故需自行加入。
內建函式是一些預寫好的Perl程式,只要呼叫該函式,即可立即獲得所需的功能。
函式使用者不需在意這些函式內部的實作,只要將其視為一些立即可用的指令即可。
在使用Perl函式時,可以省略括號,這時候函式看起來會很像Perl內建語法。
Perl刻意不嚴格區分函式和語法,雖然寫起來比較簡便,但有時也會造成混淆,所以筆者不建議使用Perl開發中大型程式。
使用嚴格模式
一開始在撰寫Perl命令稿時,會建議在命令稿的開頭加上以下pragmas:
usestrict;
usewarnings;
Pragmas用來改變Perl的行為。
以usestrict;來說,會禁止一些過於鬆散的語法,而usewarnings;會開啟較多的警告訊息。
一開始練習撰寫Perl程式時,最好一律加上這兩個pragmas,以免養成不良的撰碼習慣。
等寫熟了之後,要寫一些用完即丟的命令稿或是Perlone-liner時,就不一定要加入這些pragmas。
Perl的程式碼風格
Perl官方文件有建議的程式碼風格,可以讀一下,一開始完全沒學過Perl時可能無法吸收,可過一陣子再回頭看。
O'Reilly曾出過一本PerlBestPractices(中譯已絕版),裡面有更多關於撰寫Perl程式的建議。
這本書提供許多不錯的建議,但在某些面向主觀過強,不需照單全收。
perlcritic是一個以Perl寫成的Perl程式碼檢查軟體,會對Perl程式碼進行撰寫上的建議。
在perlcritic程式中有實作一些來自PerlBestPractices的建議事項。
重排Perl程式碼
perltidy是一個Perl程式碼重排工具,可以省下手動整理程式碼的工夫。
該軟體有一些細項可以調整,有需要的讀者可自行閱讀其手冊。
Perl的文件
Perldoc網站收錄最新版本的Perl的官方文件。
對於Perl學習者來說,應該要習慣去查閱這個網站的內容。
除了使用該網站外,perldoc是一個隨Perl發佈的命令列工具,其用途是在本地端查詢Perl文件。
使用perldoc-f可以查詢Perl內建函式(built-infunction)的用法:
$perldoc-fsprintf
使用perldoc-v可以查詢Perl內建變數(built-invariable)的用法:
$perldoc-v'$"'
查詢Perl內建變數算是蠻實用的功能。
因為許多Perl內建變數是以非文字符號的方式來表示,使用一般的搜尋引擎不易搜尋。
perldoc也可查詢模組名稱:
$perldocMoo
至於其他的用法,請閱讀perldoc本身的文件。
使用Perl撰寫命令列程式
在類Unix系統上,在命令稿的最開頭使用#!(shebang)可以讓命令稿變成命令列工具。
例如以下的命令稿:
#!/usr/bin/perl
print"HelloWorld\n";
在本例中,該命令稿藉由shebang提示系統,使用位於/usr/bin/perl的執行檔執行本命令稿。
只要給予該命令稿可執行(executable)的權限即可執行此命令稿:
$chmod+xhello.pl
$./hello.pl
HelloWorld
由於類Unix系統的終端機環境不以副檔名判斷程式,連.pl都可以省略,這樣該命令稿看起來就和其他命令列工具無異。
由於Windows系統沒有shebang的特性,這個方法在Windows上無效。
而且在Windows上的Perl(或其他直譯語言)命令稿還是要保留副檔名較好,因為Windows需要用副檔名來判斷檔案的執行方式。
撰寫具有可攜性的Perl命令稿
前述的命令稿將Perl路徑寫死,可攜性較差。
一般來說,我們會用env(1)工具自動判定Perl路徑,以改善可攜性:
#!/usr/bin/envperl
foreachmy$a(@ARGV){
print"$a\n";
}
然而,使用env時,perl指令後只能帶單一參數,這是env所帶來的限制。
在Perl命令稿中,使用多參數的情形並不少見。
我們可以用shell命令稿做為wrapper來改善這個問題:
#!/bin/sh
#EmbedaPerlscriptinashellscript
cat<
延伸文章資訊
- 1Perl 程式設計教學 - G. T. Wang
這裡整理了一些關於Perl 程式語言的教學資源。 精簡扼要的Perl 課程講義. 這是我以前在講授Perl 課程時所編撰的講義,內容非常精簡扼要。 由於當初的課程是直接上機 ...
- 2Perl的基本語法
Perl的資料型態大致分為四種:Scalar、Scalar Array、Hash Array、References, 看起來雖少但用起來卻綽綽有餘。尤其在寫Perl程式時可以不必事先宣告變數,這...
- 3[PERL] 01-撰寫第一隻PERL程式及目錄 - 精讚
環境建立; [CentOS LINUX]; [WINDOWS]; 第一隻程式; 執行; PERL的線上說明文件. PERL這個系列我準備寫一些基本的文件,用簡單的內容寫出來,主要是寫 ...
- 4新手上路指南 - 朝陽科技大學
執行perl 程式 · 用vi 或nano 等文字檔編輯器建立一個文字檔, 裡面寫perl 程式, 再下perl 命令去執行這個檔案。 · 在UNIX 或cygwin 環境下, 可以在上述的pe...
- 5Perl語言簡介
如果你懂UNIX的話,它的目的就是用來取代UNIX原有的sed、awk與shell script的組合,用來匯集資訊、產生報表的一個工具語言(程式)。Perl的作者是Larry Wall ...