File Coverage

File:blib/lib/Acme/Python.pm
Coverage:66.7%

linestmtbrancondsubtimecode
1package Acme::Python;
2
3$VERSION = 0.01;
4
5my $signed = "Hisssssssssssssssss";
6
7sub encode {
8
0
0
        local $_ = unpack "b*", pop;
9
0
0
0
0
        $_ = join ' ', map{ (/1/?'H':'h').'is'.('s' x length); } m/(0+|1+)/g;
10
0
0
        s/(.{40,}?\s)/$1\n/g;
11
0
0
        "$signed\n$_"
12}
13sub decode {
14
1
31
        local $_ = pop;
15
1
6065
        s/(^$signed|\s)//g;
16
1
4494
20
51004
        s/([hH])is(s+)/ ($1 eq 'H'?'1':'0')x(length $2); /ge;
17
1
3
        pack "b*", $_
18}
19sub garbled {
20
1
10
        $_[0] =~ /\S/
21}
22sub signed {
23
1
33
        $_[0] =~ /^$signed/
24}
25
26open 0 or print "Can't execute '$0'\n" and exit;
27
28(my $program = join "", <0>) =~ s/.*^\s*use\s+Acme::Python\s*;\n//sm;
29
30local $SIG{__WARN__} = \&garbled;
31
32do {
33
1
1
1
10
3
14
        eval decode $program;
34        exit
35} unless garbled $program && not signed $program;
36
37
38open 0, ">$0" or print "Can't python-ise '$0'\n" and exit;
39
40print {0} "use Acme::Python;\n", encode $program and exit;
41