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
|
#!perl -w
use strict;
use Benchmark qw(:all);
use Config;
use Moose ();
use Mouse ();
use Class::Method::Modifiers ();
printf "Perl %vd on $Config{archname}\n", $^V;
my @mods = qw(Moose Mouse Class::Method::Modifiers);
foreach my $class(@mods){
print "$class ", $class->VERSION, "\n";
}
print "\n";
{
package Base;
sub f{ 42 }
sub g{ 42 }
sub h{ 42 }
}
my $i = 0;
sub around{
my $next = shift;
$i++;
goto &{$next};
}
{
package CMM;
use parent -norequire => qw(Base);
use Class::Method::Modifiers;
before f => sub{ $i++ };
around g => \&main::around;
after h => sub{ $i++ };
}
{
package MooseClass;
use parent -norequire => qw(Base);
use Moose;
before f => sub{ $i++ };
around g => \&main::around;
after h => sub{ $i++ };
}
{
package MouseClass;
use parent -norequire => qw(Base);
use Mouse;
before f => sub{ $i++ };
around g => \&main::around;
after h => sub{ $i++ };
}
print "Calling methods with before modifiers:\n";
cmpthese -1 => {
CMM => sub{
my $old = $i;
CMM->f();
$i == ($old+1) or die $i;
},
Moose => sub{
my $old = $i;
MooseClass->f();
$i == ($old+1) or die $i;
},
Mouse => sub{
my $old = $i;
MouseClass->f();
$i == ($old+1) or die $i;
},
};
print "\n", "Calling methods with around modifiers:\n";
cmpthese -1 => {
CMM => sub{
my $old = $i;
CMM->g();
$i == ($old+1) or die $i;
},
Moose => sub{
my $old = $i;
MooseClass->g();
$i == ($old+1) or die $i;
},
Mouse => sub{
my $old = $i;
MouseClass->g();
$i == ($old+1) or die $i;
},
};
print "\n", "Calling methods with after modifiers:\n";
cmpthese -1 => {
CMM => sub{
my $old = $i;
CMM->h();
$i == ($old+1) or die $i;
},
Moose => sub{
my $old = $i;
MooseClass->h();
$i == ($old+1) or die $i;
},
Mouse => sub{
my $old = $i;
MouseClass->h();
$i == ($old+1) or die $i;
},
};
|