File Coverage

lib/accessors/fast/tie.pm
Criterion Covered Total %
statement 35 48 72.9
branch 3 6 50.0
condition 1 3 33.3
subroutine 11 16 68.7
pod 0 1 0.0
total 50 74 67.5


line stmt bran cond sub pod time code
1             package # no pause
2             accessors::fast::tie;
3              
4 2     2   2079 use strict;
  2         5  
  2         94  
5 2     2   15 use Carp ();
  2         4  
  2         35  
6 2     2   14 use accessors::fast ();
  2         3  
  2         178  
7             our $VERSION = $accessors::fast::VERSION;
8             use constant::def {
9 2         23 DEBUG => accessors::fast::DEBUG || 0,
10             CONFESS => accessors::fast::CONFESS || 0,
11 2     2   12 };
  2         39  
12              
13             BEGIN {
14 2     2   2196 *croak = CONFESS ? sub (@) { goto &Carp::confess } : sub (@) { goto &Carp::croak };
  0     0   0  
15             }
16              
17             sub TIEHASH {
18 5     5   11 my ($pkg,$cls,$fld) = @_;
19 19         75 return bless {
20             o => {},
21             k => [],
22             f => {
23 5         12 (map { $_ => 1 } @$fld),
24             },
25             class => $cls,
26             },$pkg;
27             }
28              
29             sub check {
30 38     38 0 52 my ($self,$f) = @_;
31 38         45 my $clr = caller(1);
32 38 50 33     156 return if $clr eq 'accessors::fast'
33             or $clr eq 'Data::Dumper';
34 38         63 my $ft = $self->{f}->{$f};
35 38 50       80 croak "Class $self->{class} have no field $f" unless $ft;
36             }
37              
38             sub FETCH {
39 0     0   0 warn "fetch `$_[1]'\n" if DEBUG;
40 0         0
41 0         0 $_[0]->{o}->{$_[1]};
42             }
43             sub STORE {
44 19     19   84 warn "store `$_[1]'\n" if DEBUG;
45 19         30
46 19         149 $_[0]->{o}->{$_[1]} = $_[2];
47             }
48             sub DELETE {
49 19     19   117 warn "delete $_[1]\n" if DEBUG;
50 19         30
51 19         70 delete $_[0]->{o}->{$_[1]};
52             }
53             sub CLEAR {
54 0     0   0 warn "clear\n" if DEBUG;
55 0         0 %{$_[0]->{o}} = ();
  0         0  
56             }
57             sub EXISTS {
58 19     19   108 warn "exists $_[1]\n" if DEBUG;
59 19 50       48 return unless exists $_[0]->{f}->{$_[1]};
60 19         60 exists $_[0]->{o}->{$_[1]};
61             }
62             #sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} }
63             #sub NEXTKEY { each %{$_[0]} }
64              
65             sub FIRSTKEY {
66 5     5   113 warn "firstkey\n" if DEBUG;
67 5         19 local $a = scalar keys %{$_[0]->{o}};
  5         17  
68 5         8 each %{$_[0]->{o}};
  5         21  
69             }
70             sub NEXTKEY {
71 0     0     warn "nextkey\n" if DEBUG;
72 0           each %{$_[0]->{o}};
  0            
73             }
74             sub SCALAR {
75 0     0     warn "scalar\n" if DEBUG;
76 0           scalar(%{$_[0]->{o}})
  0            
77             }
78              
79             1;