#!/usr/bin/perl -w $#ARGV + 1 || die "$0 \n"; ($p = shift) =~ s/[^a-zA-Z]//g; @q = map {$_ < 91 ? (91 - $_) % 26 : $_ - 97} unpack 'C*', $p || 'a'; for($b = 26; $b--;) { $d{$_}{$b} = $_ foreach 0..255; for($o = 26; $o--; map {$d{$_ + $o}{$b} = $_ + ($o + $b) % 26} (97, 65)) {} } for($o = 0; <>;) { foreach (unpack 'C*') { ($c = chr($d{$_}{$q[$o]})) =~ /[a-zA-Z]/ && $o++; $o %= $#q + 1; print $c; } }