[kansaipm] ExportAbove
Yasushi Nakajima
nakajima at netstock.co.jp
Thu Dec 11 19:33:18 CST 2003
久しぶりにCPANにモジュールを一つあげました。ExportAboveと言います。私
のサイトにもあります。(http://hp1.jonex.ne.jp/~nakajima.yasushi/)
自分で書いたモジュールから変数名やサブルーチン名をエクスポートしたい場
合、Exporterを使って、
use Exporter;
@ISA=qw(Exporter);
@EXPORT=qw($foo bar);
$foo=...;
sub bar {...}
sub baz {...}
のように書きます。しかし、これだと$fooやbarといった名前を二箇所に書かね
ばなりません。bar()はやっぱりgoo()にしようと思い直したら、二箇所のbarを
忘れずにgooに変更しないといけません。モジュールをあれこれいじっている最
中はこれは結構面倒で、特にこの関数はこっちのモジュールへ移そう…なんてこ
とをやると@EXPORTの方は忘れたりしがちです。
ExportAboveを使うと、次のように書けます。
use Exporter;
@ISA=qw(Exporter);
$foo=...;
sub bar {...}
use ExportAbove;
sub baz {...}
要するに、use ExportAbove;をモジュールのどこかに書くと、それより前で定
義された変数やサブルーチンは自動的に@EXPORTに入り、エクスポートされるこ
とになるわけです。@EXPORT = qw(...); は書く必要がないので、同じ名前を二
箇所に書く必要もなく、修正し忘れがなくなるというわけです。
次のように細かくコントロールすることもできます。
use Exporter;
@ISA = qw(Exporter);
$qux = ...; # NOT export
sub foo {...} # NOT export
no ExportAbove;
@quux = (...); # into @EXPORT
sub bar {...} # into @EXPORT
use ExportAbove;
%quuux = (...); # into %EXPORT_TAGS and @EXPORT_OK
sub baz {...} # into %EXPORT_TAGS and @EXPORT_OK
use ExportAbove qw(:Tag OK);
$goo = ...; # NOT export
sub gle {...} # NOT export
--
Yasushi Nakajima <nakajima at netstock.co.jp>
More information about the Kansai-pm
mailing list