- Perl基礎
- Perl - 首頁
- Perl - 簡介
- Perl - 環境
- Perl - 語法概述
- Perl - 資料型別
- Perl - 變數
- Perl - 標量
- Perl - 陣列
- Perl - 雜湊
- Perl - IF...ELSE
- Perl - 迴圈
- Perl - 運算子
- Perl - 日期和時間
- Perl - 子程式
- Perl - 引用
- Perl - 格式
- Perl - 檔案I/O
- Perl - 目錄
- Perl - 錯誤處理
- Perl - 特殊變數
- Perl - 編碼規範
- Perl - 正則表示式
- Perl - 傳送電子郵件
- Perl高階
- Perl - 套接字程式設計
- Perl - 面向物件
- Perl - 資料庫訪問
- Perl - CGI程式設計
- Perl - 包和模組
- Perl - 程序管理
- Perl - 嵌入式文件
- Perl - 函式引用
- Perl有用資源
- Perl - 問答
- Perl - 快速指南
- Perl - 有用資源
- Perl - 討論
編寫Perl模組
什麼是包?
包是一組程式碼,它存在於自己的名稱空間中。
名稱空間是唯一變數名稱的命名集合(也稱為符號表)。
名稱空間防止包之間變數名稱衝突。
包可以構建模組,當使用這些模組時,不會覆蓋模組自身名稱空間之外的變數和函式。
包語句
package語句將當前命名上下文切換到指定的名稱空間(符號表)。 如果指定的包不存在,則首先建立一個新的名稱空間。
$i = 1; print "$i\n"; # Prints "1" package foo; $i = 2; print "$i\n"; # Prints "2" package main; print "$i\n"; # Prints "1"
包一直有效,直到呼叫另一個package語句,或者直到當前塊或檔案的結尾。
您可以使用::包限定符顯式引用包內的變數。
$PACKAGE_NAME::VARIABLE_NAME For Example: $i = 1; print "$i\n"; # Prints "1" package foo; $i = 2; print "$i\n"; # Prints "2" package main; print "$i\n"; # Prints "1" print "$foo::i\n"; # Prints "2"
BEGIN和END塊
您可以定義任意數量名為BEGIN和END的程式碼塊,它們分別充當建構函式和解構函式。
BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
每個BEGIN塊在Perl指令碼載入和編譯後但執行任何其他語句之前執行。
每個END塊在Perl直譯器退出之前執行。
BEGIN和END塊在建立Perl模組時特別有用。
什麼是Perl模組?
Perl模組是在庫檔案中定義的可重用包,其檔名與包名相同(以.pm結尾)。
名為“Foo.pm”的Perl模組檔案可能包含如下語句。
#!/usr/bin/perl
package Foo;
sub bar {
print "Hello $_[0]\n"
}
sub blat {
print "World $_[0]\n"
}
1;
關於模組的一些值得注意的要點
函式require和use將載入模組。
兩者都使用@INC中的搜尋路徑列表來查詢模組(您可以修改它!)。
兩者都呼叫eval函式來處理程式碼。
底部的1;導致eval計算結果為TRUE(因此不會失敗)。
Require函式
可以透過呼叫require函式來載入模組。
#!/usr/bin/perl require Foo; Foo::bar( "a" ); Foo::blat( "b" );
請注意,上面的子程式名稱必須是完全限定的(因為它們隔離在自己的包中)。
最好能夠將函式bar和blat匯入我們自己的名稱空間,這樣我們就不必使用Foo::限定符。
Use函式
可以透過呼叫use函式來載入模組。
#!/usr/bin/perl use Foo; bar( "a" ); blat( "b" );
請注意,我們不必完全限定包的函式名稱?
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模組樹
當您準備好釋出您的Perl模組時,有一種建立Perl模組樹的標準方法。這是使用h2xs實用程式完成的。此實用程式與Perl一起提供。以下是使用h2xs的語法。
$h2xs -AX -n Module Name # For example, if your module is available in Person.pm file $h2xs -AX -n Person This will produce following result Writing Person/lib/Person.pm Writing Person/Makefile.PL Writing Person/README Writing Person/t/Person.t Writing Person/Changes Writing Person/MANIFEST
以下是這些選項的描述
-A省略自動載入器程式碼(最適合定義大量不常用子程式的模組)。
-X省略XS元素(外部子程式,其中外部表示Perl外部,即C)。
-n指定模組的名稱。
因此,上面的命令在Person目錄中建立以下結構。實際結果如上所示。
更改
Makefile.PL
MANIFEST(包含包中所有檔案的列表)。
README
t/(測試檔案)。
lib/(實際原始碼放在這裡)。
所以最終您將此目錄結構打包到一個名為Person.tar的檔案中,然後您可以釋出它。您需要更新README檔案,其中包含正確的說明。您可以在t目錄中提供一些測試示例檔案。
安裝Perl模組
安裝Perl模組非常簡單。使用以下順序安裝任何Perl模組。
perl Makefile.PL make make install
Perl直譯器有一個目錄列表,它在其中搜索模組(全域性陣列@INC)。