1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
#!perl
use strict;
use Benchmark qw(:all);
use Config; printf "Perl/%vd in $Config{archname}\n\n", $^V;
use warnings;
no warnings 'once';
my $cxsa_is_loaded = eval q{
package CXSA;
use Class::XSAccessor
constructor => 'new',
accessors => {
simple => 'simple',
},
;
1;
};
{
package Foo;
sub new { bless {}, shift }
}
{
package MouseOne;
use Mouse;
has simple => (
is => 'rw',
);
has with_lazy => (
is => 'rw',
lazy => 1,
default => 42,
);
__PACKAGE__->meta->make_immutable;
}
{
package MooseOne;
use Moose;
has simple => (
is => 'rw',
);
has with_lazy => (
is => 'rw',
lazy => 1,
default => 42,
);
__PACKAGE__->meta->make_immutable;
}
use B qw(svref_2object);
print "Moose/$Moose::VERSION (Class::MOP/$Class::MOP::VERSION)\n";
print "Mouse/$Mouse::VERSION\n";
print "Class::XSAccessor/$Class::XSAccessor::VERSION\n" if $cxsa_is_loaded;
my $mi = MouseOne->new();
my $mx = MooseOne->new();
my $cx;
$cx = CXSA->new if $cxsa_is_loaded;
print "\nGETTING for simple attributes\n";
cmpthese -1 => {
'Mouse' => sub{
my $x;
$x = $mi->simple();
$x = $mi->simple();
},
'Moose' => sub{
my $x;
$x = $mx->simple();
$x = $mx->simple();
},
$cxsa_is_loaded ? (
'C::XSAccessor' => sub{
my $x;
$x = $cx->simple();
$x = $cx->simple();
},
) : (),
};
print "\nSETTING for simple attributes\n";
cmpthese -1 => {
'Mouse' => sub{
$mi->simple(10);
$mi->simple(10);
},
'Moose' => sub{
$mx->simple(10);
$mx->simple(10);
},
$cxsa_is_loaded ? (
'C::XSAccessor' => sub{
$cx->simple(10);
$cx->simple(10);
},
) : (),
};
print "\nGETTING for lazy attributes (except for C::XSAccessor)\n";
cmpthese -1 => {
'Mouse' => sub{
my $x;
$x = $mi->with_lazy();
$x = $mi->with_lazy();
},
'Moose' => sub{
my $x;
$x = $mx->with_lazy();
$x = $mx->with_lazy();
},
$cxsa_is_loaded ? (
'C::XSAccessor' => sub{
my $x;
$x = $cx->simple();
$x = $cx->simple();
},
) : (),
};
|