Perl 中每個包有一個單獨的符號表,定義語法為:
package mypack;
此語句定義一個名為mypack的包,在此後定義的所有變數和子程序的名字都存貯在該包關聯的符號表中,直到遇到另一個package語句為止。
每個符號表有自己的一組變數、子程序名,各組名字是不相關的,因此可以在不同的包中使用相同的變數名,而代表的是不同的變數。
從一個包中存取另外一個包的變量,可透過" 包名+ 雙冒號( :: ) + 變量名" 的方式指定。
存貯變數和子程式的名字的預設符號表是與名為main的套件相關聯的。如果在程式裡定義了其它的包,當你想切換回去使用預設的符號表,可以重新指定main包:package main;
這樣,接下來的程式就好像從來沒定義過包一樣,變數和子程式的名字象通常會那樣存貯。
以下實例中檔案有main 和Foo 套件。 特殊變數__PACKAGE__用於輸出包名:
執行以上程序,輸出結果為:
套件名稱: main 1套件名稱: Foo 10 套件名稱: main 100套件名稱: main 10
Perl語言提供了兩個關鍵字:BEGIN,END。它們可以分別包含一組腳本,用於程式體運行前或執行後的執行。
文法格式如下:
BEGIN { ... }END { ... }BEGIN { ... }END { ... }
每個BEGIN模組在Perl 腳本載入和編譯後但在其他語句執行前執行。
每個END語句區塊在解釋器退出前執行。
BEGIN和END語句塊在建立Perl 模組時特別有用。
如果你還不太理解,我們可以看個實例:
執行以上程序,輸出結果為:
這是BEGIN 語句塊Begin 和Block 實例這是END 語句塊
Perl5 中用Perl套件來建立模組。
Perl 模組是一個可重複使用的包,模組的名字與包名相同,定義的檔案後綴為.pm 。
以下我們定義了一個模組Foo.pm,程式碼如下所示:
Perl 中關於模組需要注意以下幾點:
函數require和use將載入一個模組。
@INC是Perl 內建的一個特殊數組,它包含指向函式庫例程所在位置的目錄路徑。
require和use函數呼叫eval函數來執行程式碼。
末尾1;執行回傳TRUE,這是必須的,否則回傳錯誤。
模組可以透過require函數來調用,如下所示:
也可以透過use 函數來引用:
我們注意到require 引用需要使用包名指定函數,而use 不需要,二者的主要區別在於:
1.require用於載入module或perl程式(.pm後綴可以省略,但.pl必須有)
2、Perl use語句是編譯時引入的,require是運行時引入的
3.Perl use引入模組的同時,也引入了模組的子模組。而require則不能引入,要重新聲明
4、USE是在目前預設的@INC裡面去尋找,一旦模組不在@INC中的話,用USE是不可以引入的,但是require可以指定路徑
5.USE引用模組時,如果模組名稱包含::雙冒號,則該雙冒號將作為路徑分隔符,相當於Unix下的/或Windows下的。 如:
use MyDirectory::MyModule
透過新增以下語句use 模組就可以從模組中匯出列表符號:
require Exporter;@ISA = qw(Exporter);
@EXPORT陣列包含預設導出的變數和函數的名字:
package Module;require Exporter;@ISA = qw(Exporter);@EXPORT = qw(bar blat); # 預設匯出的符號sub bar { print "Hello $_[0]n" }sub blat { print "World $ _[0]n" }sub splat { print "Not $_[0]n" } # Not exported!1;
透過Perl 分發自帶的工具h2xs 可以很簡單的創建一個Perl 模組。
你可以在命令列模式鍵入h2xs 來看看它的參數清單。
h2xs 文法格式:
$ h2xs -AX -n ModuleName
參數說明:
-A忽略autoload 機制
-X忽略XS 元素
-n指定擴充模組的名字
例如,如果你的模組在Person.pm檔中,使用以下指令:
$ h2xs -AX -n Person
執行以上程序將輸出:
Writing Person/lib/Person.pmWriting Person/Makefile.PLWriting Person/READMEWriting Person/t/Person.tWriting Person/ChangesWriting Person/MANIFEST
Person 目錄下你可以看到新增加的目錄及檔案說明:
README :這個檔案包含一些安裝訊息,模組依賴性,版權資訊等。
Changes :這個檔案作為你的專案的修改日誌(changelog)檔案。
Makefile.PL :這是標準的Perl Makefile 建構器。用於建立Makefile.PL 檔案來編譯該模組。
MANIFEST :本檔案用於自動建置tar.gz 類型的模組版本分發。這樣你就可以把你的模組拿到CPAN 發布或分發給其他人。它包含了你在這個項目中所有文件的清單。
Person.pm :這是主模組文件,包含你的mod_perl 句柄代碼(handler code)。
Person.t :針對該模組的一些測試腳本。預設它只是檢查模組的載入,你可以添加一些新的測試單元。
t/ :測試文件
lib/ :實際原始碼存放的目錄
你可以使用tar (Linux 上) 指令來將以上目錄打包為Person.tar.gz。
我們可以對剛才壓縮的Person.tar.gz檔案進行解壓縮安裝,執行步驟如下:
tar xvfz Person.tar.gzcd Personperl Makefile.PLmakemake install
首先運行"perl Makefile.PL" 在當前目錄中產生Makefile;
然後執行"make" 編譯並建立所需的庫檔案;
之後用"make test" 測試編譯結果是否正確;最後執行"make install" 將函式庫檔安裝到系統目錄,至此整個編譯過程結束。