You can't tell what's going on because you aren't checking for errors. You should either set DBI's RaiseError flag or check every DBI call. You do() call might be failing for any number of reasons.
What makes you think die() doesn't work inside DESTROY{}?