eval { my $dbh = DBI->connect(..., {RaiseError=>1}); eval { $dbh->do("update ..."); $dbh->do("update ..."); }; if ($@) { # clean up after an unsuccessful update $dbh->rollback(); $dbh->disconnect(); die($@); # reraise the error } # successful update $dbh->commit(); $dbh->disconnect(); }; if ($@) { log($@); }