Perl の各パッケージには個別のシンボル テーブルがあり、定義構文は次のとおりです。
マイパックをパッケージ化します。
このステートメントは、 mypackという名前のパッケージを定義します。それ以降に定義されるすべての変数とサブルーチンの名前は、別のpackageステートメントが検出されるまで、パッケージに関連付けられたシンボル テーブルに保存されます。
各シンボル テーブルには独自の変数名とサブルーチン名のセットがあり、名前の各セットには関連性がないため、異なるパッケージで同じ変数名を使用して異なる変数を表すことができます。
あるパッケージから別のパッケージの変数にアクセスするには、「パッケージ名+ダブルコロン(::)+変数名」で指定できます。
変数とサブルーチンの名前を格納するデフォルトのシンボル テーブルは、 mainという名前のパッケージに関連付けられています。プログラム内で他のパッケージが定義されており、デフォルトのシンボル テーブルの使用に戻したい場合は、メイン パッケージを再指定できます。パッケージメイン。
このようにして、次のプログラムはパッケージがまったく定義されていなかったかのように動作し、変数とサブルーチンの名前は通常どおり保存されます。
次の例のファイルは main パッケージと Foo パッケージです。 特殊変数__PACKAGE__は、パッケージ名を出力するために使用されます。
上記のプログラムを実行すると、出力結果は次のようになります。
パッケージ名: main 1 パッケージ名: Foo 10 パッケージ名: main 100 パッケージ名: main 10
Perl 言語には、BEGIN と END という 2 つのキーワードがあります。それぞれのスクリプトには、プログラム本体の実行前または後に実行する一連のスクリプトを含めることができます。
構文形式は次のとおりです。
BEGIN { ... }END { ... }BEGIN { ... }END { ... }
各BEGINモジュールは、Perl スクリプトがロードおよびコンパイルされた後、他のステートメントが実行される前に実行されます。
各ENDステートメント ブロックは、インタープリターが終了する前に実行されます。
BEGINおよびENDステートメント ブロックは、Perl モジュールを作成する場合に特に便利です。
それでも理解できない場合は、例を見てみましょう。
上記のプログラムを実行すると、出力結果は次のようになります。
これは BEGIN ステートメント ブロックと Block インスタンスです。
Perl5 では、モジュールの作成に Perl パッケージが使用されます。
Perl モジュールは再利用可能なパッケージであり、モジュールの名前はパッケージの名前と同じで、定義されたファイルのサフィックスは.pmです。
以下ではモジュール Foo.pm を定義します。コードは次のとおりです。
Perl のモジュールについて注意すべき点がいくつかあります。
必要な関数と使用する関数はモジュールをロードします。
@INCは、ライブラリ ルーチンの場所へのディレクトリ パスを含む Perl に組み込まれた特別な配列です。
require関数とuse関数はeval関数を呼び出してコードを実行します。
最後に 1 を指定すると、実行は必須の TRUE を返します。それ以外の場合はエラーが返されます。
以下に示すように、 require関数を通じてモジュールを呼び出すことができます。
use 関数を通じて参照することもできます。
require 参照では関数を指定するためにパッケージ名を使用する必要がありますが、use 参照では必要がないことがわかりました。2 つの主な違いは次のとおりです。
1. require は、モジュールまたは Perl プログラムをロードするために使用されます (.pm 接尾辞は省略できますが、.pl が存在する必要があります)
2. Perl use ステートメントはコンパイル時に導入され、require ステートメントは実行時に導入されます。
3. Perl を使用してモジュールを導入すると、そのモジュールのサブモジュールも導入されます。ただし、require は導入できないため、再宣言する必要があります。
4. USE は現在のデフォルトの @INC で検索されます。モジュールが @INC に存在しない場合、USE を使用して導入することはできませんが、require でパスを指定できます。
5. USE がモジュールを参照する場合、モジュール名に :: 二重コロンが含まれている場合、二重コロンはパス区切り文字として使用されます。これは、Unix の / または Windows の に相当します。 のように:
MyDirectory::MyModule を使用する
次のステートメントを追加することで、リスト シンボルを use モジュールからエクスポートできます。
エクスポーターが必要;@ISA = qw(エクスポーター);
@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" } # エクスポートされていません!1;
Perl モジュールは、Perl ディストリビューションに付属するツール h2xs を使用して簡単に作成できます。
コマンド ライン モードで h2xs と入力すると、パラメータ リストが表示されます。
h2xs 構文形式:
$ h2xs -AX -n モジュール名
パラメータの説明:
-A は自動ロードメカニズムを無視します。
-X XS要素を無視します
-n は拡張モジュールの名前を指定します
たとえば、モジュールがPerson.pmファイルにある場合は、次のコマンドを使用します。
$ h2xs -AX -n 人
上記のプログラムを実行すると、次のように出力されます。
書く人/lib/person.pm書く人/Makefile.PL書く人/README書く人/t/person.t書く人/Changes書く人/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 にパッケージ化できます。
圧縮したPerson.tar.gzファイルを解凍してインストールできます。手順は次のとおりです。
tar xvfz person.tar.gzcd personperl Makefile.PLmakemake インストール
まず「perl Makefile.PL」を実行して現在のディレクトリに Makefile を生成します。
次に、「make」を実行して必要なライブラリ ファイルをコンパイルして作成します。
次に、「make test」を使用してコンパイル結果が正しいかどうかをテストし、最後に「make install」を実行してライブラリ ファイルをシステム ディレクトリにインストールすると、コンパイル プロセス全体が終了します。