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.


In reply to Re^2: Switch statement? by Corion
in thread Switch statement? by crep

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.