views:

104

answers:

2

When writing a Perl module, is it a good practice to use croak/die inside the module?

After all, if the caller doesn't use an eval block, the module might crash the program calling it.

What is the best practice in these cases?

+10  A: 
adrianh
A: 

At least in early stages of production, I like to have plenty of throw exeptions (die early motto). So I can catch quickly any mistake (and save you a lot of time avoiding thinking in the logic and tracking return codes). Then in each release iteration I can reduce the severity of the throws associating them with a $o->debug status. So when you run your tests, die at everything, but when you run your code for real croak instead into a log and only die when unavoidable fatal conditions happens. In my humble opinion this is more flexible that the returning codes I have been using in the old times.

Also a simple 'die' exception is not very useful sometimes, so it is better to have a throw function that prints all the call stack trace (like Carp->confess()|cluck()).

And a good catching mechanism is also handy. use Try::Tiny or TryCatch.

PD: the perlmonk thread pointed by adrianh is a classic.

Pablo Marin-Garcia