File Coverage

blib/lib/Acme/DotDotGone.pm
Criterion Covered Total %
statement 40 40 100.0
branch 14 16 87.5
condition 0 3 0.0
subroutine 9 9 100.0
pod n/a
total 63 68 92.6


line stmt bran cond sub pod time code
1             package Acme::DotDotGone;
2              
3 4     4   89700 use 5.006;
  4         13  
4 4     4   38 use strict;
  4         9  
  4         118  
5 4     4   16 use warnings;
  4         20  
  4         1160  
6              
7             our $VERSION = '1.01';
8              
9             our %dots;
10             BEGIN {
11             %dots = (
12             toDots => sub {
13 1         64 join ' ', map { $dots{$_}() } split '', unpack "b*", shift;
  384         502  
14             },
15             fromDots => sub {
16 2         208 pack "b*", join '', map { $dots{$_}() } split ' ', shift;
  768         1086  
17             },
18 426         922 '.' => sub { 0 },
19 342         468 '..' => sub { 1 },
20 213         311 0 => sub { '.' },
21 171         220 1 => sub { '..' },
22 3         2603 stderr => sub { print @_ }
23 4     4   175 );
24 4         2192 close STDERR; # *\o/*
25             }
26              
27             sub import {
28 4     4   204 open FH, "<$0";
29              
30 4 100       203 my $reg = $_[1]
31             ? qr/(.*)\1^\s*use\s+Acme::DotDotGone\s+($_[1]);\n/
32             : qr/.*^\s*use\s+Acme::DotDotGone;\n/;
33              
34 4         122 ($_[2] = (join '', )) =~ s/$reg//sm;
35 4 50       31 $_[2] = $1 . $_[2] if $1;
36              
37 4         49 close FH;
38              
39             ($_[2], $_[3], $_[4]) = (($2)
40             ? ($2 eq 'dot')
41             ? sub {
42 1     1   3 $_[1] = $dots{toDots}($_[0]);
43 1         18 $_[0], $_[1], $_[1];
44             }
45             : sub {
46 1     1   4 $_[1] = $dots{fromDots}($_[0]);
47 1         37 $_[1], $_[0], $_[1];
48             }
49             : ($_[2] =~ m/[a-zA-Z]/)
50             ? sub {
51             undef
52 1     1   3 }
53             : sub {
54 1     1   3 $_[1] = $dots{fromDots}($_[0]);
55 1         31 $_[1], $_[0];
56             }
57 4 100       46 )->($_[2]);
    100          
    100          
58              
59 4 100       25 if ($_[4]) {
60 2 50 0     264 open FH, ">$0" or print "Cannot encode. '$0'\n" and exit;
61 2         69 print FH "use Acme::DotDotGone;\n";
62 2         7 print FH $_[4];
63 2         516 close FH;
64             }
65              
66 4 100       58 do { eval "$_[2]"; $dots{stderr}($@); } if $_[2];
  3         315  
  3         17  
67             }
68              
69             1;
70              
71             __END__