Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re: Creating exception classes

by Athanasius (Chancellor)
on Feb 05, 2013 at 02:35 UTC ( #1017046=note: print w/replies, xml ) Need Help??

in reply to Creating exception classes

The problems are not in the declaration, but in sub ThrowMyException. Here is a working version, with changes commented:

#! perl use strict; use warnings; use Exception::Class ( 'MyException', Commands => { isa => 'MyException', }, Timeout => { isa => 'Commands', description => 'This exception results from running the metric +s commands', }, DBError => { isa => 'MyException', description => 'DB returned error', }, ); ThrowMyException(); print "No error caught\n"; sub ThrowMyException # NO prototype { eval { Timeout->throw # NOT MyException::Commands::Timeo +ut-> ( error => "This error is due to a timeout" ); }; my $err; if ($err = Exception::Class->caught('Timeout')) { die $err->description . # NOT $err->{"description"} ': ' . $err->error; # NOT $err->{"error"} } elsif ($err = Exception::Class->caught('MetricsException')) { die $err->error; } else { $err = Exception::Class->caught(); ref $err ? $err->rethrow : die $err; } }


12:30 >perl This exception results from running the metrics commands: This error i +s due to a timeout at line 56. 12:33 >

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: Creating exception classes
by perlbaski (Sexton) on Feb 05, 2013 at 18:48 UTC
    Thanks, that worked..I was thinking classes are blessed hashes, so I was trying to access them that way, looks like Exception::Class module creates accessors to access the fields. Am I correct?

      From the source code it appears that Exception::Class inherits from Exception::Class::Base. The documentation for Exception::Class::Base catalogues a number of class and/or object methods, among which are these:

      Returns the description for the given Exception::Class::Base subclass. ... This is also an object method.

      Returns the error/message associated with the exception.

      So these accessors are, as it were, “built-in” to any class derived from Exception::Class.

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1017046]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (1)
As of 2018-05-23 01:42 GMT
Find Nodes?
    Voting Booth?