編寫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;

關於模組的一些值得注意的要點

  • 函式requireuse將載入模組。

  • 兩者都使用@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)。

廣告

© . All rights reserved.