File Coverage

blib/lib/Object/Sub.pm
Criterion Covered Total %
statement 22 22 100.0
branch 4 6 66.6
condition 2 2 100.0
subroutine 7 8 87.5
pod 0 1 0.0
total 35 39 89.7


line stmt bran cond sub pod time code
1             package Object::Sub;
2              
3 1     1   26261 use strict;
  1         2  
  1         140  
4              
5             our $VERSION = '0.103';
6              
7             our $AUTOLOAD;
8              
9             use overload fallback => 1,
10             '&{}' => sub {
11 3     3   18 my $self_ref = \$_[0];
12              
13             return sub {
14 3     3   12 return $$self_ref->{cb}->($$self_ref, undef, @_);
15 3         14 };
16 1     1   1481 };
  1         1335  
  1         13  
17              
18             sub AUTOLOAD {
19 6 50   6   2269 die "$_[0] is not an object" if !ref $_[0];
20              
21 6         7 my $name = $AUTOLOAD;
22 6         30 $name =~ s/.*://;
23              
24 6         53 return $_[0]->{cb}->($_[0], $name, @_[1 .. $#_]);
25             }
26              
27             sub new {
28 6     6 0 7240 my ($class, $cb) = @_;
29              
30 6 100       23 if (ref $cb eq 'HASH') {
31 1         2 my $orig_cb = $cb;
32             $cb = sub {
33 3   100 3   21 ($orig_cb->{$_[1]} || die "unable to find method $_[1]")->($_[0], @_[2 .. $#_]);
34 1         5 };
35             }
36              
37 6 50       12 die "need a callback" if ref $cb ne 'CODE';
38              
39 6         13 my $self = { cb => $cb, };
40 6         7 bless $self, $class;
41              
42 6         13 return $self;
43             }
44              
45             ## Prevent DESTROY method from being handled by AUTOLOAD
46              
47       0     sub DESTROY {
48             }
49              
50              
51             1;
52              
53              
54              
55             __END__