[Perl] 文法:モジュール - lot36z/perl_wiki GitHub Wiki
モジュールの作成
モジュールを使うと、ソースコードが分離され、メンテナンスがしやすくなる。 モジュールファイルの拡張子は.pmである。
モジュール用の標準的なディレクトリ構造
├─ lib
└─ t
libディレクトリにモジュールファイル(.pmファイル)を配置する。 tディレクトリにテストファイル(.tファイル)を配置する。
e.g. モジュール用のディレクトリ構造の具体例
├─ lib
│ └─ Local
│ └─ Module
│ └─ MyModule.pm
└─ t
└─ test_MyModule.t
/t/test_MyModule.tファイルには、テスト対象のモジュールファイルの配置場所/lib/Local/Module/MyModule.pmを教えてあげる必要がある。 /t/test_MyModule.tファイルにテスト対象のモジュールの読み込み宣言を記述することで、.tファイルはテスト対象のモジュールファイルを見つけて使用することができるようになる。 テストは、以下のようにテストファイルを呼び出せば実行される。
$ perl ./t/test_MyModule.t
e.g. /t/test_MyModule.tファイルで/lib/Local/Module/MyModule.pmファイルを使用できるようにする。
/lib/Local/Module/MyModule.pmファイル
package Local::Module::MyModule; # 名前空間を宣言。モジュールのルートディレクトリ(/lib/)からこのファイルまでのパスを::で区切り、.pm拡張子を除去したもの。
# 引数に1足して返す関数
sub add_one
{
my $arg = $_[0]; # 1番目の引数を取得
my $result = $arg + 1;
return $result;
}
# グローバル変数
our $LUCKY_NUMBER = 7;
1; # 他のファイルからこのモジュールを読み込んだ時にエラーが出ないようにするために必要。
/t/test_MyModule.tファイル
use FindBin; # FindBinモジュールの読み込み
use lib "$FindBin::Bin/../lib"; # 読み込みたいモジュールのルートディレクトリのパス(/lib/)をライブラリパスに追加する。$FindBin::Binはこのファイルの存在するディレクトリを指す変数。
use Local::Module::MyModule; # Local::Module::MyModuleモジュールの読み込み。/lib/ディレクトリがライブラリパスに追加済みなので、Local/Module/MyModule.pmファイルを使用できる。
use Test::more; # テスト用のモジュールの読み込み
my $result = Local::Module::Mymodule::add_one(2); # Local/Module/MyModule.pmモジュールのadd_one関数の呼び出し
print $result;
# [output]
# 3
my $lucky_num = $Local::Module::Mymodule::LUCKY_NUMBER; # Local/Module/MyModule.pmモジュールのグローバル変数LUCKY_NUMBERの呼び出し
print $lucky_num;
# [output]
# 7
is($lucky_num, 7); # 値のテスト。この場合は合格なので、テスト実行時にはOKと出る。
done_testing(); # テストが正しく最後まで完了したか確認するために必要。全てのテストが終わった位置に書く。