#!/usr/bin/perl use strict; use warnings; use Moose; use Benchmark qw( cmpthese ); package MyImmuClass; use Moose; sub setsize { my $self= shift; $self->{size}= shift; } has 'size',is => 'rw', isa => 'Int'; __PACKAGE__->meta->make_immutable; package MyClass; use Moose; sub setsize { my $self= shift; $self->{size}= shift; } sub getsize { my $self= shift; $self->{size}; } has 'size',is => 'rw', isa => 'Int'; package main; my $obj= MyClass->new; my $immuobj= MyImmuClass->new; my $x; my %tests = ( Moose => sub { $x= $obj->size; }, 'hash access' => sub { $x= $obj->{size}; }, MooseImmu => sub { $x= $immuobj->size; }, accessor => sub { $x= $obj->getsize } ); cmpthese(-3, \%tests); %tests = ( Moose => sub { $obj->size(21); }, MooseImmu => sub { $immuobj->size(21); }, 'hash access' => sub { $obj->{size}=20; }, accessor => sub { $obj->setsize(22); } ); cmpthese(-3, \%tests); #------------------------------------------------------ Rate MooseImmu Moose accessor hash access MooseImmu 1505277/s -- -1% -2% -82% Moose 1517026/s 1% -- -2% -82% accessor 1542411/s 2% 2% -- -81% hash access 8232304/s 447% 443% 434% -- Rate Moose MooseImmu accessor hash access Moose 413580/s -- -1% -69% -92% MooseImmu 419426/s 1% -- -69% -91% accessor 1335932/s 223% 219% -- -73% hash access 4874075/s 1079% 1062% 265% --