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__ |