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); }