| WWW-USF-Directory documentation | Contained in the WWW-USF-Directory distribution. |
WWW::USF::Directory::Exception - Basic exception object for WWW::USF::Directory
Version 0.003
use WWW::USF::Directory::Exception;
# Throw a generic error message
WWW::USF::Directory::Exception->throw(
message => 'This is some error message',
);
This is a basic exception class for the WWW::USF::Directory library.
Required. This is a string that contains the error message for the exception.
This method is used to return a string that will be given when this object is used in a string context. Classes inheriting from this class are welcome to override this method. By default (as in, in this class) this method simply returns the contents of the message attribute.
my $error = WWW::USF::Directory::Exception->new(message => 'Error message'); print $error; # Prints "Error message"
This method will take a HASH as the argument and will pass this HASH to the
constructor of the class, and then throw the newly constructed object. An extra
option that will be stripped is class. This option will actually construct a
different class, where this class is in the package space below the specified
class.
eval {
WWW::USF::Directory->throw(
class => 'ClassName',
message => 'An error occurred',
);
};
print ref $@; # Prints WWW::USF::Directory::Exception::ClassName
Douglas Christopher Wilson, <doug at somethingdoug.com>
Please report any bugs or feature requests to bug-www-usf-directory at rt.cpan.org,
or through the web interface at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=WWW::USF::Directory.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
I highly encourage the submission of bugs and enhancements to my modules.
Copyright 2010 Douglas Christopher Wilson.
This program is free software; you can redistribute it and/or modify it under the terms of either:
| WWW-USF-Directory documentation | Contained in the WWW-USF-Directory distribution. |
package WWW::USF::Directory::Exception; use 5.008001; use strict; use warnings 'all'; ########################################################################### # METADATA our $AUTHORITY = 'cpan:DOUGDUDE'; our $VERSION = '0.003'; ########################################################################### # MOOSE use Moose 0.89; use MooseX::StrictConstructor 0.08; ########################################################################### # MOOSE TYPES use MooseX::Types::Moose qw( Str ); ########################################################################### # MODULE IMPORTS use Carp qw(croak); use English qw(-no_match_vars); ########################################################################### # ALL IMPORTS BEFORE THIS WILL BE ERASED use namespace::clean 0.04 -except => [qw(meta)]; ########################################################################### # OVERLOADED FUNCTIONS __PACKAGE__->meta->add_package_symbol(q{&()} => sub { }); __PACKAGE__->meta->add_package_symbol(q{&(""} => sub { shift->stringify }); ########################################################################### # ATTRIBUTES has message => ( is => 'ro', isa => Str, documentation => q{The error message}, required => 1, ); ########################################################################### # METHODS sub stringify { my ($self) = @_; # The default stringify method just returns the contents of the message # attribute. return $self->message; } sub throw { my ($class, %args) = @_; if (blessed $class) { # Since $class is blessed, this was probably called as a method, so # make $class the class name. $class = blessed $class; } # Get the class to make the exception in my $exception_class = delete $args{class}; if (!defined $exception_class) { # The class was not specified, so just make it in our class croak $class->new(%args); } # Prefix this class to the beginning of the exception class $exception_class = sprintf '%s::%s', $class, $exception_class; if ($exception_class !~ m{\A \w+ (?: :: \w+)* \z}imsx) { # The class name doesn't seem good, so toss it because we don't want # to be evaulating bad code. croak $class->new( message => 'The provided class name seemed like a bad name', ); } # Attempt to load the exception class ## no critic qw(BuiltinFunctions::ProhibitStringyEval) if (!eval "use $exception_class; 1") { croak $class->new( message => sprintf 'Unable to initiate the %s error class: %s', $exception_class, $EVAL_ERROR ); } croak $exception_class->new(%args); } ########################################################################### # MAKE MOOSE OBJECT IMMUTABLE __PACKAGE__->meta->make_immutable; 1; __END__