sub callDBI { my ($aParams, $crOnError) = @_; my $db; eval { $db = DBI->connect(@$aParams,{'RaiseError' => 1}); return 1; } or do { my $e=$@; if (defined($crOnError)) { $db = $crOnError->($aParams, $e); } else { $@=$e; die; # rethrow } }; return $db; }