The _croak() method is passed an error message and in some cases some extra information as described below. The default behaviour is simply to call Carp::croak($message). Applications that require custom behaviour should override the _croak() method in their application base class (or table classes for table-specific behaviour). For example: use Error; sub _croak { my ($self, $message, %info) = @_; # convert errors into exception objects # except for duplicate insert errors which we'll ignore Error->throw(-text => $message, %info) unless $message =~ /^Can't insert .* duplicate/; return; } #### ... various Class::DBI stuff not included... $entry = Contacts->create( \%hash );