in reply to Having to specify $_
You'd think (if you think like me) that $_ is assigned the value of $sth->fetchrow_hashref everytime through the loop.
I'd expect that $_ would be assigned during a for or foreach loop, but not during a while loop. Try
push @results, $_ foreach ($sth->fetchrow_hashref());
Update: It's possible to be mislead by
while ( <FILE> ) { ...
Here, $_ does get set. But this is actually due to input operator behavior, as covered in the "I/O Operators" section in perlop.
Props to rob_au for prodding this clarification.
In Section
Seekers of Perl Wisdom