| 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 and derivatives.
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 output a full trace similar to confess in Carp.
DBIx::Class::Exception->throw('Foo');
try { ... } catch { DBIx::Class::Exception->throw(shift) }
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 DBIx::Class::Carp (); 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 ref($msg); # all exceptions include a caller $msg =~ s/\n$//; if(!$stacktrace) { # skip all frames that match the original caller, or any of # the dbic-wide classdata patterns my ($ln, $calling) = DBIx::Class::Carp::__find_caller( '^' . caller() . '$', 'DBIx::Class', ); $msg = "${calling}${msg} ${ln}\n"; } else { $msg = Carp::longmess($msg); } my $self = { msg => $msg }; bless $self => $class; die $self; }
sub rethrow { die shift; }
1;