## 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;