$c=join':',qw/42 t 83 s 0 65 78 n s 72 d 82 0 O d 82 k 0 g 65 67 j 69 82 1 ;""tnirp/; while($c) { $d=@{[split//,$n]}; # Two different logic branches, depending upon the length # of $n (the result), which starts as length 0 if ($d<8) # Pop characters off the end (in reverse order) and # place onto $n { $n .= chop $c ; } else # read $c from the beginning, adding ASCII 32 to numbers # or shifting up one letter for non-numbers and place # onto $b { $b .= ($e=${[split/:/,$c]}[0]) =~ /^\d+/ ? chr $e+32: ++$e; } # If $b is non-NULL (ie, we have parsed the last eight # characters off of $c into $n) Shift off the first number # or character from $c, otherwise don't touch it $c = ($b && $c =~ /(\d+|\w):(.*)$/x) ? $2 : $c; # If $c is NULL (ie, we've processed the input string), # wedge $b plus an OS-specific linefeed between the # quotes, otherwise leave $n alone $n = (!$c && $n =~ /(.+")(".)/) ? $1.$b.$/.$2 : $n } eval $n