|
NAMEMooseX::ArrayRef - blessed arrayrefs with Moose SYNOPSIS {
package Local::Person;
use Moose;
has name => (
is => 'ro',
isa => 'Str',
);
__PACKAGE__->meta->make_immutable;
}
{
package Local::Marriage;
use MooseX::ArrayRef;
has husband => (
is => 'ro',
isa => 'Local::Person',
);
has wife => (
is => 'ro',
isa => 'Local::Person',
);
__PACKAGE__->meta->make_immutable;
}
my $marriage = Local::Marriage->new(
wife => Local::Person->new(name => 'Alex'),
husband => Local::Person->new(name => 'Sam'),
);
use Data::Dumper;
use Scalar::Util qw(reftype);
print reftype($marriage), "\n"; # 'ARRAY'
print Dumper($marriage);
DESCRIPTIONObjects implemented with arrayrefs rather than hashrefs are often faster than those implemented with hashrefs. Moose's default object implementation is hashref based. Can we go faster? Simply "use MooseX::ArrayRef" instead of "use Moose", but note the limitations in the section below. The current implementation is mostly a proof of concept, but it does mostly seem to work. BUGS AND LIMITATIONSLimitations on SpeedThe accessors for mutable classes not significantly faster than Moose's traditional hashref-based objects. For immutable classes, the speed up is bigger Rate HashRef_M ArrayRef_M HashRef_I ArrayRef_I HashRef_M 1016/s -- -1% -48% -55% ArrayRef_M 1031/s 1% -- -47% -54% HashRef_I 1953/s 92% 89% -- -13% ArrayRef_I 2257/s 122% 119% 16% -- Limitations on MutabilityThings will probably break if you try to modify classes, add roles, etc "on the fly". Make your classes immutable before instantiating even a single object. Limitations on InheritanceInheritance isn't easy to implement with arrayrefs. The current implementation suffers from the following limitations:
Note that delegation (via Moose's "handles") is often a good alternative to inheritance. Issue TrackerPlease report any bugs to <http://rt.cpan.org/Dist/Display.html?Queue=MooseX-ArrayRef>. SEE ALSOMoose, MooseX::GlobRef, MooseX::InsideOut. AUTHORToby Inkster <tobyink@cpan.org>. COPYRIGHT AND LICENCEThis software is copyright (c) 2012 by Toby Inkster. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. DISCLAIMER OF WARRANTIESTHIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|