in reply to Dereferencing a Hash of Hashes of Hashes?

Hint: the trick is to check if the value of each key is a reference to a hash or array or ... and if so, just expand this value appropriately. It is probably a good candidate for some recursive code.

From the docs:

ref EXPR

ref

Returns a non-empty string if EXPR is a reference, the empty string otherwise. If EXPR is not specified, $_ will be used. The value returned depends on the type of thing the reference is a reference to. Builtin types include:
  • SCALAR
  • ARRAY
  • HASH
  • CODE
  • REF
  • GLOB
  • LVALUE
If the referenced object has been blessed into a package, then that package name is returned instead. You can think of ref as a typeof operator.
if (ref($r) eq "HASH") { print "r is a reference to a hash.\n"; } unless (ref($r)) { print "r is not a reference at all.\n"; }

CountZero

A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James