File Coverage

blib/lib/Sereal/Path.pm
Criterion Covered Total %
statement 34 34 100.0
branch 2 2 100.0
condition n/a
subroutine 10 10 100.0
pod 0 3 0.0
total 46 49 93.8


line stmt bran cond sub pod time code
1             package Sereal::Path;
2 6     6   2132 use 5.008;
  6         23  
3 6     6   32 use strict;
  6         10  
  6         123  
4 6     6   27 use warnings;
  6         10  
  6         153  
5 6     6   32 use Carp qw/croak/;
  6         12  
  6         344  
6 6     6   94 use XSLoader;
  6         21  
  6         128  
7 6     6   1692 use Sereal::Path::Iterator;
  6         16  
  6         2284  
8              
9             our $VERSION = '4.002';
10             our $XS_VERSION = $VERSION; $VERSION= eval $VERSION;
11              
12             XSLoader::load(__PACKAGE__, $XS_VERSION);
13              
14             sub _normalize {
15 60     60   87 my ($self, $x) = @_;
16             #$x =~ s/[\['](\??\(.*?\))[\]']/_callback_01($self,$1)/eg;
17 60         359 $x =~ s/'?\.'?|\['?/;/g;
18 60         130 $x =~ s/;;;|;;/;..;/g;
19 60         199 $x =~ s/;\$|'?\]|'$//g;
20             #$x =~ s/#([0-9]+)/_callback_02($self,$1)/eg;
21             #$self->{'result'} = []; # result array was temporarily used as a buffer
22 60         124 return $x;
23             }
24              
25             sub traverse {
26 60     60 0 84 my ($self, $query) = @_;
27 60         105 my $norm = $self->_normalize($query);
28 60         199 $norm =~ s/^\$;//;
29 60         155 my @expr = split(/;/, $norm);
30 60         596 $self->_traverse(\@expr, '$');
31 60         185 return $self->results;
32             }
33              
34             sub value {
35 4     4 0 114 my ($self, $query) = @_;
36 4         9 my $values = $self->traverse($query);
37 4         31 return $values->[0];
38             }
39              
40             sub values {
41 56     56 0 45314 my ($self, $query) = @_;
42 56         113 my $values = $self->traverse($query);
43 56 100       207 return wantarray ? @$values : scalar @$values;
44             }
45              
46             1;
47              
48             __END__