Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re: Use of "die" in OO modules

by bart (Canon)
on Jan 19, 2007 at 12:01 UTC ( #595438=note: print w/replies, xml ) Need Help??

in reply to Use of "die" in OO modules

DBI lets the user of the module decide, through the attribute/parameter RaiseError when you connect. I think DBI is a large and widely enough used module, to count as a good, well tested example. And it appears to work well, to me.

Replies are listed 'Best First'.
Re^2: Use of "die" in OO modules
by sth (Priest) on Jan 19, 2007 at 16:21 UTC
    I recently added a ErrStr var to my modules, kinda of like the DBI::errstr. So if the object constructor fails the object is an undef and the the Errstr can be checked, i.e.
    my $obj = Some::Module->new() or die $Some::Module::Errstr, $/;
    ...otherwise if there is an error with a method call the error string can be retrieved,
    I really struggled with what was the correct way to handle the errors, I'm still not sure I like my solution.
Re^2: Use of "die" in OO modules
by roman (Monk) on Jan 21, 2007 at 12:44 UTC

    DBI is a module with a very wide audience. So there may be a reason why to support the behaviour of RaiseError = 0. But I with newly developed in house module I don't see any.

    I'm going crazy (and rude) when I see my colleagues to write their code like this:

    my $dbh = DBI->connect($data_source, $username, $password, \%attr) or +die $DBI::errstr; ... my $sth = $dbh->prepare(...) or die $DBI::errstr;

    Why rude? Because

    1. There is usually (always) nothing to do if the DBI method fails but die. So why to bother with return value and clutter you code with unnecessary die
    2. If there would be something to do (probability 0.001%) writing the eval block is as easy as checking the value returned.

    And why they write their scripts this way? Because they saw it in DBI perldoc.

    This should be probably a topic of a new meditation but that is how the whole Perl works. You start with "There is more than one way how to do it" and then you will need the very clever (no irony) "Perl Best Practices" book to tell you that all the ways but one are wrong.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (10)
As of 2019-12-09 15:00 GMT
Find Nodes?
    Voting Booth?

    No recent polls found