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
|
#!perl -w
use strict;
use Benchmark qw(:all);
use FindBin qw($Bin);
use lib $Bin, "$Bin/../example/lib";
use Common;
{
package Base;
sub f{ 42 }
sub g{ 42 }
sub h{ 42 }
}
my $i = 0;
sub around{
my $next = shift;
$i++;
goto &{$next};
}
{
package DUMM;
use parent -norequire => qw(Base);
use Method::Modifiers;
before f => sub{ $i++ };
around g => \&main::around;
after h => sub{ $i++ };
}
{
package CMM;
use parent -norequire => qw(Base);
use Class::Method::Modifiers;
before f => sub{ $i++ };
around g => \&main::around;
after h => sub{ $i++ };
}
{
package MOP;
use parent -norequire => qw(Base);
use Moose;
before f => sub{ $i++ };
around g => \&main::around;
after h => sub{ $i++ };
}
signeture
'Data::Util' => \&Data::Util::modify_subroutine,
'Moose' => \&Moose::around,
'Class::Method::Modifiers' => \&Class::Method::Modifiers::around,
;
print "Calling methods with before modifiers:\n";
cmpthese -1 => {
du => sub{
my $old = $i;
DUMM->f();
$i == ($old+1) or die $i;
},
cmm => sub{
my $old = $i;
CMM->f();
$i == ($old+1) or die $i;
},
moose => sub{
my $old = $i;
MOP->f();
$i == ($old+1) or die $i;
}
};
print "\n", "Calling methods with around modifiers:\n";
cmpthese -1 => {
du => sub{
my $old = $i;
DUMM->g();
$i == ($old+1) or die $i;
},
cmm => sub{
my $old = $i;
CMM->g();
$i == ($old+1) or die $i;
},
moose => sub{
my $old = $i;
MOP->g();
$i == ($old+1) or die $i;
}
};
print "\n", "Calling methods with after modifiers:\n";
cmpthese -1 => {
du => sub{
my $old = $i;
DUMM->h();
$i == ($old+1) or die $i;
},
cmm => sub{
my $old = $i;
CMM->h();
$i == ($old+1) or die $i;
},
moose => sub{
my $old = $i;
MOP->h();
$i == ($old+1) or die $i;
}
};
|