#!/usr/bin/perl -wire # sets -w, which only tries to slightly obfuscate that i'm using -i ( $^I) to # hold "re". a later version of this, i added a comment below this line that # read "# Just another Bird onawire", hoping that an observant deobfuscator # would notice that that phrase contained most of "Just another Perl hacker,", # had the right capitalization, and the correct number of characters, and lead # the deobfuscator to believe that the comment might be used to generate the # phrase. # set $/ to 'J' to create the capital J. $/ = "J"; # set $\ (output record separator, saves from having to print it) to ',' for # the end of the japh. $\ = ","; # some basic character -> ord -> math -> character machinations. # this puts the string "kcahtona" into $r - those bits give "anoth" and "hack" # when reversed and substr'd out. $r = join "", map { $_ += 57; chr } map { ord } split //, "2*(/;65("; # t holds a list of single character symbols in the symbol table. @t = sort map { if( m/^\w$/m ){ $_ } } keys %{ *:: } ; # sub u returns a single space. sub u { $" } # sub s returns "re" . "htona" = "another" reversed. sub s { $^I . substr $r, 3, 5 } # sub j returns "l" . "re" . "P" = "Perl" reversed. i've learned that the # symbol table gets populated in a reliable manner (at least reliable enough # for the purposes of this JAPH) to be able to count on the position in a sorted # list of single character symbol table entries. sub j { $t[-5] . $^I . $t[-8] } # sub P returns "re" . "kcah" = "hacker" reversed. sub P { $^I . substr $r, 0, 4 } # sub l returns "t" . "s" . "u" . "J" = "Just" reversed. sub l { $t[-2] . $t[-3] . $t[-1]. $/ } print map { # this just adds a space (via sub u) after every word-returning # subroutine unless it matches /ack/. if( m/ack/ ){ $_ } else { $_ .= &u } } # calls the subroutines in order, reversing the letters in each word. map { scalar reverse } ( l, &s, &j, &P);