Commit | Line | Data |
ce2ee568 |
1 | package Squirrel::Role; |
ce2ee568 |
2 | use strict; |
3 | use warnings; |
4 | |
5 | sub _choose_backend { |
6 | if ( $INC{"Moose/Role.pm"} ) { |
7 | return { |
8 | import => \&Moose::Role::import, |
ddd4992c |
9 | unimport => defined &Moose::Role::unimport ? \&Moose::Role::unimport : sub {}, |
ce2ee568 |
10 | } |
11 | } else { |
12 | require Mouse::Role; |
13 | return { |
14 | import => \&Mouse::Role::import, |
15 | unimport => \&Mouse::Role::unimport, |
16 | } |
17 | } |
18 | } |
19 | |
20 | my %pkgs; |
21 | |
22 | sub _handlers { |
23 | my $class = shift; |
24 | |
25 | my $caller = caller(1); |
26 | |
27 | $pkgs{$caller} = $class->_choose_backend |
28 | unless $pkgs{$caller}; |
29 | } |
30 | |
31 | sub import { |
32 | goto $_[0]->_handlers->{import}; |
33 | } |
34 | |
35 | sub unimport { |
36 | goto $_[0]->_handlers->{unimport}; |
37 | } |
38 | |
39 | 1; |
40 | |