Class::Accessor::Fast

パッケージのプロパティとアクセサ(プロパティにアクセスするメソッド)を自動定義する。

使用例:

package foo1;
use base qw(Class::Accessor::Fast);
__PACKAGE__->mk_accessors(qw(faa));	# RWアクセサを定義
__PACKAGE__->mk_ro_accessors(qw(fbb));	# ROアクセサ(setter定義なしのアクセサ)を定義
__PACKAGE__->mk_wo_accessors(qw(fcc));	# WOアクセサ(getter定義なしのアクセサ)を定義(注1)

package main;
    my $foo = foo1->new({fbb => 20});	# $foo->{'fbb'}に20が代入される(注2)
    $foo->faa(10);			# faa setter : $foo->['faa'} に10が代入される
    print $foo->faa,"\n";		# faa getter:$foo->{'faa'}が取得される
    print $foo->fbb,"\n";		# fbb getter:fbb はROなので$foo->fbb(20)はエラー
    $foo->fcc(30);			# fcc setter:fccはWOなので$foo->fccはエラー

注1:getterが定義されていないだけなので、参照するときは、$foo->{'fcc'} で参照できる。完全なライトオンリーが実現できるわけではない。

注2:setterが定義されていないだけなので、$foo->{'fbb'}に代入すれば書換えできる。完全なリードオンリーが実現できる訳ではない。

注3:Class::Accessor::Fastのコンストラクタは、ハッシュ参照を引数に取る。継承クラスでコンストラクタをオーバーライドした場合は、アクセサの初期値を設定したハッシュ参照でClass::Accessor::Fastのコンストラクタを呼び出す。

sub new {
    my $param = shift;
    my $class = ref($param) || $param;
    my %option = (opt1 => 1, opt2 => 2);
    my $self = $class->SUPER::new(\%option);
}