I may be mistaken, but I believe that DBI will re-use the hashref it gives back through fetch(). I would suggest using bind_columns() (and prepare_cached(), but that's another story). I'd rewrite your thing as such:
sub get_stuff_from_db { my ($query) = @_; my $sth = $dbh->prepare_cached( $query ) or die "Could not prepare '$query'\n"; $sth->execute() or die "Could not execute '$query'\n"; $sth->bind_columns( \(my ($x, $y, $z)) #Assumes three columns returned ); my %results; while ($sth->fetch) { @results{qw(X Y Z)) = ($x, $y, $z); } $sth->finish; return \%results; }
A few notes:

We are the carpenters and bricklayers of the Information Age.

Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.

Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.

In reply to Re: Preserving hash structure after subroutine call by dragonchild
in thread Preserving hash structure after subroutine call by Anonymous Monk

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":