Perl のパッケージとモジュール


Perl の各パッケージには個別のシンボル テーブルがあります。 定義構文は次のとおりです。

package mypack;

このステートメントは、その後に定義されるすべての変数とサブルーチンの名前がパッケージの関連付けに保存されます。別の package ステートメントが見つかるまで。 各シンボル テーブルには独自の変数名とサブルーチン名のセットがあり、名前の各セットは無関係であるため、同じ変数名を異なるパッケージで使用して異なる変数を表すことができます。

あるパッケージから別のパッケージの変数にアクセスするには、「パッケージ名+ダブルコロン(::)+変数名」で指定できます。

変数とサブルーチンの名前を保存するデフォルトのシンボルテーブルは、

main

という名前のパッケージに関連付けられています。プログラム内で他のパッケージが定義されており、デフォルトのシンボル テーブルの使用に戻したい場合は、メイン パッケージを再指定できます:

package main;

このようにして、次のプログラムは、パッケージが一度も定義されていなかったかのようになります。定義済みの変数、字幕 番組名は通常通り保存されます。

次の例のファイルには、main パッケージと Foo パッケージが含まれています。 特殊変数

__PACKAGE__

は、パッケージ名を出力するために使用されます:

#!/usr/bin/perl

#  main 包
$i = 1; 
print "包名 : " , __PACKAGE__ , " $i\n"; 

package Foo;
#  Foo 包
$i = 10; 
print "包名 : " , __PACKAGE__ , " $i\n"; 

package main;
# 重新指定 main 包
$i = 100; 
print "包名 : " , __PACKAGE__ , " $i\n"; 
print "包名: " , __PACKAGE__ ,  " $Foo::i\n"; 

1;

上記のプログラムを実行すると、出力結果は次のようになります:

包名 : main 1
包名 : Foo 10
包名 : main 100
包名: main 10

BEGIN モジュールと END モジュール

Perl 言語には、BEGIN、END という 2 つのキーワードがあります。それぞれのスクリプトには、プログラム本体の実行前または後に実行する一連のスクリプトを含めることができます。


構文は次のとおりです:

BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }

  • BEGIN

    モジュールは、Perl スクリプトがロードされてコンパイルされた後、他のステートメントが実行される前に実行されます。

  • END

    ステートメント ブロックは、インタープリターが終了する前に実行されます。

  • BEGIN

    ブロックと END ブロックは、Perl モジュールを作成するときに特に便利です。

  • まだ理解できない場合は、例を見てみましょう:
#!/usr/bin/perl

package Foo;
print "Begin 和 Block 实例\n";

BEGIN { 
    print "这是 BEGIN 语句块\n" 
}

END { 
    print "这是 END 语句块\n" 
}

1;

上記のプログラムを実行すると、出力結果は次のようになります:

这是 BEGIN 语句块
Begin 和 Block 实例
这是 END 语句块

Perl モジュールとは何ですか?

Perl5 は Perl パッケージを使用してモジュールを作成します。

Perl モジュールは再利用可能なパッケージです。モジュールの名前は、定義されたファイルの名前と同じです。

.pm

以下では、モジュール Foo.pm を定義します。コードは次のとおりです:

#!/usr/bin/perl

package Foo;
sub bar { 
   print "Hello $_[0]\n" 
}

sub blat { 
   print "World $_[0]\n" 
}
1;

Perl のモジュールについては、次の点に注意する必要があります:

    関数
  • require

    use は、モジュール。

  • @INC

    は、ライブラリ ルーチンの場所へのディレクトリ パスを含む Perl に組み込まれた特別な配列です。

  • require

    関数と use 関数は、eval 関数を呼び出してコードを実行します。

  • 1;

    の最後に、実行は必須であるTRUEを返します。それ以外の場合はエラーが返されます。

Require 関数と Use 関数

モジュールは、以下に示すように、

require

関数を通じて呼び出すことができます:

#!/usr/bin/perl

require Foo;

Foo::bar( "a" );
Foo::blat( "b" );
は use 関数を通じて参照することもできます:

<pre>
#!/usr/bin/perl

use Foo;

bar( "a" );
blat( "b" );

require 参照は関数を指定するためにパッケージ名を使用する必要があることに気付きましたが、 use はそうではありません。

  • 1. require はモジュールまたは Perl プログラム (.pm 接尾辞) をロードするために使用されます。省略できますが、.pl は必須です)

  • 2. Perl use ステートメントはコンパイル時に導入され、require は実行時に導入されます。モジュールのサブモジュール。ただし、require はインポートできないため、再宣言する必要があります

  • 4. USE が現在のデフォルトの @INC にある場合は、USE を使用してインポートすることはできませんが、require でパスを指定できます。

  • 5. USE がモジュールを参照する場合、モジュール名に ::二重コロンが含まれている場合、二重コロンがパス区切り文字として使用されます。これは Unix または Windows と同等です。 例:

  • use MyDirectory::MyModule


    次のステートメント use module を追加することで、モジュールからリスト シンボルをエクスポートできます:

    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 ディストリビューションに付属するツール h2xs を使用して、Perl モジュールを簡単に作成できます。


コマンドラインモードで「h2xs」と入力すると、パラメータリストが表示されます。

h2xs 構文形式:

$ h2xs -AX -n  ModuleName

パラメータの説明:

-A
    自動ロードメカニズムを無視する
  • -X
  • XS 要素を無視する
  • -n
  • 拡張モジュールの名前を指定します
  • たとえば、モジュールが

    person.pm
  • ファイルにある場合は、次のコマンドを使用します:
$ h2xs -AX -n Person

上記のプログラムを実行すると、出力が表示されます:

Writing Person/lib/Person.pm
Writing Person/Makefile.PL
Writing Person/README
Writing Person/t/Person.t
Writing Person/Changes
Writing Person/MANIFEST
person ディレクトリ 新しく追加されたディレクトリとファイルの説明が表示されます。 :

README: このファイルには、インストール情報、モジュールの依存関係、著作権情報などが含まれています。

  • 変更: このファイルはプロジェクトの変更ログ ファイルとして機能します。

  • Makefile.PL: これは標準の Perl Makefile コンストラクターです。モジュールをコンパイルするための Makefile.PL ファイルを作成するために使用されます。

  • MANIFEST: このファイルは、tar.gz タイプのモジュール バージョンのディストリビューションを自動的に構築するために使用されます。このようにして、モジュールを CPAN に持ち込み、公開したり、他の人に配布したりできます。このプロジェクトに含まれるすべてのファイルのリストが含まれています。

  • person.pm: これは、mod_perl ハンドラー コードを含むメイン モジュール ファイルです。

  • person.t: このモジュールのいくつかのテスト スクリプト。デフォルトでは、モジュールのロードをチェックするだけですが、いくつかの新しいテストユニットを追加できます。

  • t/: テストファイル

  • lib/: 実際のソースコードが保存されているディレクトリ

  • tar (Linux 上) コマンドを使用して、上記のディレクトリを Person.tar.gz にパッケージ化できます。

Perl モジュールをインストールします

圧縮したばかりの
person.tar.gz

ファイルを解凍してインストールできます。手順は次のとおりです。

tar xvfz Person.tar.gz
cd Person
perl Makefile.PL
make
make install

最初に「perl Makefile.PL」を実行して、ファイル内に Makefile を生成します。現在のディレクトリ

次に、「make」を実行して、必要なライブラリ ファイルをコンパイルして作成します。

次に、「make test」を使用して、コンパイル結果が正しいかどうかをテストします。最後に、「make install」を実行して、ライブラリ ファイルをシステム ディレクトリにインストールします。コンパイルプロセス全体が終了します。