File Coverage

blib/lib/Set/Select.pm
Criterion Covered Total %
statement 30 30 100.0
branch 1 2 50.0
condition 6 6 100.0
subroutine 6 6 100.0
pod 3 3 100.0
total 46 47 97.8


line stmt bran cond sub pod time code
1             package Set::Select;
2              
3 1     1   67744 use strict;
  1         2  
  1         28  
4 1     1   4 use warnings;
  1         2  
  1         22  
5 1     1   4 use Carp;
  1         2  
  1         375  
6              
7             our $VERSION = '1.01';
8              
9             sub new {
10 5     5 1 106 my $class = shift;
11              
12 5         9 my $self = {};
13 5         18 for my $i (0..$#_) {
14 58 50       129 croak "Arguments must be array references (argument $i is not)" if not ref $_[$i] eq 'ARRAY';
15 58         66 for my $elem (@{$_[$i]}) {
  58         97  
16 2617         3166 my $key = $elem;
17 2617   100     4647 $self->{$key}->[1] //= $elem;
18 2617   100     4132 $self->{$key}->[0] //= '0' x @_;
19 2617         4985 vec($self->{$key}->[0], $i, 8) = 0x31;
20             }
21             }
22 5         42 bless $self, $class;
23             }
24              
25             sub select {
26 19     19 1 7572 my ($self, $bits) = @_;
27 19         85 return [map { $self->{$_}->[1] } grep { $self->{$_}->[0] =~ /^$bits$/ } keys %$self];
  129         216  
  264         1011  
28             }
29              
30             sub all_subsets {
31 4     4 1 2035 my $self = shift;
32 4         6 my %keys;
33 4         12 for my $e (values %$self) {
34 9         10 push @{$keys{$e->[0]}}, $e->[1];
  9         24  
35             }
36 4         33 return \%keys;
37             }
38              
39             1;
40              
41             __END__