Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^2: the try/catch example from "Programming Perl" analyzed

by Arunbear (Parson)
on Aug 19, 2004 at 14:36 UTC ( #384313=note: print w/ replies, xml ) Need Help??


in reply to Re: the try/catch example from "Programming Perl" analyzed
in thread the try/catch example from "Programming Perl" analyzed

Not sure that the nested if is actually needed. This code works with string and object exceptions (on 5.8.3 at least):

use strict; use warnings; package Exception; package IOException; @IOException::ISA = qw(Exception); package OtherException; package YetAnotherException; package main; *isa = \&UNIVERSAL::isa; my @grisly = ( sub { die "AARRGH!\n" }, sub { die bless [], 'Exception' }, sub { die bless [], 'IOException' }, sub { die bless [], 'OtherException' }, sub { die bless [], 'YetAnotherException' }, sub { print "I live\n"; } ); sub do_something_that_could_die { $grisly[0]->(); # or int(rand(@grisly)) } eval { do_something_that_could_die(); }; if(isa($@, 'Exception')) { print ref($@), ' caught'; } elsif(isa($@, 'OtherException')) { print ref($@), ' caught'; } elsif(ref $@) { # handle any other exception object print ref($@), ' caught'; } elsif($@) { # handle non-object exception print $@; }
Update:
replaced $@->isa('package') calls with calls to UNIVERSAL::isa()


Comment on Re^2: the try/catch example from "Programming Perl" analyzed
Select or Download Code
Re^3: the try/catch example from "Programming Perl" analyzed
by gellyfish (Monsignor) on Aug 19, 2004 at 14:43 UTC

    As long as you are sure you are going to get an object. You may want to use the functional UNIVERSAL::isa() if you want to avoid your 'catch' crapping out when something does just a plain die $!

    /J\

      Thanks, it would also have crapped out if $@ was undefined.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://384313]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (4)
As of 2014-09-21 09:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (168 votes), past polls