Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: use Fatal;

by George_Sherston (Vicar)
on Jan 10, 2002 at 05:12 UTC ( #137644=note: print w/ replies, xml ) Need Help??


in reply to use Fatal;

This sounds like a Good Thing (tm) - cuts down on typing / file size (marginally, but it all helps) and more importantly makes sure I don't forget to do the error checking.

Looking at the docs, it looks admirably flexible:

C<Fatal> provides a way to conveniently replace functions which normally return a false value when they fail with equivalents which halt execution if they are not successful.

As I read it, this means if I have a function 'foo' that sometimes returns false, and I'd like to know about that for test purposes, say, I can do import Fatal 'foo'; Thus where I have

use Fatal; import Fatal 'foo'; sub foo { my $test = rand; return $test if $test > .5; } my $test = foo(); print $test;
Each time rand is less than .5, I get
Can't foo(), $! is "No such file or directory" at (eval 1) line 3 main::__ANON__() called at p.pl line 10
... which is better than nothing.

The only reason I can think of for doing my own error checking is so that I can supply my own useful info about the failure. So for example I probably wouldn't use this for error-checking DBI function calls, because I would want to add $dbh->errstr.

Thanks for drawing attention to this.

George Sherston


Comment on Re: use Fatal;
Select or Download Code
(cLive ;-) Re: use Fatal;
by cLive ;-) (Parson) on Jan 10, 2002 at 05:20 UTC
    Actually, DBI is where I was thinking of bringing it in, combined with a custom $SIG{__DIE__}, eg:
    local $SIG{__die__} = sub { die ("DBI Error: $DBI::errstr") if $DBI::errstr; die $!; };
    But make sure you explicitly refer to the error (ie, don't use OO method unless method will definitely be in scope in the sub).

    Could be very useful...

    cLive ;-)

      No need to use fatal with DBI. Just set DBI's RaiseError flag to true. You can even use eval() to catch exceptions with it.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (6)
As of 2015-07-06 05:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (70 votes), past polls