Nur am Rande: In Perl gibt es den Hash Slice womit man Feldnamen mit den dazugegörigen Values zweckmäßig verbindet:
@fields = qw(isbn author year); # Feldnamen, Eigenschaften
my @qm = map{"?"}1..scalar @fields; # Platzhalter f. Insert
$dbh->do(qq(
insert into books (@{[join ',', @fields]}) values(@{[join ',', @qm]})
),{}, @book{"@fields"});
Womit man das Array mit den Feldnamen/Eignschaften zentral halten kann. Wichtig ist es, in der Tabelle Defaultwerte zu setzen insbesondere bei Erweiterungen. Ansonsten hat man nur noch ein Array was im Code bei Veränderungen anzupassen wäre.