eval { $dbh->begin(); # stuff... $mime_entity_instance->send(); } if ($@) { $dbh->rollback(); } else { $dbh->commit(); } #### #!/usr/bin/perl -w use strict; my $num = '123'; # an external database ID, for example warn "(PID $$) Beginning transaction #$num "; eval { my $pid = fork(); if ($pid) { warn "\t(the parent does OK)"; } else { warn "\t(the child fails)"; die "Child process failure"; } }; if ($@) { warn "(PID $$) Rolling back transaction #$num: died in eval with $@"; } else { warn "(PID $$) Committing transaction #$num"; }