In my crypto hobby we create Ciphertext to plaintext alphabets. I've written the below to feature the key subroutine. I'm wondering if the foreach loops can be adapted to map functions or whether the if (not exists . . . invalidates map for use in this case.
#!/usr/bin/perl -w use strict; use warnings; my %p2C; my %C2p; sub key { my $kp= shift; my $caesar= shift; my $a=0; my $k; $p2C{' '}=' '; $C2p{' '}=' '; foreach (split(//, $kp)) { if (not exists $p2C{$_}) { #print $_; $k=chr(ord('A')+(($a++)+$caesar)%26); $p2C{$_}=$k; $C2p{$k}=$_; } } foreach ('a'..'z') { if (not exists $p2C{$_}) { $k=chr(ord('A')+(($a++)+$caesar)%26); $p2C{$_}=$k; $C2p{$k}=$_; } } } 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); print "----------------------------------------------------------\n"; undef %p2C; undef %C2p; key ('thequickbrown',10); printKeys(\%p2C); printKeys(\%C2p);
produces the following:
C:\chas_sandbox>keyonly.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 ---------------------------------------------------------- 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: X S Q Y M Z A L P B R C D W U E N T F K O G V H I J 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 j l m p s v x y z t h e q u i c k b r o w n a d f C:\chas_sandbox>
In reply to adapting foreach to map by goibhniu
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |