in reply to Abstraction: Has far is to far?

I have seen people use lexicals for hash keys, but this was more to catch typos:
use strict; my $bar = 'bar'; $foo{$bar} = 1; $foo{$bor} = 1; # typo, won't compile
It sounds like you are more interested in abstracting things so that you can change them later, in which case I would ask why you are passing around hashes at all. If these were objects instead, your abstraction would be there, in the class definition, and you could change the hash keys later without editing the other modules that use your class.