sub key {
$kp= shift;
$caesar= shift;
#version 1 - this works, the starting point
foreach (split(//, $kp),'a'..'z') {
if (not exists $p2C{$_}) {
$p2C{$_}=chr(ord('A')+(($a++)+$caesar)%26);
}
}
%C2p = map {$p2C{$_} => $_} (keys %p2C);
$p2C{' '}=' ';
$C2p{' '}=' ';
}
sub printKeys {
my $href = shift;
print "\nCT: ";
print(($_).' ') foreach (sort keys %{$href});
print "\npt: ";
print(($$href{$_}).' ') foreach (sort keys %{$href});
print "\n";
}
key ('thequickbrownfoxjumpsoverthelazydogs',10);
printKeys(\%p2C);
printKeys(\%C2p);
####
C:\chas_sandbox>foreachasmap.pl
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
C:\chas_sandbox>
####
sub key {
$kp= shift;
$caesar= shift;
#version 1 - this works, the starting point
# foreach (split(//, $kp),'a'..'z') {
# if (not exists $p2C{$_}) {
# $p2C{$_}=chr(ord('A')+(($a++)+$caesar)%26);
# }
# }
#version 2 - this doesn't work - because autoincrement $a++ gets off when the key already exists!
foreach (split(//, $kp),'a'..'z') {
$p2C{( exists $p2C{$_} ? '#' : $_)} = chr(ord('A')+(($a++)+$caesar)%26);
}
%C2p = map {$p2C{$_} => $_} (keys %p2C);
$p2C{' '}=' ';
$C2p{' '}=' ';
}
sub printKeys {
my $href = shift;
print "\nCT: ";
print(($_).' ') foreach (sort keys %{$href});
print "\npt: ";
print(($$href{$_}).' ') foreach (sort keys %{$href});
print "\n";
}
key ('thequickbrownfoxjumpsoverthelazydogs',10);
printKeys(\%p2C);
printKeys(\%C2p);
####
C:\chas_sandbox>foreachasmap.pl
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: T N S Q Q M X S L P A R M C W U D N T E K O G V Z P O
CT: A C D E G K L M N O P Q R S T U V W X Z
pt: j m p s v t h l q z i c k b # o w n f x
####
%hash = map { getkey($_) => $_ } @array;
####
%hash = ();
foreach $_ (@array) {
$hash{getkey($_)} = $_;
}
####
sub key {
$kp= shift;
$caesar= shift;
#version 2 - this doesn't work - because autoincrement $a++ gets off when the key already exists!
# foreach (split(//, $kp),'a'..'z') {
# $p2C{( exists $p2C{$_} ? '#' : $_)} = chr(ord('A')+(($a++)+$caesar)%26);
# }
#version 3 - this doesn't work - why?
%p2C = map {( exists $p2C{$_} ? '#' : $_ )=> chr(ord('A')+(($a++)+$caesar)%26) } (split(//, $kp),'a'..'z');
%C2p = map {$p2C{$_} => $_} (keys %p2C);
$p2C{' '}=' ';
$C2p{' '}=' ';
}
sub printKeys {
my $href = shift;
print "\nCT: ";
print(($_).' ') foreach (sort keys %{$href});
print "\npt: ";
print(($$href{$_}).' ') foreach (sort keys %{$href});
print "\n";
}
key ('thequickbrownfoxjumpsoverthelazydogs',10);
printKeys(\%p2C);
printKeys(\%C2p);
####
C:\chas_sandbox>foreachasmap.pl
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: U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
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: g h i j k l m n o p q r s t u v w x y z a b c d e f
C:\chas_sandbox>