views:

109

answers:

3

The Perl modules autodie and Fatal seem to be doing similar things. What are the reasons for using one in preference to the other?

+7  A: 

To quote the Fatal documentation

Fatal has been obsoleted by the new autodie pragma. Please use autodie in preference to Fatal. autodie supports lexical scoping, throws real exception objects, and provides much nicer error messages.

Leon Timmermans
+2  A: 

Another reason to use autodie instead of Fatal is to avoid this bug (from the BUGS section of the Fatal docs):

Fatal clobbers the context in which a function is called and always makes it a scalar context, except when the :void tag is used. This problem does not exist in autodie.

toolic
+5  A: 

The Fatal module was added to the Perl core in version 5.05 (1998). The Fatal module has some significant shortcomings and inconsistencies in its API which couldn't be fixed in a backwards compatible way (ie: fixing the API would break existing code which used Fatal).

The newer autodie module was written to provide a more consistent API and to allow the effect of the pragma to be lexically scoped rather than global (which can have unexpected side effects).

If you have a choice, you should definitely prefer autodie. It will be included as a core module in the upcoming 5.12 release of Perl.

The autodie module requires Perl 5.8. About the only reason you'd use Fatal is if you were stuck with a really old version of Perl (eg: 5.6), but 5.8 has been out since 2002 so hopefully that won't be the case for you.

Grant McLean
@grant - really helpful explanation
justintime