Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

error handling

by archon (Monk)
on Jun 28, 2003 at 00:47 UTC ( #269781=perlquestion: print w/replies, xml ) Need Help??
archon has asked for the wisdom of the Perl Monks concerning the following question:

I'm using CGI::Application. The way it works is a form parameter sets a particular mode. In this mode, a subroutine is called and that subroutine returns an HTML::Template->output which produces the page.

So in one mode I have a method that calls another subroutine which returns two list references. It is possible for this subroutine to come across an error and produce an error message. If it does get an error, I would like the calling method to return an error page HTML::Template with the error message. Otherwise, I would like it to take the two list refs and go about its business.

My question, then, is what is the proper way to go about doing this? I tried (heh) using and throwing an exception in the subroutine, but I can't return() from the try block. I could return the error string instead from the subroutine and then have the method figure out if something went wrong using ref(), but that feels dirty to me.


Replies are listed 'Best First'.
Re: error handling
by Zaxo (Archbishop) on Jun 28, 2003 at 02:57 UTC

    You're describing a typical try ... catch situation. Have the error die with the message, call with eval {}, and check $@ after eval returns.

    After Compline,

      i must have been overanalyzing the problem from the start. i don't know why i didn't think of that.

      i did attempt the try...catch thing with but it stopped me from doing a return within the block.

        This is the mechanism used by under the hood, more or less. While is a much prettier interface than checking $@ yourself, it has some drawbacks. Since the arguments to both try and catch are anonymous subs, return will return from those and not from the enclosing sub, as you've experienced. You'll have to set up a variable with the value you want to return and then do so outside of try/catch.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://269781]
Approved by gellyfish
[1nickt]: But the bands are even louder! I saw Spearhead (Michael Franti) at an outdoor show and had to walk a mile away to not feel pain in my chest! Babies were crying ... I asked the sound engineer why it was necessary to have the bass so loud and he laughed...
[Discipulus]: but the best i attended live was Mano Negra Patchanka at Forte Prenestino .. in 1990
[Corion]: Hmmm - Mano Negra or at least Manu Chao seem to put on a good live show. At least the one live CD I have from Manu Chao sounds good ;)
Discipulus feels the same jealousity of the johngg's daughter
[1nickt]: choroba I agree
[choroba]: Playing in a punk rock band for 20 years... my hearing is quite bad
[Corion]: I still have hopes to turn my godson and his two siblings into a punk band ;)
[Corion]: Their older sister just started piano but has been interested in drumming, which she should be able to start with 8 years or so)
[Discipulus]: ah was Kink of Bongo 1992..
[1nickt]: choroba name of band? youtube link? MySpace link?

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (9)
As of 2017-03-24 12:21 GMT
Find Nodes?
    Voting Booth?
    Should Pluto Get Its Planethood Back?

    Results (301 votes). Check out past polls.