Commit | Line | Data |
3fac36be |
1 | #!perl -w |
2 | use strict; |
3 | use Benchmark qw(:all); |
4 | |
5 | use Config; |
6 | |
7 | use Moose (); |
8 | use Mouse (); |
9 | use Class::Method::Modifiers (); |
10 | |
11 | printf "Perl %vd on $Config{archname}\n", $^V; |
12 | my @mods = qw(Moose Mouse Class::Method::Modifiers); |
13 | |
14 | if(eval{ require Class::Method::Modifiers::Fast }){ |
15 | push @mods, 'Class::Method::Modifiers::Fast'; |
16 | } |
17 | |
18 | foreach my $class(@mods){ |
19 | print "$class ", $class->VERSION, "\n"; |
20 | } |
21 | print "\n"; |
22 | |
23 | { |
24 | package Base; |
25 | sub f{ 42 } |
26 | sub g{ 42 } |
27 | sub h{ 42 } |
28 | } |
29 | |
30 | my $i = 0; |
31 | sub around{ |
32 | my $next = shift; |
33 | $i++; |
34 | goto &{$next}; |
35 | } |
36 | { |
37 | package CMM; |
38 | use parent -norequire => qw(Base); |
39 | use Class::Method::Modifiers; |
40 | |
41 | before f => sub{ $i++ }; |
42 | around g => \&main::around; |
43 | after h => sub{ $i++ }; |
44 | } |
45 | { |
46 | package MooseClass; |
47 | use parent -norequire => qw(Base); |
48 | use Moose; |
49 | |
50 | before f => sub{ $i++ }; |
51 | around g => \&main::around; |
52 | after h => sub{ $i++ }; |
53 | } |
54 | { |
55 | package MouseClass; |
56 | use parent -norequire => qw(Base); |
57 | use Moose; |
58 | |
59 | before f => sub{ $i++ }; |
60 | around g => \&main::around; |
61 | after h => sub{ $i++ }; |
62 | } |
63 | |
64 | print "Calling methods with before modifiers:\n"; |
65 | cmpthese -1 => { |
66 | CMM => sub{ |
67 | my $old = $i; |
68 | CMM->f(); |
69 | $i == ($old+1) or die $i; |
70 | }, |
71 | Moose => sub{ |
72 | my $old = $i; |
73 | MooseClass->f(); |
74 | $i == ($old+1) or die $i; |
75 | }, |
76 | Mouse => sub{ |
77 | my $old = $i; |
78 | MouseClass->f(); |
79 | $i == ($old+1) or die $i; |
80 | }, |
81 | }; |
82 | |
83 | print "\n", "Calling methods with around modifiers:\n"; |
84 | cmpthese -1 => { |
85 | CMM => sub{ |
86 | my $old = $i; |
87 | CMM->g(); |
88 | $i == ($old+1) or die $i; |
89 | }, |
90 | Moose => sub{ |
91 | my $old = $i; |
92 | MooseClass->g(); |
93 | $i == ($old+1) or die $i; |
94 | }, |
95 | Mouse => sub{ |
96 | my $old = $i; |
97 | MouseClass->g(); |
98 | $i == ($old+1) or die $i; |
99 | }, |
100 | }; |
101 | |
102 | print "\n", "Calling methods with after modifiers:\n"; |
103 | cmpthese -1 => { |
104 | CMM => sub{ |
105 | my $old = $i; |
106 | CMM->h(); |
107 | $i == ($old+1) or die $i; |
108 | }, |
109 | Moose => sub{ |
110 | my $old = $i; |
111 | MooseClass->h(); |
112 | $i == ($old+1) or die $i; |
113 | }, |
114 | Mouse => sub{ |
115 | my $old = $i; |
116 | MouseClass->h(); |
117 | $i == ($old+1) or die $i; |
118 | }, |
119 | }; |