Class::Accessor::Fast はインスタンス変数、Class::Data::Inheritable はクラス変数を保持します。
サンプルスクリプトを実行すれば、一目瞭然。
package ValTest1; use base qw/Class::Accessor::Fast Class::Data::Inheritable/; __PACKAGE__->mk_accessors('data'); package ValTest2; use base qw/Class::Accessor::Fast Class::Data::Inheritable/; __PACKAGE__->mk_classdata('data'); package TestMain; my $test11 = ValTest1->new(); my $test12 = ValTest1->new(); $test11->data('data_11'); $test12->data('data_12'); print "TEST11=", $test11->data , " TEST12=", $test12->data , "\n"; my $test21 = ValTest2->new(); my $test22 = ValTest2->new(); $test21->data('data_11'); $test22->data('data_12'); print "TEST21=", $test21->data, " TEST22=", $test22->data, "\n"; ValTest2->data('data_00'); print "TEST21=", $test21->data, " TEST22=", $test22->data, "\n";
これと実行すると、次のようになり、mk_classdata() では dataが上書きされることが分かります。
$ perl foo.pl TEST11=data_11 TEST12=data_12 TEST21=data_12 TEST22=data_12 TEST21=data_00 TEST22=data_00 $
C::A::Fast の make_ro_accessor, make_wo_accessor
先程のClass::Accessor::Fastのサンプルスクリプトでは、mk_accessors() を使用しましたが、srcを読むと getterのみを提供するmake_ro_accessor() や、 setterのみを提供するmake_wo_accessor() もあるようです。