Catalyst のソースを読んでいると
Class::Data::Accessor と Class:Data::Inheritable が出てくる。つかわれかたは、ほとんど同じに見えるので、ちょっとソースを読んでみた。
読んでみると
Class::Data::Accessor のほうは、オブジェクトメソッドとして呼ばれたときに、オブジェクトのデータにアクセスする。
こんな感じ。
use strict;
use warnings;
use base qw/Class::Data::Accessor Class::Data::Inheritable/;
main->mk_classaccessor('hoge'); # Class::Data::Accessor
main->mk_classdata('fuga'); # Class::Data::Inheritable
main->hoge('aaaa');
main->fuga('aaaa');
my $obj = bless {}, 'main';
print main->hoge."\n"; # aaaa
print main->fuga."\n"; # aaaa
print $obj->hoge."\n"; # aaaa
print $obj->fuga."\n"; # aaaa
$obj->hoge('bbbb');
$obj->fuga('bbbb');
print main->hoge."\n"; # aaaa
print main->fuga."\n"; # bbbb
print $obj->hoge."\n"; # bbbb
print $obj->fuga."\n"; # bbbbめもめも
あ!あと
Class::Data::Accessor のほうもちゃんと Inheritable (継承可能) だった。
めもめも