First of all, your code doesn't look noobish at all! The variable naming isn't my taste and would probably be considered un-perlish by most, but well, that's taste :)
One problem that I can see apart from what tobyink spotted (he obviously has much more of a clue there than me, I've used simple transactions but never even heard of savepoints) is that you're rolling back transactions in random order if several DB handles were used. Why someone would want a single transaction to span things done on different connections I don't know but I guess if it does happen this could cause problems. Easy enough to fix though.