NAME

Throwable::SysError - a sub-class of Throwable::Error for system error objects

SYNOPSIS

package MyApp::SysError;

use Moo;

extends qw( Throwable::SysError );

has path => ( is => 'ro', required => 1 );

...

open my $fh, '<', $file
  or MyApp::SysError->throw({
       message => 'open() failed',
       op      => 'open',
       path    => $file
     });

...

try {
  mkdir $dir
    or MyApp::SysError->throw(
      message => 'mkdir() failed', op => 'mkdir', path => $dir );

  ...
}
catch {
  # ignore errors if making a directory that already exists
  return
    if $_->op eq 'mkdir' && $_->is( 'EEXIST' );

  $logger->log->error( 'unrecoverable system error: ',
    $_->op, ': ', $op->path, ': ', $op->errstr );

  $_->throw;
};

DESCRIPTION

Throwable::SysError is a simple class for exceptions that will be thrown to signal errors related to system functions like open() or anything that sets $! when an operation fails. It is built on top of Throwable::Error as a sub-class which you can use directly or by sub-classing it yourself for your specific needs.

ATTRIBUTES

op

This attribute is required and should contain a string describing the operation that caused the error.

errno

This attribute is not meant to be set directly and if not provided is derived from the numeric value of $! at the time the exception is thrown. If you need to provide a value for this attribute manually, you can use "_errno" in calls to new()/throw().

errstr

This attribute is not meant to be set directly and if not provided is derived from the string value of $! at the time the exception is thrown. If you need to provide a value for this attribute manually, you can use "_errno" in calls to new()/throw().

METHODS

is( $constant )

Returns true if the error constant named in $constant represents the current errno. This allows you to test for specific error conditions in your exception handlers without needing to import constants from Errno.

SEE ALSO

Throwable::Error

This module is a sub-class of Throwable::Error.

AUTHOR

jason hord <pravus@cpan.org>

COPYRIGHT AND LICENSE

Copyright (c) 2013, jason hord

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.