in reply to Array of Array of Hashes

As twerq said, you need to dereference your array. Here's an example showing you how you might access your data:

#! perl use strict ; use warnings ; $|++ ; my @AoAoH = ( [ # Class 1 { 'name' => 'Bilbo Baggins', 'address' => 'The Shire', 'phone' => '555-9898' }, { 'name' => 'Frodo Baggins', 'address' => 'The Shire', 'phone' => '555-6767' } ], [ # Class 2 { 'name' => 'Gandalf', 'address' => 'Middle Earth', 'phone' => '555-1313' }, { 'name' => 'Sauron', 'address' => 'Mordor', 'phone' => '555-6666' } ], [ # Class 3 { 'name' => 'Peregrin Took', 'address' => 'The Shire', 'phone' => '555-2424' }, { 'name' => 'Samwise Gamgee', 'address' => 'The Shire', 'phone' => '555-2323' } ], ) ; print $AoAoH[0][0]{'name'}, "\n" ; my $AoAoH_ref = \@AoAoH ; print $AoAoH_ref->[1][1]{'name'}, "\n" ; __END__

_______________
DamnDirtyApe
Those who know that they are profound strive for clarity. Those who
would like to seem profound to the crowd strive for obscurity.
            --Friedrich Nietzsche

Replies are listed 'Best First'.
Re: Re: Array of Array of Hashes
by agentv (Friar) on Aug 07, 2002 at 14:02 UTC

    ...you know, now that I think about it, I have to agree with what twerq and dpuu said originally: We need to see your initialization code.

    In this example from DamnDirtyApe, the initial attempt to refer to the data is identical to your original.  $kid[0][0]{name} is the same as:  $AoAoH[0][0]{name}

    As long as you always refer to your data in this fashion (using a formally named variable "kid" or "AoAoH" you can treat the data structure as if it were in fact a simple multi-dimensioned construct. It is when you try to iterate through the individual data items that you have to be aware that the array named "kid" is simply an array of references (or pointers to you C programmers).

    So if you decided to do something like:

    foreach $class (@kids) { # inspect each top level (class) array # here, $class is a reference to an array, so... foreach $student (@$class) { # here, $student is a reference to a hash, so... print "$student->{'name'}\n"; # or you can iterate: foreach $fact (keys %{$student}) { # note that protecting $student with surrounding # curly braces will make keys() a lot happier # I like to pronounce the construct as: # "The hash to which $student refers" # and we may now print: print "$fact: $student->{$fact}\n"; # or if you are in a particularly perverse mood, you may say: print "$fact: $$student{$fact}\n"; # if you DO find yourself in that mood though, consider # adjusting your meds! :-) } } }

    ...all the world looks like -well- all the world, when your hammer is perl.
    ---v