in reply to adapting foreach to map

A map will not help much here, since you don't need the array that it would return. However, I did notice that the code inside your two foreach loops is identical, suggesting that they should be combined as below. In addition, rather than calculate the uppercase ciphertext letters on the fly, I loaded up a range of letters, scrolled it around the correct number of times, and then shifted it off as needed. I also weeded out the undesirable spaces and forced lowercase key input in that first line of sub key. Same results, but I think it's easier to understand.

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}=$_; } } }

Prints:

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

Replies are listed 'Best First'.
Re^2: adapting foreach to map
by goibhniu (Hermit) on Aug 17, 2007 at 14:22 UTC

    Wonderful. That actually was bothering me, but I knew the inputs to the loops were different and hadn't worked out that I could just concatenate as two lists into one list.

    Thanks alot.


    I humbly seek wisdom.