| DBIx-Class documentation | Contained in the DBIx-Class distribution. |
DBIx::Class::Exception - Exception objects for DBIx::Class
Exception objects of this class are used internally by the default error handling of throw_exception in DBIx::Class::Schema to prevent confusing and/or redundant re-application of Carp's stack trace information.
These objects stringify to the contained error message, and use overload fallback to give natural boolean/numeric values.
This is meant for internal use by DBIx::Class's throw_exception
code, and shouldn't be used directly elsewhere.
Expects a scalar exception message. The optional argument
$stacktrace tells it to use longmess in Carp instead of
croak in Carp::Clan.
DBIx::Class::Exception->throw('Foo');
eval { ... }; DBIx::Class::Exception->throw($@) if $@;
This method provides some syntactic sugar in order to re-throw exceptions.
Brandon L. Black <blblack@gmail.com>
You may distribute this code under the same terms as Perl itself.
| DBIx-Class documentation | Contained in the DBIx-Class distribution. |
package DBIx::Class::Exception; use strict; use warnings; use Carp::Clan qw/^DBIx::Class/; use Scalar::Util qw/blessed/; use overload '""' => sub { shift->{msg} }, fallback => 1;
sub throw { my ($class, $msg, $stacktrace) = @_; # Don't re-encapsulate exception objects of any kind die $msg if blessed($msg); # use Carp::Clan's croak if we're not stack tracing if(!$stacktrace) { local $@; eval { croak $msg }; $msg = $@ } else { $msg = Carp::longmess($msg); } my $self = { msg => $msg }; bless $self => $class; die $self; }
sub rethrow { die shift; }
1;