[Perl] 程式設計教學:基本觀念| 開源技術教學網

文章推薦指數: 80 %
投票人數:10人

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<



請為這篇文章評分?