use strict; my %p2C; my %C2p; key ('thequickbrownfoxjumpsoverthelazydogs',10); printKeys(\%p2C); printKeys(\%C2p); sub printKeys { my $href = shift; print "\nCT: "; print(($_).' ') foreach (sort keys %{$href}); print "\npt: "; print(($$href{$_}).' ') foreach (sort keys %{$href}); print "\n"; } sub key { my @kp = grep /[a-z]/, split //, shift; my $caesar= shift; my @alpha = ('A'..'Z'); push @alpha, shift @alpha for (1..$caesar); foreach (@kp,'a'..'z') { if (not exists $p2C{$_}) { my $k = shift @alpha; $p2C{$_}=$k; $C2p{$k}=$_; } } } #### CT: a b c d e f g h i j k l m n o p q r s t u v w x y z pt: F S Q I M X J L P Z R E A W U B N T C K O D V Y H G CT: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z pt: m p s v l a z y d g t h e q u i c k b r o w n f x j