X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=lib%2FFile%2FKDBX%2FError.pm;h=7f44942caaee88e9a16acd9e72e6399bcb6422be;hb=eb5adf956fc6b9285b43ce6965eea728573e7864;hp=f80155796f4ae40e8d17afcda9dd8b0c8bdfce39;hpb=f63182fc62b25269b1c38588dca2b3535ed1a1a2;p=chaz%2Fp5-File-KDBX diff --git a/lib/File/KDBX/Error.pm b/lib/File/KDBX/Error.pm index f801557..7f44942 100644 --- a/lib/File/KDBX/Error.pm +++ b/lib/File/KDBX/Error.pm @@ -15,7 +15,12 @@ our @EXPORT = qw(alert error throw); my $WARNINGS_CATEGORY; BEGIN { $WARNINGS_CATEGORY = 'File::KDBX'; - warnings::register_categories($WARNINGS_CATEGORY) if warnings->can('register_categories'); + if (warnings->can('register_categories')) { + warnings::register_categories($WARNINGS_CATEGORY); + } + else { + eval qq{package $WARNINGS_CATEGORY; use warnings::register; 1}; ## no critic ProhibitStringyEval + } } use overload '""' => 'to_string', cmp => '_cmp'; @@ -65,7 +70,7 @@ passed will be forwarded to L to create a new error object. This can be convenient for error handling when you're not sure what the exception is but you want to treat it as a B. Example: - eval { .... }; + eval { ... }; if (my $error = error(@_)) { if ($error->type eq 'key.missing') { handle_missing_key($error); @@ -78,10 +83,11 @@ as a B. Example: =cut sub error { + my $class = @_ && $_[0] eq __PACKAGE__ ? shift : undef; my $self = (blessed($_[0]) && $_[0]->isa('File::KDBX::Error')) ? shift - : (@_ && $_[0] eq __PACKAGE__) - ? shift->new(@_) + : $class + ? $class->new(@_) : __PACKAGE__->new(@_); return $self; }