http://www.perlmonks.org?node_id=448012

shemp has asked for the wisdom of the Perl Monks concerning the following question:

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.