プログラミングPerl 12章を読んでミタ。。

すごくすっきり☆
open sourceへの貢献の第1歩、ちょっとまとめまスタ。

  • オブジェクトは、クラスのインスタンスである。
  • クラスメソッドとインスタンス(オブジェクト)メソッドと分けて呼ばれるが実際はメソッドでしかない
    ※第1引数がクラス名ならクラスメソッドになるし、リファレンスならインスタンスメソッドになる。
  • コンストラクタメソッドは、通常クラスメソッド( Foo->new() )であるが、インスタンスメソッド($bar->new())であってもよい。
  • オブジェクトとはクラス名が貼り付け(bless)られたリファレントである
  • クラスは単なるパッケージ(名前空間に過ぎない!!
  • コンストラクタメソッドの好例


sub new{
my $invocant = shift;
my $class = ref($invocant) || $invocant;
my $self = {
color => "bay",
legs => "4",
@_,
};
bless($self , $class);
return $self;
}
とすることで、前の属性をオーバーライドできる

  • use base qw(Foo Bar );で基底クラスを読み込む。
    use filedsも自動的に一体化されるとのこと(ココもっとベンキョウ!)。BEGINで実行されるので、基底クラスにBEGIN内で初期化等があっても大丈夫★
  • メソッドサーチの順番は

1.class::method
2."$_"::method foreach (@class::ISA)
3.UNIVERSAL::method
4.class::AUTOLOAD(サブルーチン)
5."$_"::AUTOLOAD foreach (@class::ISA)
6.UNIVERSAL::AUTOLOAD

  • SUPER::method は現在実行中のパッケージの親クラスを探る
  • クラスはパッケージだ!!


package Hird:
use Dragonfly;
{
package Dragonfly;
sub divebomb { shift->SUPER::divebomb(@_)}
}
こう書くだけで、Dragonflyクラスのメソッドが実装されることになる。
まさに、クラス is パッケージ , that is 名前空間

  • INVOCANT->can(METHOD) 戻り値はなんと呼び出されるはずのサブルーチンへのリファレンス。

search+getで実行メソッドの実体が得られます。