http://qs1969.pair.com?node_id=518272


in reply to Exception Classes Advice on Subclasses

Caveat: I've never used Exception::Class in anger, so take my comment with a grain of salt.

I think the main point of using different subclasses is that you can check for the subclass directly when 'catch'ing the exception, and handle it appropriately to the type of error encountered. For example

use Exception::Class ( 'X::FatalIOError' => { # fields etc. }, 'X::TimeOut' => { } ); eval { somecode() }; if ( X::FatalIOError->caught()) { # do something and die } elsif (X::TimeOut->caught() ) { # wait and retry } elsif (Exception::Class->caught() ) { # got an exception we weren't expecting # die horribly or something }

Sure, you could set up something similar with using a single MyException subclass and testing the contents, but it seems a lot cleaner this way.

Update: Heh, adrianh answered the question before my post made it. Oh well, take my post as a more extended example :-)


Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. -- Brian W. Kernighan