#!/usr/bin/env perl use 5.014; use warnings; use utf8; package My::Mo { use Mo; has city => (is => 'rw'); }; package My::Moo { use Moo; has city => (is => 'rw'); }; package My::Moose { use Moose; has city => (is => 'rw'); __PACKAGE__->meta->make_immutable; }; package My::Mouse { use Mouse; has city => (is => 'rw'); }; package My::Otiny { use Object::Tiny qw(city); } package My::Bless { sub new { my($class, %args) = @_; return bless \%args, $class; } sub city { my $self = shift; $self->{city} = shift if @_; return $self->{city}; } } my($bless, $mo, $moo, $moose, $mouse, $otiny); use Benchmark qw(:all); my $c = 10_000_000; say "Mix - create, access - $c times"; my $mix = timethese( $c, { 'bless' => sub { $bless = My::Bless->new(city => 'Preßburg'); my $x = $bless->city; }, 'mo' => sub { $mo = My::Mo->new(city => 'Preßburg'); my $x = $mo->city; }, 'moo' => sub { $moo = My::Moo->new(city => 'Preßburg'); my $x = $moo->city; }, 'moose' => sub { $moose = My::Moose->new(city => 'Preßburg'); my $x = $moose->city; }, 'mouse' => sub { $mouse = My::Mouse->new(city => 'Preßburg'); my $x = $mouse->city; }, 'otiny' => sub { $otiny = My::Otiny->new(city => 'Preßburg'); my $x = $otiny->city; }, }); cmpthese($mix); $c = 20_000_000; say "Accessors: $c times"; my $acc = timethese( $c, { 'bless' => sub { my $x = $bless->city; }, 'mo' => sub { my $x = $mo->city; }, 'moo' => sub { my $x = $moo->city; }, 'moose' => sub { my $x = $moose->city; }, 'mouse' => sub { my $x = $mouse->city; }, 'otiny' => sub { my $x = $otiny->city; }, }); cmpthese($acc);