SL::DB: Exception nur dann mit ->isa/->rethrow behandeln, wenn geblesstes Objekt
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 10 Feb 2017 12:30:33 +0000 (13:30 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 10 Feb 2017 12:30:33 +0000 (13:30 +0100)
ref($error) gilt auch für z.B. geworfene Arrayreferenzen, welche aber
nicht geblesst sind, wodurch man auf ihnen keine Funktionen aufrufen kann.

SL/DB.pm

index 40c8a95..29d0090 100644 (file)
--- a/SL/DB.pm
+++ b/SL/DB.pm
@@ -7,6 +7,7 @@ use Data::Dumper;
 use English qw(-no_match_vars);
 use Rose::DB;
 use Rose::DBx::Cache::Anywhere;
+use Scalar::Util qw(blessed);
 
 use base qw(Rose::DB);
 
@@ -138,7 +139,7 @@ sub with_transaction {
       : $self->do_transaction(sub { $result = $code->(@args) });
   } or do {
     my $error = $self->error;
-    if (ref $error) {
+    if (blessed $error) {
       if ($error->isa('SL::X::DBError')) {
         # gobble the exception
       } else {