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
|
|---|