Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

Re: Array of Hashes (updated)

by haukex (Chancellor)
on Feb 07, 2019 at 13:15 UTC ( #1229546=note: print w/replies, xml ) Need Help??

in reply to Array of Hashes

while ( $rowref =  $sth->fetchrow_hashref() ) {push @data, %{$rowref};}

Without having tested yet, I think your problem is probably here*: You dereference $rowref before pushing it into the array, and a hash used in list context will return its key/value pairs:

my $hr1 = { foo=>'bar' }; my $hr2 = { quz=>'baz' }; my @data; push @data, %{$hr1}; push @data, %{$hr2}; use Data::Dump; dd @data; # ("foo", "bar", "quz", "baz")

Maybe you just want to push @data, $rowref; instead?

You might also be interested in DBI's fetchall_* methods?

* Update: Also here:

%row = $data[0]; ... foreach %row (@data)

These won't do what you expect. I think you want @data to be an array of hashes, which means that the elements of @data will contain references to hashes. You can't just assign a hashref to a hash, you need to either de-reference the hashref (e.g. my %hash = %{$hashref};, which is a bit expensive as it copies everything), or work with the hashref directly, e.g. $hashref->{key}.

I would strongly recommend having a look at perlreftut, perldsc, and perlref. Also, if you're not doing so already, Use strict and warnings!

Newer versions of Perl have an experimental feature called refaliasing.

Replies are listed 'Best First'.
Re^2: Array of Hashes (updated)
by Ken_M (Initiate) on Feb 07, 2019 at 14:02 UTC

    Thanks - pushing the ref did what I need. I was just trying to dereference too early.

    Yes, I am using stricy and warnings, but failed to look at the error log.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1229546]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (5)
As of 2019-09-22 07:49 GMT
Find Nodes?
    Voting Booth?
    The room is dark, and your next move is ...

    Results (273 votes). Check out past polls.