sub dbi_connect { my $self = shift; return $$self{dbh} ||= DBI->connect($dbi,$u,$p,{'RaiseError' => 1}); } sub dbi_disconnect { my $self = shift; return 1 unless $$self{dbh}; my $dbh = $self->dbi_connect; $dbh->disconnect || die $dbh->errstr; $$self{dbh} = undef; return 1; }