in reply to dereferencing hash within a hash within an array

I figured out that I needed the entries in the first ("root") array to be hash references. Below is the code used to generate this array.
while($db->FetchRow()){ my %hash = $db->DataHash(@$fields_ref); push (@data, \%hash); }
Whereas it was before
while($db->FetchRow()){ push (@data, $db->DataHash(@$fields_ref)); }

The DataHash function returns a hash whose keys are field names (from the database) and whose values are the values of those fields on a specific row. I don't like defining %hash every time a new row is processed, but couldn't get any "one-liner" way of making it work. How might I go about writing the push line with $db->DataHash(@$fields_ref) treated as a hash reference. In case anyone's interested, I touched up the code I originally posted. There were a few minor mistakes which caused some confusion about my looping.
while ($data[$x]){ my ($i,@orderdata,%myhash); foreach $i (1 .. $numpix){ if ($i == $data[$x]{'picorder'}){ $myhash{'orderline'} = "<option value=\"$i\" selected>$i</option>"; }else{ $myhash{'orderline'} = "<option value=\"$i\" selected>$i</option>";} push (@orderdata, \%myhash); } $data[$x]{'orderdata'} = \@orderdata; #transform anaglyph data for checkboxes if ($data[$x]{'anaglyph'} eq "Yes"){ $data[$x]{'anaglyph'}="checked";} $x++; }
Everything seems to work. Thanks for your help

Replies are listed 'Best First'.
Re: Re: dereferencing hash within a hash within an array
by Hofmator (Curate) on Jan 11, 2003 at 13:14 UTC
    concerning the one-liner, this should work:
    while($db->FetchRow()){ push @data, { $db->DataHash(@$fields_ref) }; }
    By using the curlies you are creating an anonymous hash reference out of the hash returned by the DataHash method which is directly pushed onto @data.

    -- Hofmator