use Benchmark qw(:all);
{
package Local::Foo;
use Moose::Role;
has foo => (is => 'rw');
sub test {
my $class = shift;
my $self = $class->new;
$self->foo($_) for 0 .. 99;
}
}
{
package Local::HashRef::M;
use Moose;
with 'Local::Foo';
}
{
package Local::HashRef::I;
use Moose;
with 'Local::Foo';
__PACKAGE__->meta->make_immutable;
}
{
package Local::ArrayRef::M;
use MooseX::ArrayRef;
with 'Local::Foo';
}
{
package Local::ArrayRef::I;
use MooseX::ArrayRef;
with 'Local::Foo';
__PACKAGE__->meta->make_immutable;
}
cmpthese(10_000, {
HashRef_M => sub { Local::HashRef::M::->test },
HashRef_I => sub { Local::HashRef::I::->test },
ArrayRef_M => sub { Local::ArrayRef::M::->test },
ArrayRef_I => sub { Local::ArrayRef::I::->test },
});