Peter Flanigan > Unexpected > Unexpected::Functions



Annotate this POD



Open  0
View/Report Bugs
Module Version: v0.34.1   Source  

Name ^

Unexpected::Functions - A collection of functions used in this distribution

Synopsis ^

   package YourApp::Exception;

   use Moo;

   extends 'Unexpected';
   with    'Unexpected::TraitFor::ExceptionClasses';

   package YourApp;

   use Unexpected::Functions 'Unspecified';

   sub EXCEPTION_CLASS { 'YourApp::Exception' }

   sub throw { EXCEPTION_CLASS->throw( @_ ) }

   throw Unspecified, args => [ 'parameter name' ];

Description ^

A collection of functions used in this distribution

Also exports any exceptions defined by the caller's EXCEPTION_CLASS as subroutines that return a subroutine that returns the subroutines name as a string. The calling package can then throw exceptions with a class attribute that takes these subroutines return values

Configuration and Environment ^

Defines no attributes

Subroutines/Methods ^


   $hash_ref = build_attr_from( <whatever> );

Coerces a hash ref from whatever args are passed. This subroutine is responsible for parsing the arguments passed to the constructor. Supports the following signatures

   # no defined arguments - returns and empty hash reference

   # first argument is one if our own objects - clone it
   Unexpected->new( $unexpected_object_ref );

   # first argument is one if our own objects, second is a hash reference
   # - clone the object but mutate it using the hash reference
   Unexpected->new( $unexpected_object_ref, { key => 'value', ... } );

   # first argument is a code reference - the code reference returns the
   # exception class and the remaining arguents are treated as a list of
   # keys and values
   Unexpected->new( Unspecified, args => [ 'parameter name' ] );

   # first argmentt is a hash reference - clone it
   Unexpected->new( { key => 'value', ... } );

   # only one scalar argement - the error string
   Unexpected->new( $error_string );

   # second argement is a hash reference, first argument is the error
   Unexpected->new( $error_string, { key => 'value', ... } );

   # odd numbered list of arguments is the error followed by keys and values
   Unexpected->new( $error_string, key => 'value', ... );

   arguments are a list of keys and values
   Unexpected->new( key => 'value', ... );


   use Try::Tiny;

   try         { die $exception_object }
   catch_class [ 'exception_class' => sub { # handle exception }, ... ],
   finally     { # always do this };

See Try::Tiny::ByClass. Checks the exception object's class attribute against the list of exception class names passed to catch_class. If there is a match, call the subroutine provided to handle that exception. Re-throws the exception if there is no match of if the exception object has no class attribute


   has_exception 'exception_name' => parents => [ 'parent_exception' ],
      error => 'Error message for the exception with placeholders';

Calls "add_exception" in Unexpected::TraitFor::ExceptionClasses via the calling class which is assumed to inherit from a class that consumes the Unexpected::TraitFor::ExceptionClasses role


   $message = inflate_message( $template, $arg1, $arg2, ... );

Substitute the placeholders in the $template string (e.g. [_1]) with the corresponding argument


   $bool = is_class_loaded $classname;

Returns true is the classname as already loaded and compiled


   $bool = Unexpected::Functions->quote_bind_values( $bool );

Accessor / mutator package method that toggles the state on quoting the placeholder substitution values in inflate_message. Defaults to true

Diagnostics ^


Dependencies ^


Incompatibilities ^

There are no known incompatibilities in this module

Bugs and Limitations ^

There are no known bugs in this module. Please report problems to the address below. Patches are welcome

Acknowledgements ^

Larry Wall - For the Perl programming language

Author ^

Peter Flanigan, <>

License and Copyright ^

Copyright (c) 2014 Peter Flanigan. All rights reserved

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic

This program is distributed in the hope that it will be useful, but WITHOUT WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE

syntax highlighting: