eval { $dbh->begin_work; # ... $dbh->commit; }; if ($@) { $dbh->rollback; # If you want to be paranoid, check if it rolled back. # Look at manual: man DBI }