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() もあるようです。