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   2103 use 5.008;
  6         20  
3 6     6   29 use strict;
  6         11  
  6         117  
4 6     6   26 use warnings;
  6         11  
  6         160  
5 6     6   27 use Carp qw/croak/;
  6         22  
  6         347  
6 6     6   47 use XSLoader;
  6         30  
  6         125  
7 6     6   1705 use Sereal::Path::Iterator;
  6         50  
  6         2231  
8              
9             our $VERSION = '4.003';
10             our $XS_VERSION = $VERSION; $VERSION= eval $VERSION;
11              
12             XSLoader::load(__PACKAGE__, $XS_VERSION);
13              
14             sub _normalize {
15 60     60   89 my ($self, $x) = @_;
16             #$x =~ s/[\['](\??\(.*?\))[\]']/_callback_01($self,$1)/eg;
17 60         372 $x =~ s/'?\.'?|\['?/;/g;
18 60         129 $x =~ s/;;;|;;/;..;/g;
19 60         190 $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         126 return $x;
23             }
24              
25             sub traverse {
26 60     60 0 86 my ($self, $query) = @_;
27 60         101 my $norm = $self->_normalize($query);
28 60         199 $norm =~ s/^\$;//;
29 60         158 my @expr = split(/;/, $norm);
30 60         609 $self->_traverse(\@expr, '$');
31 60         191 return $self->results;
32             }
33              
34             sub value {
35 4     4 0 112 my ($self, $query) = @_;
36 4         12 my $values = $self->traverse($query);
37 4         23 return $values->[0];
38             }
39              
40             sub values {
41 56     56 0 44557 my ($self, $query) = @_;
42 56         106 my $values = $self->traverse($query);
43 56 100       205 return wantarray ? @$values : scalar @$values;
44             }
45              
46             1;
47              
48             __END__