package FooCA; use base 'Class::Accessor'; __PACKAGE__->mk_accessors(qw(foo)); package FooCAF; use base 'Class::Accessor::Fast'; __PACKAGE__->mk_accessors(qw(foo)); package FooCAI; use base 'Class::Accessor::Inline'; __PACKAGE__->mk_accessors(qw(foo)); package main; my $ca = FooCA->new( { foo => 'bar' }); my $caf = FooCAF->new( { foo => 'bar' }); my $cai = FooCAI->new( { foo => 'bar' }); sub call_caf { $caf->foo(); } sub call_cai { # $_[0] == 1 ? 1 : 0; $cai->foo(); } sub call_ca { $ca->foo() } sub call_cad { $cai->{foo}; } use Benchmark 'cmpthese'; cmpthese(-2, { ca => sub { call_ca() }, caf => sub { call_caf() }, cai => sub { call_cai() }, cad => sub { call_cad() }, }); B::Concise::compile('', 'call_cai', 'call_cad')->(); use B::Concise; sub set_caf { $caf->foo('orz'); } sub set_cai { # $_[0] == 1 ? 1 : 0; $cai->foo('orz'); } sub set_ca { $ca->foo('orz') } sub set_cad { $cai->{foo} = 'orz'; } cmpthese (-2, { ca => sub { set_ca() }, caf => sub { set_caf() }, cai => sub { set_cai() }, cad => sub { set_cad() }, }); B::Concise::compile('', 'set_cai', 'set_cad')->(); use B::Concise;