tokuhirom's Blog

Class::Accessor::Fast とかの継承の罠

package Parent;
use parent qw/Class::Accessor::Fast/;

な Parent クラスがある場合に、これを継承したクラス Child をつくる場合に

package Child;
use parent qw/Parent/;
__PACKAGE__->mk_accessors(qw/foo/);

などとしてしまいがちだが、基本的に Parent の作者は、C::A::Fast をつかっているところは別に仕様だとは考えていないので、途中で不意に Class::Accessor::Fast から Moose に転向したりする場合がある。

というわけで、そういう場合には

package Child;
use parent qw/Parent/;
use Class::Accessor::Lite;
Class::Accessor::Lite->mk_accessors(qw/foo/);

のように、Class::Accessor::Lite をつかうとよいでしょう。