#!/usr/bin/perl
use lib 'lib', '../lib';
# Use module and create needed exceptions
use Exception::Base
'Exception::IO',
'Exception::FileNotFound' => {
isa => 'Exception::IO',
has => 'filename',
string_attributes => [ 'message', 'filename' ],
};
sub func1 {
eval {
my $filename = '/notfound';
open my $fh, $filename
or throw Exception::FileNotFound
message=>'Can not open file', filename=>$filename;
};
if ($@) {
my $e = Exception::IO->catch;
# $e is an exception object for sure, no need to check if is blessed
warn "*** Exception caught";
if ($e->isa('Exception::FileNotFound')) {
warn "*** Exception caught for file " . $e->filename;
}
# rethrow the exception
warn "*** Rethrow exception";
$e->throw;
}
}
sub func2 {
func1(1);
}
sub func3 {
func2(2,2);
}
func3(3,3,3);