SPUG: A hash of hashes and arrays

Yitzchak Scott-Thoennes sthoenna at efn.org
Mon Aug 1 08:58:32 PDT 2005


On Mon, Aug 01, 2005 at 08:46:16AM -0700, Duane Blanchard wrote:
> Hi all,
> 
> I have a hash of hashes and arrays. I'm able to print the all the keys
> of the outer hash, and print the embedded hashes and arrays
> individually, now I want to print the entire contents of the outer
> (matrix) hash.
> 
> I need something like:
> 
> for each key in the outer hash
> {   if (the key is a reference to a hash)

I think you mean the value, not the key.

>     {    print the contents of the hash;
>     }
>     elsif (the key is a reference to an array)
>     {    print the contents of the array;
>     }
> }
> 
> I have everything in place, but don't know how to tell whether I'm
> looking at a hash or an array.

If there are no objects involved, this is easy.  See perldoc -f ref

while ( my ($key, $val) = each %outer_hash ) {
   if ( ref $val eq "HASH" ) {
      ...
   } elsif ( ref $val eq "ARRAY" ) {
      ...
   } else {
      warn "I don't think we're in Kansas anymore, Toto";
   }
}

If there are objects involved, the problem is not generally solvable; you
have to decide what you will treat as a hash and what as an array.


More information about the spug-list mailing list