I'd say that the $dbh connection should remain
open for the
lifetime of the object, which means it should be created
during the constructor. You will also want to add the
DBI->connect string to the items passed to the constructor
in that case, and maybe give the option for an already
created dbi session to be passed in instead. When you have
the session, you can store it in
$self->{dbh}.
As for the individual queries they should be either
created with $dbh->prepare_cached('select...');,
or stored in the object. This code may give an idea
of what I mean.
sub delete {
my $obj = shift;
my $sth = $obj->{queries}{delete} || $obj->{dbh}->prepare(
"DELETE FROM guest_list
WHERE last_name = ? and
first_names = ?" );
$sth->execute($obj->{_last_name},
$obj->{_first_names});
$obj->{queries}{delete} = $sth;
return 1;
}