# Transactions - Further comments

- ## The eval { … } catches all exceptions

  - not just from DBI calls. Also catches fatal runtime errors from Perl

- ## Put commit() inside the eval

  - ensures commit failure is caught cleanly
  - remember that commit() itself may fail for many reasons

- ## Don't forget that rollback() may also fail

  - due to database crash or network failure etc.
  - so you may want to call eval { $dbh->rollback() };

- ## Other points:

  - Always explicitly commit or rollback before disconnect()
  - Destroying a connected $dbh should always rollback
  - END blocks can catch exit-without-disconnect to rollback and disconnect cleanly

## -

Previous slide | Next slide | Back to first slide | View graphic version