s,$/,,g, eval #### $|--; print join $", map { $_[$_{$_}] = sub { join $,, map { $_ = (ord) - ( $_[0] ? ($_[0]+4+$=)*$= : $= ); $_ += (2+$=)*2 while $_ < (1<<$.)-2-3*$=; chr } split $,, pop } -> ($_{$_}, $_) } map { $_{$_} = $a++; $.++; $_ } map { y; ;;d; $= /= 1.5; $.++; $_ } sub { split $/, join q,,, ; unshift @_, map { $. = y---c - $|--; $_ } shift; { undef @;; map @{[ push @{ $;[ ord((/.{$.}(.)/)[$|]) ] }, $_ ]},@_; @_ = map @$_, @;; $.-- && redo } @_[$|--..$^F+$|] } -> () #### $|--; #### split "\n", join '', ; #### unshift @_, map { $. = (length) - $|--; $_ } shift; #### { undef @bins; map @{[ push @{ $bins[ ord( (/.{$.}(.)/)[$|] ) ] }, $_ ]}, @_; @_ = map @$_, @bins; $.-- && redo } #### $bins[ ord('l') ] = [ 'uhinbyl' ]; $bins[ ord('v') ] = [ 'zobxiiv' ]; $bins[ 0 ] = [ 'xqsauh', 'zozmib', 'xtbemz', 'ujwq', 'xzaf', 'ufde' ]; #### map { y/ //d; # delete spaces. None of the words have any, so no-op. $= /= 1.5; # $=, initially 60, can only contain integer values. # Since map runs this 4 times for the 4 elements of @_ # $= becomes 60 -> 40 -> 26 -> 17 -> 11 $.++; # The test ($.-- && redo) ended at 0, which means that # $. ended up with the value -1. Here it becomes 3 $_ } #### map { $_{$_} = $a++; # %_ hash becomes # ( ufde=>0, uhinbyl=>1, ujwq=>2, xqsauh=>3 ) $.++; # 4 more increments leaves $. set to 7 $_ } #### map { $_[$_{$_}] = # $_{$_} is the hash value that was # just set to the array index sub { ... } -> ($_{$_}, $_) # hash {$_}, $_ = (value, key) pair } #### $_[0] = sub { ... } -> (0, 'ufde') $_[1] = sub { ... } -> (1, 'uhinbyl') $_[2] = sub { ... } -> (2, 'ujwq') $_[3] = sub { ... } -> (3, 'xqsauh') #### join '', map { $_ = (ord) - 11 * ( $_[0] ? ($_[0]+15) : 1 ); $_ += 26 while $_ < 93; chr }