package Acme::The_Shining; $VERSION = '0.01'; my $template = "\nall work and no play makes jack a dull boy."; my $buff = reverse $template; sub encode { while ($_[0] =~ m/(.)/sg) { foreach my $bit (split //, sprintf "%08b", ord($1)) { while(1){($char = get_char()) !~ /[a-z]/ or last; $rts .= $char;} $rts .= $bit ? uc($char) : $char; } }$rts } sub decode { while ($_[0] =~ m/(.)/sg) { my $char = $1; next if $char !~ m/[a-z]/i; $bin .= $char eq uc $char ? 1 : 0;if (length($bin) == 8 ) { $rts .= chr(to_dec($bin)); $bin = ""; } }$rts } sub get_char {$buff=length($buff)<2 ? $buff. reverse$template:$buff;chop $buff} sub to_dec { return unpack("N", pack("B32", substr("0" x 32 . shift, -32))) } sub is_shiny { $_[0] =~ m/^[abcdejklmnoprsuwy. \n]*$/si }; open 0 or print "Can't repolish '$0'\n" and exit; my $pgm = join "", <0>; my ($head,$code) = ($pgm =~ m/(.*^\s*use\s+Acme::The_Shining\s*;\n)(.*)/sm); exit eval($head . "\n" . decode($code)) if is_shiny($code); open 0, ">$0" or print "Can't polish '$0'\n" and exit; print {0} $head, encode($code) and exit;