in reply to Re: Switch statement?
in thread Switch statement?
The reason that your order of keys is different every time is that a hash has no predefined order of keys (due to the mechanics of how hashes work, and due to the fact that Perl randomizes that order some more). So you will maybe want to sort the keys before printing them:
for (sort keys %histogram) { ... };
I find a style issue with your @validchars usage - normally, if you want to quickly check whether something is contained in a list in Perl, you use a hash:
my %validchars = map { $_ => uc $_ } (qw( A B C D E F ... Z a b c d .. +. z )); # this sets # $validchars{A} = A # ... # $validchars{Z} = Z # $validchars{a} = A # ... # and the later: if (exists $validchars{$_}) { my $target = $validchars{$_}; $histogram{$target}++ };
For your different switches, you should simply initialize %validchars to different values instead of rechecking your switch values every time. This will clean up your inner loop as the program behaviour is centralized.
my %validchars; if ( $arg eq '-a' ) { %validchars = map { $_ => uc $_ } ( \x00 .. \xff ); } elsif ( $arg eq '-c' ) { %validchars = map { $_ => $_ } ( 'A' .. 'Z', 'a'..'z' ); };
Whenever you are repeating code, think about how you can avoid that repetition.
|
|---|