The normal way to handle transactions in a web page is to attempt to do all your work and commit at the end, and if anything goes wrong you throw an exception and roll back. Apache::DBI helps you out with this by automatically rolling back at the end in case your program died before committing.
Can you explain why this approach is not adequate for what you're doing? Is it that some of the object actions have to be committed before continuing to the others?