C++ などとは違って、Perl ではクラス定義のための特別な構文を用意していま せん。メソッドの定義を入れることによって、パッケージをクラスとして使用し ます。
各々のパッケージには、@ISA という特別な配列があり、現在のパッケージでメ ソッドが見つからなかった場合に、どこを探すかということが書いてあります。 Perl では、これによって継承を実現しています。配列 @ISA の各要素は、たま たまクラスである、他のパッケージの名前になっています。クラスは、@ISA に 現われる順序で、見つからなかったメソッドを (深度優先) 検索します。@ISA を通じてアクセスできるクラスをカレントクラスの基底クラスといいます。
必要なメソッドが、基底クラスの中に見つかれば、効率化のために、現在のクラ スの中にキャッシュされます。@ISA を変更したり、新しいサブルーティンを定 義すると、そのキャッシュを無効にし、再び Perl に検索させるようにします。
メソッドが見つからず、AUTOLOAD
ルーティンが見つかれば、見つからな
かったメソッドの代わりに、それが呼び出されます。
メソッドも AUTOLOAD
ルーティンも @ISA に見つからなければ、最後の
手段として、`UNIVERSAL' というクラスで、メソッド (あるいは
AUTOLOAD
ルーティン) を探します。これでもダメならば、最終的に諦め
て、エラーを出すことになります。
Perl のクラスは、メソッドの継承だけを行ないます。データの継承は、クラス 自身に任されます。全般的にこのことは、Perlでは問題とはなりません。多くの クラスは、自分のオブジェクトの属性を、名無しのハッシュを使ってモデル化す るからです。そのハッシュは、そのオブジェクトと何らかの関係を持とうとする、 さまざまなクラスによって切り分けられるために、自分自身の小規模な名前空間 として働きます。
Go to the first, previous, next, last section, table of contents.