Perl 関数の Export/Import
Perl の標準モジュール Exporter を使った関数の Export/Import のやり方をまとめておく。 この機能を使って関数をインポートすると、"MyApp::afunc" のようにパッケージ名を指定せずとも関数を組み込み関数のように "afunc" だけで呼び出せる。
基本的な使い方
Export する側は下のように書く。
package MyApp; use Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(afunc bfunc); our @EXPORT_OK = qw(cfunc dfunc); sub afunc { :
Import する側は次のように書く。
# 1) デフォルトでは @EXPORT の関数がすべてインポートされる use MyApp; # 2) @EXPORT_OK の関数を明示的にインポート use MyApp qw(cfunc); # 3) 何もインポートしない use MyApp ();
2) では @EXPORT の関数はインポートされないことに注意。 もし、@EXPORT をインポートしつつ、@EXPORT_OK の関数をインポートしたい場合、後述するタグ機構を使って次のように書けばよさそうだ。
use MyApp qw(:DEFAULT cfunc)
%EXPORT_TAGS を使って関数をグルーピング
上記の ":DEFAULT" は @EXPORT にマッピングされてるのですが、同様に %EXPORT_TAGS というハッシュを定義することで「タグ」 => 「関数リスト」のマッピングを作成できます。
our %EXPORT_TAGS = ( all => [@EXPORT, @EXPORT_OK], ac => [qw(afunc cfunc)], );
Export 側で上を書いた前提で、Import 側は次のように書きます。
# tag を1つ指定 use MyApp qw(:all); # tag + 関数名指定 use MyApp qw(:ac bfunc);