Perlでコードの再利用を処理する方法は複数あります。多くの例ではアプローチの違いを明確にしておらず、多くのクラスでは少なくとも2つを使用しています。
OOスタイルをできるだけ使用することをお勧めします。ユーティリティ関数の比較的小さなクラスターを必要とするクラスが少なくとも3つ以上ある場合にのみ、EXPORTERを使用します。
そう:
package Foo;
use Foo::Util qw(util) ;
use strict ;
sub foo {
}
sub bar {
}
1;
package Foo::Bar ;
use Foo ;
use Foo::Util qw(util) ;
our @ISA = qw(Foo) ;
use strict ;
sub bar {
}
1;
package Foo::Util ;
use Exporter ;
our @ISA = qw(Exporter) ;
our @EXPORT = qw(util) ;
use strict ;
sub util {
}
1;
私は、OOアプローチとEXPORTER
アプローチをコード可用性の2つの異なる次元として視覚化することを好みます。まるで、関数がxまたはy軸から現在のパッケージに入っているかのようです。
上記の例では:
Foo::Bar
foo()
クラスからメソッドを派生Foo
Foo::Bar
bar()
メソッドを定義して、ポリモーフィックメソッドbar()
がクラスから派生しないようにしますFoo
クラスFoo
とパッケージから(関数ではなく)関数をFoo::Bar
受け取りEXPORTED
ます(クラスではありません)util()
Foo::Util
2つのシステムは複雑に見えますが、非常に実用的です。多重継承をトレースすると、トリッキーに速くなる可能性があります。したがって、コードの可用性の2番目の次元を持つことで、継承ツリーを小さく維持し、管理しやすくすることができます。
一般に、関数がモノリシックで比較的ダムである場合は、EXPORTERを使用します。それ以外の場合は、継承を使用します。ただしEXPORTER
、3つまたは4つを超えるパッケージが含まれる可能性がある場合を除いて、まったく使用しないでください。