Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re^2: Error Handling with Packages

by salva (Canon)
on May 23, 2005 at 19:15 UTC ( [id://459681]=note: print w/replies, xml ) Need Help??


in reply to Re: Error Handling with Packages
in thread Error Handling with Packages

it seems to me that you have swapped croak and carp! croak dies, carp just prints warnings.

Anyway, usually, talking directly to the end user about some internals of the program is not a good idea... well, for scripts it is ok, specially if you are both the user and the programmer but for modules it's a bad idea, it doesn't escalate.

For most errors, the best think to do is to croak() and let the module user wrap the call in eval if he wants to handle the error in some way or just ignore it.

Sometimes, returning false and passing more information about the error in $! also makes sense.

Replies are listed 'Best First'.
Re^3: Error Handling with Packages
by Forsaken (Friar) on May 23, 2005 at 20:17 UTC
    Yeah, you're right, looks like I got them the wrong way around . As for talking to the end-user from a module, I think using carp for that is an elegant solution, especially when it's something that can be toggled on and off using a flag. For example:
    package Foo; use strict; use warnings; sub new { my($class, $debug) = @_; my $self = {}; bless($self, $class); if($debug) { $self->{'Debug'} = 1; } return $self; } sub bar { my($self, $hashref, @arguments) = @_; unless(ref($hashref) eq 'HASH') { if($debug) { carp "ERROR: first argument to \'bar\' must be a hashref"; } return; } #insert code here return $result; }
    I find carp most useful for these cases. Personally I feel a module should never die on its own, that's my decision...


    Remember rule one...
      to allow your module users to activate/deactivate warnings you can use warnings::register and warnings::enabled() instead of a custom aproach.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2024-04-19 02:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found