kschwab has asked for the wisdom of the Perl Monks concerning the following question:

I wondering if anyone has adopted a consistent approach to handling ( and generating ) exceptions in perl, including supplying explanatory text about the exception or failure.

I've seen:

  1. subs that return 0 or undef on failure
  2. subs that die(), expecting the caller to wrap them in an eval block to catch failures, and use $@ to get the error text.
  3. subs that know the errors are OS related and thus set $! or $^E.
  4. subs that put error explanations into globals
  5. subs that call warn(), and expect the caller to muck with $SIG{__WARN__} to get context about the error
  6. use Carp;
  7. etc, etc
I've read perldoc perlvar, and the "Error Indicators" section, as well as the Carp docs, and $SIG{__WARN|DIE__} areas of perlipc.

Does anyone have any thoughts on how I should approach passing error conditions and return values around in my own code ?