weblog of key_amb

主にIT関連の技術メモ

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);

参考