my %myhash; build_hash(\%myhash); print Dumper(\%myhash); ## shows %myhash to be empty sub build_hash { my $href = shift; my %results; my $sth = $dbh->prepare( $query ); $sth->execute(); my $ct = 0; while (my $tmp_href = $sth->fetchrow_hashref) { $ct++; $results{$ct} = $tmp_href; } %{ $href } = %results; ## also tried Storable's dclone(), but same results ## $href = dclone(\%results); print Dumper($href); ## prints desired results }