Вы нарушаете refs
часть строгого . Когда вы пытаетесь использовать не ссылочное значение в качестве ссылки, Perl хочет создать «символическую ссылку», которая обычно не то, что вам нужно, хотя она молча продолжает программу (вероятно, не «работает», а просто продолжает). Включив ограничения, вы ловите эти случаи.
В вашем примере и ответе Джонатана похоже, что вы делаете много акробатических операций, чтобы отменить хеш-ссылки, просто чтобы снова сделать их хеш-ссылками. Есть ли причина, по которой вы не просто оставляете это как ссылку на хэш?
while( my $href = $qhand->fetchrow_hashref ) {
push @results, $href;
}
И, если вы просто хотите получить все результаты в виде хеш-ссылок, для этого есть метод DBI, поэтому вы можете пропустить цикл while
:
my $results_array_ref = $qhand->fetchall_arrayref( {} );