[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