in reply to Perl Warnings...

You could do

my ($query, $sth, $rv); $query = ...; $sth = ...; $rv = ...; ... $query = ...; $sth = ...; $rv = ...; ...

I did that in a .t file recently. The complexity of the alternative was immense.

Of course, in your specific case, you could write

my $first_result = $dbh->selectrow_hashref( "SELECT something FROM somewhere" ); my $second_result = $dbh->selectrow_hashref( "SELECT somethingelse FROM somewhereelse" );

what is actually happening in memory

Two different variables are created, as if they had different names.

$ perl -MO=Concise -e'my $x; my $x; my $y;' 2>&1 | grep padsv 3 <0> padsv[$x:1,4] vM/LVINTRO ->4 5 <0> padsv[$x:2,4] vM/LVINTRO ->6 7 <0> padsv[$y:3,4] vM/LVINTRO ->8