sub foo { ... ########## Note that $ref does not exist(it's undef) ####### my %locations = &bar($dbh); ## Note that $ref did not get passed back from bar ## ... ########## $ref->{'location'} is undef, but 'use strict;' ########## here would have said: "can't use undef as hash" my $location_text = $locations{$ref->{'location'}}; } sub bar { my $dbh = shift; my $sql_loc = qq|SELECT * FROM ndmw_location|; my $sth = $dbh->prepare($sql_loc); $sth->execute or die("..."); my %locations; ########## Note that $ref IS my'ed here ########### while (my $ref = $sth->fetchrow_hashref()) { my $id = $ref->{'id'}; my $location = $ref->{'location'}; $locations{$id} = $location; } $sth->finish; return %locations; ########## Note that $ref goes away here ########### }