'use' statements are run at compile time, not at runtime, so that's why it's dying without running your die handler (I assume, its hard to say without seeing the code!)
To do it like that, use 'require' instead of 'use', which would then be done at runtime and should produce the required result.
DBI shouldn't need you to do that at all though, it includes the DBD needed itself, and I'm guessing if you try to 'connect' to a resource that isn't available, it'll return a sensible error message in $DBI::errstr which you can parse. (Untested though.. )
C.