C++ などとは違って、Perl ではメソッド定義のための特別な構文を用意してい ません。(だたし、メソッド呼び出しのためには、少しばかり構文を用意してい ます。これについては後程。)メソッドでは、最初の引数がオブジェクトか、自 分が呼び出されたパッケージである必要があります。メソッドには、2 つの種類 があり、C++ での最も近い 2 つのメソッドの種類に準じて、静的メソッドと仮 想メソッドと呼びます。
静的メソッドは、最初の引数としてクラス名を期待します。これは、全体として のクラスに対する機能を果たすもので、クラスに属する個々のオブジェクトに対 するものではありません。コンストラクタは、典型的な静的メソッドです。多く の静的メソッドは、その第一引数を単に無視してしまいます。既にどのパッケー ジにいるのかは、分かっていますし、どのパッケージを介して起動されたかは、 関係がないからです。(静的メソッドは、通常の仮想メソッドと同じように、継 承トリーをたどっていますから、これらのパッケージが等しいとは限りません。) この他に、静的メソッドを使う典型例としては、名前によるオブジェクトの検索 があげられます:
sub find { my ($class, $name) = @_; $objtable{$name}; }
仮想メソッドは、最初の引数としてオブジェクトリファレンスを期待します。最
初の引数を shift
して、`self' や `this' という変数にい
れ、通常のリファレンスとして使うことがよく行なわれます。
sub display { my $self = shift; my @keys = @_ ? @_ : sort keys %$self; foreach $key (@keys) { print "\t$key => $self->{$key}\n"; } }
Go to the first, previous, next, last section, table of contents.