Hi all. After spending at least an hour today tracking down why a report i was generating wasnt working correctly, it came down to the fact that i had misspelled a hashkey in one place. This happens way too often, regardless of how careful one is. The report is relatively simple, when particular things occur in the program the values of appropriate hash elements are incremented. So the report hash would look something like this:
%report_hash = ( 'event_1_count' => 17, 'event_2_count' => 53, 'event_3_count' => 1245, ... );
But of course i use meaningful names as the hash keys.

So what sorts of schemes do people use to avoid typos in hash keys? Its a minor annoyance, but takes forever to track down.

Schemes ive used:

  • I have occasionally used constants as keys, but that is annoying to me.
  • Once i wrote a tie called PresetKeysHash. When a hash is tied to this, you pass along an arrayref of 'allowed keys', and if you try to use any other key in that hash, the program bombs
  • I was considering writing a tie that would allow you to register keys on the fly, it would be similar to the PresetKeysHash, but none of this seems quite like what i want.


    In reply to avoiding hash key typos by shemp

    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.