## CatchDivByZero.pl
use strict;
use warnings;
use Error qw(:try);
use Arithmetic;
use DivByZero;
my $a = 10;
my $b = 0;
my $result;
try {
$result = Arithmetic::divide($a,$b);
} catch DivByZero with { ## catch it here and not in the Class Arithmetic.pm
$b = 1; ## so we can still do something else and not just die there
$result = Arithmetic::divide($a,$b);
} catch Error with {
my $e = shift;
print "Unhandled Exception $e\n";
};
printf "The result is %d\n", $result;
## Arithmetic.pm
package Arithmetic;
use strict;
use warnings;
use Error qw(:try);
use DivByZero;
sub divide {
my ($a, $b) = @_;
my $r;
throw DivByZero if $b == 0;
$r = $a/$b;
return $r;
}
1;
## DivByZero.pm
package DivByZero;
use Moose;
extends 'Error';
1;