File Coverage

lib/Sub/Quotelike.pm
Criterion Covered Total %
statement 12 12 100.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 16 16 100.0


line stmt bran cond sub pod time code
1             package Sub::Quotelike;
2              
3 2     2   1266 use strict;
  2         3  
  2         55  
4 2     2   9 use warnings;
  2         2  
  2         43  
5 2     2   2766 use Filter::Simple;
  2         65452  
  2         14  
6 2     2   100 use Text::Balanced qw/extract_quotelike/;
  2         3  
  2         848  
7              
8             our $VERSION = 0.03;
9             our %qq_subs = ();
10              
11             FILTER {
12             while (s/(\bsub\s+(\w+)\s*)\((["'])\3?\)/$1(\$)/) {
13             if (exists $qq_subs{$2} && $qq_subs{$2} ne $3) {
14             die "Prototype mismatch: $2 ($3) vs $2 ($qq_subs{$2})";
15             }
16             $qq_subs{$2} = $3;
17             }
18             for my $s (keys %qq_subs) {
19             my $qq = $qq_subs{$s} eq q(") ? 'qq' : 'q';
20             s/\bsub\s+$s\b/sub __qUoTeLiKe_$s/g;
21             s/{\s*(["']?)$s\1\s*}/{__qUoTeLiKe_$s}/g;
22             s/(?)/__qUoTeLiKe_$s($qq/g;
23             while (/__qUoTeLiKe_$s\((?=q)/g) {
24             my $savepos = pos;
25             () = extract_quotelike($_);
26             s/\G/)/;
27             pos() = $savepos;
28             }
29             }
30             s/__qUoTeLiKe_//g;
31             };
32              
33             1;
34              
35             __END__