http://www.perlmonks.org?node_id=998104

perlbaski has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks,

I am trying to use try catch from Try::Tiny module to catch and exception class object.

use Try::Tiny; use Exception::Class ( 'MyException', 'Commands' => { isa => 'MyException' }, 'Timeout' => { isa => 'Commands', description => 'These exceptions are resulted from running t +he naviseccli commands' } ); try{ MyException->throw( error => 'I feel funny. custom string based on +error' ) ; } catch{ my $e=$_; if ( $e == Exception::Class->caught('MyException') ) { warn $e->error, "\n", $e->trace->as_string, "\n"; warn join ' ', $e->euid, $e->egid, $e->uid, $e->gid, $e->pid, $e +->time; #exit; } };

I see that try did not throw the error. Any ideas why?. Try::Tiny documentation says that $_ should contain the error. Is try of Try::Tiny module capable of throwing exception class object and can it be stored in $_?

I do not want to use die in the try block because I do not want the program to exit but retry after some time or for some exceptions just ignore them after printing a log message.

Thanks in advance!

Replies are listed 'Best First'.
Re: Using Tiny::try with exception class
by mbethke (Hermit) on Oct 10, 2012 at 01:33 UTC

    The problem is that Exception::Class->caught() explicitly checks $@ for the exception object. The method doesn't do much anyway though, so with Try::Tiny you can simplify this to:

    ... catch { if(UNIVERSAL::isa($_,'MyException')) { warn $e->error, "\n"; ... } }