in reply to weird problem or perl-bug?

Just mentioning $db[$vars{_recNo}]{'name'} might make it spring to life. It's a process known as "autovivification" ("automatic bringing to life", or somesuch). Note this little testscript:
use Data::Dumper; my %vars = ( _recNo => 3 ); my @db; (undef) = $db[$vars{_recNo}]{'name'}; print Dumper \@db;
Resulting in:
$VAR1 = [ undef, ${\$VAR1->[0]}, ${\$VAR1->[0]}, {} ];
Never mind the ${\$VAR1->[0]}, it's just Data::Dumper's silly way of saying it's uninitialized (the "same" undef value as the first array item), but trying to check a (nonexistent) field in what isn't even a hash, makes the hash spring to life. That's why you see an empty anonymous hash there, as a fourth array element.

Searching through Google for perl autovivify OR autovivification brings up this article as a first hit: Autovivification : What Is It and Why Do I Care?.