Modernise Class::Struct-using core modules These modules cant't inherit from Exporter because they use Class::Struct, and were written before Exporter could export its import method. Now that it can, update them to do that, and remove the pointless BEGIN block around the Exporter setup. While here, switch to `package NAME VERSION` syntax and bump the `use VERSION` statement to 5.38 (but disable signatures, since the modules use prototypes).
do not count tests, instead use done_testing() Having to count tests is annoying for maintainers. Also, manually updating count tests is problematic when multiple people are working on the same code; it causes merge conflicts and recounts. done_testing() is available since Test::More 0.88 which was released in 2009. This commit changes all tests under lib/ that use Test::More and were planning the number of tests. Michiel Beijen is now a Perl author
Don't try to calculate a time over the conservative failure boundary. Otherwise gmtime(2**66) will cause a very, very, very long loop and DOS Perl. Add a test that very, very large times don't send gmtime and localtime into a loop Had to fix some revealed mistakes in op/time.t when warnings were turned on. Fix Time::gmtime and Time::localtime tests to match the new limits of gm/localtime.
Update from y2038. Add trace code. Fix implied negative time in localtie64_r(). This fixes Windows. Put in some more tests around small negative and positive times to try and catch the above. Explain the loss of accuracy due to use of doubles in perlport.
Patch in a 64 bit clean gmtime_r() and localtime_r() from the y2038 project. y2038.googlecode.com/ so Perl is no longer subject to the y2038 bug. Use Quad_t for our 64 bit time_t replacement. Temporarily through out the "broken localtime work around". That will have to be integrated into localtime64_r(). Fix Time::Local to handle the new expanded date range. "use integer" had to go as it pegged scalars to 32 bit integers which aren't large enough to hold the new time range. There are probably portability issues. timegm, for example, is not portable. Also the assumption that "long" is 64 bits is probably wrong.