File Coverage

blib/lib/Attribute/Method.pm
Criterion Covered Total %
statement 67 67 100.0
branch 4 4 100.0
condition 2 3 66.6
subroutine 19 19 100.0
pod 0 1 0.0
total 92 94 97.8


line stmt bran cond sub pod time code
1             package Attribute::Method;
2              
3 5     5   38986 use warnings;
  5         9  
  5         157  
4 5     5   27 use strict;
  5         10  
  5         428  
5 5     5   1391 use Attribute::Handlers;
  5         8127  
  5         75  
6 5     5   140 use B::Deparse;
  5         8  
  5         1082  
7              
8             our $VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /(\d+)/g;
9              
10             my $dp = Attribute::Method::_Deparse->new('-l');
11             my $dppack;
12             my %sigil2ref = (
13             '$' => \undef,
14             '@' => [],
15             '%' => {},
16             );
17              
18             sub import {
19 3     3   6084 my ( $class, @vars ) = @_;
20 3         7 my $pkg = caller();
21 3         9 push @vars, '$self';
22 3         8 for my $var (@vars) {
23 5         18 my $sigil = substr( $var, 0, 1, '' );
24 5     5   32 no strict 'refs';
  5         11  
  5         1001  
25 5         8 *{ $pkg . '::' . $var } = $sigil2ref{$sigil};
  5         162  
26             }
27             }
28              
29             sub UNIVERSAL::Method : ATTR(RAWDATA) {
30 4     4 0 2743 my ( $pkg, $sym, $ref, undef, $args ) = @_;
31 4         9 $dppack = $pkg;
32 4         10342 my $src = $dp->coderef2text($ref);
33 4 100       17 if ($args) {
34 1         108 $src =~ s/\{/{\nmy \$self = shift; my ($args) = \@_;\n/;
35             }
36             else {
37 3         17 $src =~ s/\{/{\nmy \$self = shift;\n/;
38             }
39 5     5   31 no warnings 'redefine';
  5         9  
  5         518  
40 4         7 my $sub_name = *{$sym}{NAME};
  4         18  
41 4     2   516 eval qq{ package $pkg; sub $sub_name $src };
  1     1   9  
  2     2   643  
  2     1   43  
  1     1   7  
  1     1   3  
  1     1   152  
  1     1   6  
  1         2  
  1         34  
  1         5  
  1         2  
  1         57  
  1         6  
  1         2  
  1         39  
  1         5  
  1         2  
  1         39  
  1         10  
  1         2  
  1         25  
  1         4  
  1         3  
  1         48  
42 5     5   31 }
  5         17  
  5         41  
43              
44             package
45             Attribute::Method::_Deparse;
46              
47 5     5   2746 BEGIN { our @ISA = 'B::Deparse' }
48              
49             sub maybe_qualify {
50 9     9   1117 my $ret = SUPER::maybe_qualify{@_};
  7         1318  
51 8         912 my ($pack,$name) = $ret =~ /(.*)::(.+)/;
52 7 100 66     865 length $pack && $pack eq $dppack and return $name;
53 2         531 $ret;
54             }
55              
56             "Rosebud"; # for MARCEL's sake, not 1 -- dankogai
57              
58             __END__