http://qs321.pair.com?node_id=606619


in reply to Accessing an array of anonymous hashes

i think you'll have to use the keys function:
print Dumper( keys %{ $transaction_record_fields_method1->[2] } ); print Dumper( values %{ $transaction_record_fields_method1->[2] } );
keep in mind keys will return a list, so:
my ($name) = keys %{ $transaction_record_fields_method1->[2] }; my $range = $transaction_record_fields_method1->[2]->{$name};

Replies are listed 'Best First'.
Re^2: Accessing an array of anonymous hashes
by thezip (Vicar) on Mar 26, 2007 at 17:17 UTC

    Yes, thanks. I did try this initially, and it was the only way that I could get it to work. I slowly began to realize that I was probably using the wrong data structure when I had to do this...

    Alternatively, is there a means, through clever indexing or such, that will also get me to the values I seek?

      you can dereference the hash, then treat it as a list:
      print Dumper( (%{ $transaction_record_fields_method1->[2] })[0] ); print Dumper( (%{ $transaction_record_fields_method1->[2] })[1] );
      but it probably makes more sense to just use an AoA.
        What do you think about this structure?
        my $transaction_record_fields = { 'Batch_Agency' => { COL => 0, POS => [ 1 .. 3] }, 'Batch_Date' => { COL => 1, POS => [ 4 .. 11] }, 'Batch_Type' => { COL => 2, POS => [ 12 .. 12] }, };

        Eventually, I'll be inserting some data into each column, so it will end up looking like this:

        my $transaction_record_fields = { 'Batch_Agency' => { COL => 0, POS => [ 1 .. 3], VALUE => + "AAA" }, 'Batch_Date' => { COL => 1, POS => [ 4 .. 11], VALUE => + "BBBBBBBB"}, 'Batch_Type' => { COL => 2, POS => [ 12 .. 12], VALUE => + "C"}, };

        I like the idea of being able to insert by fieldname rather than by a numeric index, and this structure supports that.

        OTOH, that fact that I have to hard-code the column index seems a little funky to me.