#!/usr/bin/perl -w use strict; use Getopt::Std; use vars qw/ $opt_h /; $|++; getopts("h"); my @letters = ( 'a' .. 'z' ); &fisher_yates_shuffle(\@letters); my %caeser = map { $_ => shift @letters } 'a' .. 'z'; my %used; while ( $_ = <> ) { tr/A-Z/a-z/; s/(.)/exists $caeser{$1} && ++$used{$1} && $caeser{$1} || $1/eg; print; } if ( $opt_h ) { my @used = keys %used; &fisher_yates_shuffle(\@used); my($hint)= shift @used; print "\nHint: ",$caeser{$hint},"=$hint\n"; } sub fisher_yates_shuffle { my $array = shift; my $i; for ($i = @$array; --$i; ) { my $j = int rand ($i+1); next if $i == $j; @$array[$i,$j] = @$array[$j,$i]; } }