Have you fully checked the Carp code? It's been a while but I seem to rememember a short and long message format, the short being the default; the long giving a full stack trace. The code counts all sub-classes in a calling path as one "level", so if you were to derive your module from DBI in this instance you'd get what you want. Then there's a $CarpLevel scalar you can set to push it back further in cases like yours. I've used that successfully; always by setting a local value before calling carp(). The trick is knowing how far back your client is. In the few cases I had to do this I either knew or could figure it out using caller().