File Coverage

blib/lib/Syntax/Feature/KeysOnArray.pm
Criterion Covered Total %
statement 21 30 70.0
branch 1 6 16.6
condition 0 3 0.0
subroutine 7 8 87.5
pod 0 2 0.0
total 29 49 59.1


line stmt bran cond sub pod time code
1             package Syntax::Feature::KeysOnArray; # so as not to confuse dzil?
2             our $VERSION = '0.04'; # VERSION
3 1     1   58023 use strict;
  1         2  
  1         36  
4 1     1   7 use warnings;
  1         3  
  1         30  
5 1     1   535 use Syntax::Feature::EachOnArray ();
  1         3  
  1         20  
6 1     1   5 use Carp;
  1         2  
  1         60  
7 1     1   5 use Scalar::Util qw(reftype);
  1         2  
  1         183  
8              
9             package Tie::ArrayAsHash;
10              
11             sub akeys (\[@%]) {
12 0     0 0 0 my $thing = shift;
13 0 0       0 return keys %$thing
14             if reftype $thing eq 'HASH';
15 0 0       0 confess "should be passed a HASH or ARRAY"
16             unless reftype $thing eq 'ARRAY';
17              
18 0   0     0 my $thing_h = $Tie::ArrayAsHash::cache{$thing} ||= do {
19 0         0 tie my %h, __PACKAGE__, $thing;
20 0         0 \%h
21             };
22              
23 0         0 keys %$thing_h;
24             }
25              
26             package Syntax::Feature::KeysOnArray;
27              
28             sub install {
29 1     1 0 11 my $class = shift;
30 1         6 my %args = @_;
31              
32 1 50       24 return unless $^V lt 5.12.0;
33 1     1   10 no strict 'refs';
  1         1  
  1         155  
34 0           *{"$args{into}::keys"} = \&Tie::ArrayAsHash::akeys;
  0            
35             }
36              
37             # XXX on uninstall, delete symbol
38              
39             1;
40             # ABSTRACT: Emulate keys(@array) on Perl < 5.12
41              
42              
43             __END__