in reply to Passing a hash between subs

In bar(), $idand $location, which fills your %location hash, are values and no references to anything.
I think that they are the values from coloum 'id' and 'location' from your database !!!

So if you want to get the location for i.e. id=4 you have to write  $location{4}
But all in all you can do it a bit more easier I think:

use DBI; my %location = map { $_->[0] => $_->[1] } @{$dbh->selectall_arrayref( +'select id, location from ndmw_location')};
There's also a $dbh->selectall_hashref() possibility, but I can't figure out, how it works ;-)
Maybe perlodoc DBI can help ?

Hope this helps ?