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;