Serious Exception-Handling Bug Fixed in DBIx::Connector 0.42
I’ve just released DBIx::Connector 0.42 to CPAN. This release fixes a serious
bug with catch
blocks. In short, if you threw an exception from inside a catch
block, it would not be detectable from outside. For example, given this code:
eval {
$conn->run(sub { die 'WTF' }, catch => sub { die 'OMG!' });
};
if (my $err = $@) {
say "We got an error: $@\n";
}
With DBIx::Connector 0.41 and lower, the if
block would never be called,
because even though the catch block threw an exception, $@
was not set. In
other words, the exception would not be propagated to its caller. This could be
terribly annoying, as you can imagine. I was being a bit too clever about
localizing $@
, with the scope much too broad. 0.42 uses a much tighter scope
to localize $@
, so now it should propagate properly everywhere.
So if you’re using DBIx::Connector catch
blocks, please upgrade ASAP. Sorry
for the hassle.
Looking for the comments? Try the old layout.