File Coverage

blib/lib/Sub/Lambda/Filter.pm
Criterion Covered Total %
statement 28 28 100.0
branch 6 6 100.0
condition n/a
subroutine 8 8 100.0
pod n/a
total 42 42 100.0


line stmt bran cond sub pod time code
1             package Sub::Lambda::Filter;
2 2     2   30352 use strict;
  2         4  
  2         65  
3 2     2   11 use warnings;
  2         5  
  2         56  
4 2     2   3060 use Filter::Simple;
  2         64847  
  2         16  
5 2     2   1214 use Sub::Lambda::Grammar qw/parse/;
  2         12  
  2         259  
6 2     2   25 use Text::Balanced qw/extract_multiple extract_tagged/;
  2         4  
  2         1332  
7              
8             sub _parens ($) {
9             extract_multiple($_[0],
10 862     862   79168 [ sub { extract_tagged($_[0], qr{[(]}, qr{[)]})}]);
  75     75   509  
11             }
12              
13             sub _compile ($) {
14 83     83   160 my ($t) = @_;
15 83         468 my ($T) = ($t =~ /^\s*[(](.*)[)]\s*$/s);
16              
17 83 100       221 if ($T) {
18 30         141 my $x = parse $t;
19 30 100       391540 return $x if defined($x);
20 22         89 return '(' . (join '', map {_compile($_)} _parens $T) . ')';
  49         2853  
21             } else {
22 53         118 my @p = _parens $t;
23 53 100       4305 return $p[0] unless (@p > 1);
24 2         6 return join '', map { _compile($_) } @p;
  32         87  
25             }
26             }
27              
28              
29             FILTER { $_ = _compile $_ };
30              
31             1;
32              
33             __END__