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?
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?
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.