The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Changes for version 1.11_01 - 2008-07-04

  • RELEASE CODENAME: "Aristotle", in thanks for the many long and detailed discussions about the autodie interface and how it should interact with Fatal. Aristotle was instrumental in ensuring autodie has the clean and simple interface that it does now.
  • FEATURE: 5.8 now has the ability to differentiate between calls that return false to indicate failure, and those that only return undef to indicate failure. CORE::send and CORE::recv are examples of these.
  • FEATURE: You can now 'use autodie qw(fork)' to make sure your forks are successful (they must return defined).
  • TEST: t/todo.t removed. We have passing tests (recv.t) for the reminder I had stuffed into here.
  • TEST: t/fork.t added, for testing autodying fork.
  • INTERNAL: The internal subroutine _remove_lexical_subs has been renamed to a much less misleading name of _install_subs, since that's what it actually does now.
  • BUGFIX: Found and fixed a nasty bug where autodie's internal subroutine cache was being too agressive. This could result in handles from the incorrect package being used. Scalar filehandles have never been affected by this bug.
  • BUGFIX: Autodying subroutines will no longer leak into other files if they are used/required/done in the same lexical scope.
  • BUILD: Fatal and autodie now install themselves with a INSTALLDIRS=perl target, meaning they will now correctly override (and possibly overwrite) your installed Fatal.pm on 'make install'.
  • DOCUMENTATION: Documented the 'used only once' bug when using Fatal/autodie with package filehandles. This has always existed in Fatal, and as far as I know it incurable (but harmless).
  • FEATURE: autodie and its exceptions can now be subclassed!
  • TEST: Added t/crickey.t as an example of using fair dinkum subclasses of autodie. Mate, I reckon it's time for a beer.
  • INTERNAL: Moved exception architecture from inside-out objects (which need lots of extra work under 5.8) to regular hashes (which don't need extra work).
  • INTERNAL: Inlined relevant portions of Scope::Guard, meaning autodie can be installed with no dependencies. (It still recommends IPC::System::Simple.)

Changes for version 1.10_07 - 2008-06-29

  • RELEASE CODENAME: "ikegami", in thanks for solving the problem of getting lexical replacement of subroutines working for real under Perl 5.8. As this works better than my 5.10 implemenation, it forms the foundation for this release.
  • Removed inappropriate diagnostics about :lexical from Fatal.pm
  • Moved can't mix lexical and void diagnostics to autodie.pm
  • Added some basic tests for sysopen()
  • Removed the 5.10 only way of tracking lexical hints with %^H. Our code now exclusively uses the more portable 5.8 code that employs Scope::Guard (and has less side-effects).
  • Exotic system is no longer clobbered under 5.10 outside of autodie's scope.
  • autodie::exception::match is better exercised in the 5.8 test suite.
  • Re-enabled 'use autodie' vanilla tests.
  • t/backcompat.t no longer fails under Devel::Cover
  • Repeating function names in arguments to autodie no longer causes those functions to become 'stuck' in autodying mode.
  • Wrong-version of Fatal.pm support added, along with basic hints on how to get it working.
  • Expanded documentation on autodie, particularly for exception handling under Perl 5.8.
  • Less warnings from t/exceptions.t when running under 5.10.
  • All releases now really depend upon Scope::Guard, not just 5.8.

Changes for version 1.10_06 - 2008-06-22

  • RELEASE CODENAME: "Chocolateboy", in thanks for his wonderful insights, and for letting me sound off way too many ideas about how things may be done.
  • Fixed speeling errors in context.t, thanks to Stennie.
  • Fixed minor pod errors and omissions.
  • Fixed bug in recv.t which resulted in an incorrect number of skipped tests on systems using socketpair emulation.
  • Fixed a bug that would cause unwanted interactions between autodie and autobox. Thanks to chocolateboy. (5.8)
  • Wrote a (failing) test case demonstrating that the autodie pragma could leak across files. Many thanks to chocolateboy for bringing this to my attention.
  • t/system.t checks to see if exotic system has been injured in the same package as 'use qutodie qw(system)'
  • Calling filename reliably reported in 5.8 error messages and error objects.
  • User subs can be made autodying under 5.8, but they leak over the entire package (which is very bad!)
  • Context-checking tests split into package-scope tests and lexical scope tests.
  • Lexical user-subs are disabled under Perl 5.8. They were leaking everywhere and not being lexical at all. Attempting to use a lexical user-sub under 5.8 now causes an error.
  • Bugs found in interaction between autodie and Fatal in 5.8. When used together, we can't reliably replace a Fatalised sub with an autodying one, and then switch it back again at the end of block.
  • Bugs described above fixed, thanks to ikegami!
  • Overhauled _remove_lexical_subs, based on ikegami's input. This routine would now be better named "_install_lexical_subs", since it can now both install and remove.
  • Surpressed some warnings under 5.8 about uninitialised hints hashes.
  • Added support for backwards compatible Fatal calls in 5.8. These are currently a little *too* backwards compatible, possessing the same bugs as the old Fatal (clobbering context).
  • Improved caching of pre-generated subroutines. We now cache the compiled subroutine, rather than the uncompiled code.
  • Added more tests to ensure Fatal throws backcompat strings, whereas autodie throws exception objects.
  • Support for lexical user-subs enabled, tested, and working in 5.8!
  • Added resources to Makefile.PL / META.yml

Changes for version 1.10_05 - 2008-06-15

  • Kludgy support for Perl 5.8 using Scope::Guard and dark and terrible magicks taken from namespace::clean.
  • Rudimentary caching of generated code, to avoid having to regenerate the same code every single time Fatal/autodie is used on the same function.
  • Nuking subroutines at end of lexical scope moved into own subroutine.
  • Perl 5.8 support working! Backcompat mode not yet supported, nor is autodie with user defined subs. The 5.8 support that is there is rather kludgy, and still needs a lot of work.
  • Perl 5.8 code no longer gets executed under 5.10 when executing write_invocation().
  • lex58.t tells the user that we'll get warnings under Win32, and these are to be ignored. This is due to a Perl behaviour where it always calls the shell under Win32, even when multi-arg system is used.
  • lex58.t no longer fails to compile on Perl 5.10 which is still clobbering exotic open. Perl 5.8 does not clobber the exotic form.
  • Backcompat tests are all marked as TODO under perl 5.8
  • Makefile.PL moved back to saying autodie works under 5.8
  • Context/user-sub tests skipped under 5.8, which does not yet support autodying of user subs.
  • lex58 tests now skipped if IPC::System::Simple not installed.
  • Squished a spurious warning from lex58.t

Changes for version 1.10_04 - 2008-06-14

  • Made all $VERSION numbers more friendly to static code analysis tools (including CPAN).
  • Added a test to make sure all version numbers are incremented in lock-step.
  • Started 5.8 support
    • Removed dependencies on 5.10 'use feature'.
    • Removed dependencies on 5.10 fieldhashes.
    • a::e::match no longer uses smart-match or //
    • %^H init doesn't use // anymore.
    • 5.8 won't try to use // in fatalised subs (kludge)
  • recv.t corrected to use a custom socket (closed for writing) and to ignore SIGPIPEs.

Changes for version 1.10_03 - 2008-06-13

  • Updated backwards compatibility tests to work on non-Enligh systems.

Changes for version 1.10_02 - 2008-06-13

  • Tweaked boilerplate test to remove windows-only paths.

Changes for version 1.10_01 - 2008-06-12

  • First beta release of module.

Modules

Replace functions with equivalents which succeed or die
Replace functions with ones that succeed or die with lexical scope
Exceptions from autodying functions.
Exceptions from autodying system().

Provides

in lib/Fatal.pm