in reply to Problem with Class::Accessor::Faster

G'day jmmitc06,

The documentation for Class::Accessor::Faster only contains five short sentences in its DESCRIPTION. The fourth one says:

"Class::Accessor::Faster uses an array reference underneath to be faster."

Class::Accessor::Faster's source code has this constructor code:

sub new { my($proto, $fields) = @_; my($class) = ref $proto || $proto; my $self = bless [], $class; ...

You subclass Class::Accessor::Faster with Atom which has this constructor code:

sub new { my $proto = shift @_; my $self = { @atom_fields, @_ }; $self = bless ($self, ref($proto) || $proto); ...

This is almost certainly the cause of the error.

Class::Accessor::Fast subclasses Class::Accessor (see Class::Accessor::Fast's source code). Class::Accessor's source code has this constructor code:

sub new { my($proto, $fields) = @_; my($class) = ref $proto || $proto; $fields = {} unless defined $fields; # make a copy of $fields. bless {%$fields}, $class; }

So, if you wish to subclass Class::Accessor::Fast, you'll need a hashref-based object (which presumably worked for you initially); however, to subclass Class::Accessor::Faster, you'll need a arrayref-based object.

-- Ken