12.22 例: モジュールのテンプレート
package Some::Module; # Some/Module.pmに保存する use strict; require Exporter; # バージョンチェック用にバージョンを設定する。 our $VERSION = 0.01; our @ISA = qw(Exporter); our @EXPORT = qw(&func1 &func2 &func4); our %EXPORT_TAGS = (); # 例えば、TAG => [ qw!name1 name2 ], # エクスポートするパッケージ変数をここに書く # さらに、オプションとしてエクスポートする関数もここに書く our @EXPORT_OK = qw($Var1 %Hashit &func3); use vars qw($Var1, %Hashit); # エクスポートしないパッケージ変数をここに書く our (@more, $stuff); # パッケージのグローバル変数を初期化する。最初はエクスポートする変数 $Var1 = ""; %Hashit = {}; # 次はその他の変数($Some::Module::stuffという形式でならアクセスできる) $stuff = ""; @more = (); # ファイルをスコープとする全てのレキシカル変数を、それらを使用する # 次の関数より前に作成しなければならない。 # ファイルに局所化されたレキシカル変数をここに書く my $priv_var = ""; my %secreat_hash = (); # クロージャなどのファイルに局所化された関数をここに書く # これらは、&$priv_funcのような形式で呼び出すことができる。 my $priv_func = sub { # 実際のコードをここに書く }; # エクスポートするかどうかに関わらず、全ての関数を作成する。 # {}スタブ内には、それぞれの具体的な動作を指定するコードを書く。 sub func1 { ... } # プロトタイプなし sub func2() { ... } # プロトタイプとして、void型を指定 sub func3($$) { ... } # プロトタイプとして、2個のスカラー型を指定 # 次の関数は自動的にエクスポートされないが、呼び出すことはできる。 sub func4(\%) { .... } # プロトタイプとして、1個のハッシュリファレンスを指定 END{} # モジュールのクリーンアップコード(グローバルデストラクタ) 1;