use でサブルーチンを main パッケージにインポート可能なモジュールを作成するには、下記のようなコードを記述します。
package MyLib;
use base qw(Exporter);
our @EXPORT = qw(func1);
our @EXPORT_OK = qw(func3 func4);
sub func1 { print "func1\n"; }
sub func2 { print "func2\n"; }
sub func3 { print "func3\n"; }
1;
use MyLib;
func1;
func2;
use MyLib qw(func1 func2 func3);
とした場合、以下のようなコードを記述したのと同様の意味になります。
BEGIN {
require MyModule;
MyLib->import(qw(func1 func2 func3));
}
つまり、MyLib パッケージの中で適切に import サブルーチンを実装することで、main モジュールにサブルーチンをインポートできるようになります。
use MyLib qw(func1 func2 func3);
func1;
func2;
func3;
package MyLib;
sub import {
my $class = shift;
for (@_) {
*{"main::$_"} = \&$_;
}
}
sub func1 { print "func1\n"; }
sub func2 { print "func2\n"; }
sub func3 { print "func3\n"; }
1;
ただ、上記のような単純な import では、インポートリストを省略した場合のデフォルトのインポートに対応できないし、モジュールを作成するごとにそのような import メソッドを記述していたのでは手間がかかります。そこで、Exporter というモジュールを使用してこれらの作業を単純化します。
Exporter モジュールは import ルーチンを提供しているので、これを継承するようにして独自のモジュールを作成します。Export->import には次のような特徴があります。
@EXPORT 配列の内容が使用される。@EXPORT あるいは @EXPORT_OK 配列に登録されていなければならない。たとえば、インポートリストを省略した場合に func1 だけがデフォルトで main パッケージにロードされるようにするには次のように定義します。
package MyLib;
use base qw(Exporter);
our @EXPORT = qw(func1); # デフォルトのインポートリスト
our @EXPORT_OK = qw(func2 func3);
sub func1 { print "func1\n"; }
sub func2 { print "func2\n"; }
sub func3 { print "func3\n"; }
1;
これで、上記のモジュールは次のように使用できます。
use MyLib; # デフォルトで func1 がインポートされる
func1;
@EXPORT_OK に func2 func3 が登録されているので、必要に応じて func2 func3 をインポートすることができます。
use MyLib qw(func2 func3);
func2;
func3;
デフォルトのインポートリストに加え、さらに明示的にインポートするサブルーチンを指定する場合は、:DEFAULT というショートカットを使用すると便利です。:DEFAULT は、デフォルトのインポートリストを示すショートカットです。
use MyLib qw(:DEFAULT func3);
func1;
func3;