IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

Class::Data::Accessor と Class::Data::Inheritable の違い

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 (継承可能) だった。
めもめも