File: modifiers.pl

package info (click to toggle)
libmouse-perl 2.5.11-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 2,160 kB
  • sloc: perl: 14,614; ansic: 218; makefile: 8
file content (115 lines) | stat: -rw-r--r-- 2,137 bytes parent folder | download | duplicates (6)
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;
    },
};