NAME

perldelta - what is new for perl v5.19.5

DESCRIPTION

This document describes differences between the 5.19.4 release and the 5.19.5 release.

If you are upgrading from an earlier release such as 5.19.3, first read perl5194delta, which describes differences between 5.19.3 and 5.19.4.

Core Enhancements

Unicode 6.3 now supported

Perl now supports and is shipped with Unicode 6.3 (though Perl may be recompiled with any previous Unicode release as well). A detailed list of Unicode 6.3 changes is at http://www.unicode.org/versions/Unicode6.3.0/.

Experimental Postfix Dereferencing

When the postderef feature is in effect, the following syntactical equivalencies are set up:

$sref->$*;  # same as ${ $sref }  # interpolates
$aref->@*;  # same as @{ $aref }  # interpolates
$href->%*;  # same as %{ $href }
$cref->&*;  # same as &{ $cref }
$gref->**;  # same as *{ $gref }

$gref->*{ $slot }; # same as *{ $gref }{ $slot }

$aref->@[ ... ];  # same as @$aref[ ... ]  # interpolates
$href->@{ ... };  # same as @$href{ ... }  # interpolates
$aref->%[ ... ];  # same as %$aref[ ... ]
$href->%{ ... };  # same as %$href{ ... }

Those marked as interpolating only interpolate if the associated postderef_qq feature is also enabled. This feature is experimental and will trigger experimental::postderef-category warnings when used, unless they are suppressed.

For more information, consult the Postfix Dereference Syntax section of perlref.

subs now take a prototype attribute

When declaring or defining a sub, the prototype can now be specified inside of a prototype attribute instead of in parens following the name.

For example, sub foo($$){} could be rewritten as sub foo : prototype($$){}.

Incompatible Changes

Functions PerlIO_vsprintf and PerlIO_sprintf have been removed

These two functions, undocumented, unused in CPAN, and problematic, have been removed.

Performance Enhancements

  • Perl has an optimizer for regular expression patterns. It analyzes the pattern to find things such as the minimum length a string has to be to match, etc. It now better handles code points that are above the Latin1 range.

Modules and Pragmata

Updated Modules and Pragmata

  • attributes has been upgraded from version 0.21 to 0.22.

    Support has been added for the prototype attribute.

  • autodie has been upgraded from version 2.21 to 2.22.

    No changes have been made to the installed code other than the version bump to keep in sync with the latest CPAN release.

  • CPAN::Meta has been upgraded from version 2.132620 to 2.132830.

    CPAN::Meta::Prereqs now has a merged_requirements method for combining requirements across multiple phases and types, and an invalid 'meta-spec' is no longer a fatal error.

  • CPAN::Meta::Requirements has been upgraded from version 2.123 to 2.125.

    No changes have been made to the installed code other than the version bump to keep in sync with the latest CPAN release.

  • CPAN::Meta::YAML has been upgraded from version 0.008 to 0.010.

    No material changes have been made to the installed code other than the version bump to keep in sync with the latest CPAN release.

  • Cwd has been upgraded from version 3.44 to 3.45.

    An obsolete #define has been removed from the XS code.

  • ExtUtils::Install has been upgraded from version 1.60 to 1.61.

    Some POD formatting errors in the documentation have been corrected.

  • ExtUtils::MakeMaker has been upgraded from version 6.76 to 6.80.

    Numerous updates and bug fixes are incorporated. See the Changes file in the CPAN distribution for full details.

  • feature has been upgraded from version 1.33 to 1.34.

    The new features postderef and postderef_qq have been added.

  • File::Fetch has been upgraded from version 0.42 to 0.44.

    No changes have been made to the installed code other than the version bump to keep in sync with the latest CPAN release.

  • File::Glob has been upgraded from version 1.21 to 1.22.

    Since Perl 5.16, code that used glob inside a thread had been unintentionally sharing state between threads. This has now been fixed. [perl #119897/#117823]

  • File::Temp has been upgraded from version 0.2301 to 0.2304.

    Required versions of other modules used are now listed more explicitly, base is now used instead of parent, and Exporter is no longer inherited from.

  • Getopt::Long has been upgraded from version 2.41 to 2.42.

    The floating point specifier name=f no longer erroneously accepts values like 1.2.3. [cpan #88707]

  • HTTP::Tiny has been upgraded from version 0.035 to 0.036.

    No changes have been made to the installed code other than the version bump to keep in sync with the latest CPAN release.

  • IPC::Cmd has been upgraded from version 0.84 to 0.84_01.

    No changes have been made to the installed code, but a test script has been fixed for Solaris (and potentially other SVR* variants).

  • JSON::PP has been upgraded from version 2.27202_01 to 2.27203.

    A return/or precedence issue in _incr_parse has been fixed.

  • List::Util has been upgraded from version 1.32 to 1.35.

    The list functions any, all, none, notall and product have been added, and reduce and first are now implemented even in the absence of MULTICALL.

  • Module::CoreList has been upgraded from version 2.99 to 3.00.

    The list of Perl versions covered has been updated, %delta is now exported, and a bug in is_core whereby it wrongly assumed a linear list of releases has been fixed.

  • Module::Metadata has been upgraded from version 1.000018 to 1.000019.

    Warnings are now disabled during version evaluation.

  • Parse::CPAN::Meta has been upgraded from version 1.4407 to 1.4409.

    No changes have been made to the installed code other than the version bump to keep in sync with the latest CPAN release.

  • Perl::OSType has been upgraded from version 1.005 to 1.006.

    No changes have been made to the installed code other than the version bump to keep in sync with the latest CPAN release.

  • PerlIO::scalar has been upgraded from version 0.16 to 0.17.

    An infinite loop when reading from a filehandle opened from a reference has been fixed by first stringifying the reference. [perl #119529]

  • The podlators modules have been upgraded from version 2.5.1 to 2.5.3.

    Numerous updates and bug fixes are incorporated. See the Changes file in the CPAN distribution for full details.

  • Test::Harness has been upgraded from version 3.28 to 3.29.

    All modules now use our rather than use vars, have use warnings enabled and use parent instead of @ISA.

  • Test::Simple has been upgraded from version 0.98_06 to 0.99.

    Numerous updates and bug fixes are incorporated. See the Changes file in the CPAN distribution for full details.

  • threads has been upgraded from version 1.87 to 1.89.

    The documentation of alarm and _handle has been updated.

  • Unicode::Normalize has been upgraded from version 1.16 to 1.17.

    The module now dies if it cannot get Unicode code points using unpack. (There is already a similar die if Unicode code points cannot be stringified using pack.)

  • Unicode::UCD has been upgraded from version 0.54 to 0.55.

    An internals-only change has been made to handle changes in format within some character database tables.

  • warnings has been upgraded from version 1.19 to 1.20.

    The new warnings category experimental::postderef has been added.

Documentation

Changes to Existing Documentation

perlref

  • Documentation of the new postfix dereference syntax has been added.

perlreguts

  • The documentation has been updated in the light of recent changes to regcomp.c.

perlvar

  • Three English variable names which have long been documented but do not actually exist have been removed from the documentation.

Diagnostics

The following additions or changes have been made to diagnostic output, including warnings and fatal error messages. For the complete list of diagnostic messages, see perldiag.

New Diagnostics

New Warnings

  • Attribute prototype(%s) discards earlier prototype attribute in same sub

    (W misc) A sub was declared as sub foo : prototype(A) : prototype(B) {}, for example. Since each sub can only have one prototype, the earlier declaration(s) are discarded while the last one is applied.

  • Postfix dereference is experimental

    (S experimental::postderef) This warning is emitted if you use the experimental postfix dereference syntax. Simply suppress the warning if you want to use the feature, but know that in doing so you are taking the risk of using an experimental feature which may change or be removed in a future Perl version:

    no warnings "experimental::postderef";
    use feature "postderef", "postderef_qq";
    $ref->$*;
    $aref->@*;
    $aref->@[@indices];
    ... etc ...
  • Prototype '%s' overridden by attribute 'prototype(%s)' in %s

    (W prototype) A prototype was declared in both the parentheses after the sub name and via the prototype attribute. The prototype in parentheses is useless, since it will be replaced by the prototype from the attribute before it's ever used.

Utility Changes

a2p

  • A possible crash from an off-by-one error when trying to access before the beginning of a buffer has been fixed. [perl #120244]

Testing

  • The new prototype attribute syntax is tested by a new test script, t/op/attrproto.t.

  • The new test script t/io/closepid.t tests that close on the original of a popen handle dupped to a standard handle no longer blocks internally on waitpid(0, ...).

  • The new postfix dereference syntax is tested by a new test script, t/op/postfixderef.t.

Platform Support

Platform-Specific Notes

Windows

The Windows MinGW/gcc build was broken in Perl 5.19.4 for some recent versions of gcc-4.8, including those from http://mingw-w64.sourceforge.net/ . This has now been fixed. [perl #120236]

Selected Bug Fixes

  • last no longer returns values that the same statement has accumulated so far, fixing amongst other things the long-standing bug that push @a, last would try to return the @a, copying it like a scalar in the process and resulting in the error, "Bizarre copy of ARRAY in last." [perl #3112]

  • An optimization in Perl 5.18 made incorrect assumptions causing a bad interaction with the Devel::CallParser CPAN module. This was partially fixed in Perl 5.19.4, but the fix was not sufficient and another fault has now been corrected.

  • In some cases, closing file handles opened to pipe to or from a process, which had been duplicated into a standard handle, would call perl's internal waitpid wrapper with a pid of zero. With the fix for [perl #85228] this zero pid was passed to waitpid, possibly blocking the process. This wait for process zero no longer occurs. [perl #119893]

  • The code that parses regex backrefs (or ambiguous backref/octals) such as \123 did a simple atoi(), which could wrap round to negative values on long digit strings and cause segmentation faults. This has now been fixed. [perl #119505]

  • select used to ignore magic on the fourth (timeout) argument, leading to effects such as select blocking indefinitely rather than the expected sleep time. This has now been fixed. [perl #120102]

  • The class name in for my class $foo is now parsed correctly. In the case of the second character of the class name being followed by a digit (e.g. 'a1b') this used to give the error "Missing $ on loop variable". [perl #120112]

Acknowledgements

Perl 5.19.5 represents approximately 4 weeks of development since Perl 5.19.4 and contains approximately 76,000 lines of changes across 710 files from 27 authors.

Perl continues to flourish into its third decade thanks to a vibrant community of users and developers. The following people are known to have contributed the improvements that became Perl 5.19.5:

Andy Dougherty, Brian Fraser, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari Mannsåker, Daniel Dragan, David Golden, David Mitchell, David Nicol, Dominic Hargreaves, Eric Brine, Father Chrysostomos, Gideon Israel Dsouza, Hio, James E Keenan, Jerry D. Hedden, Jesse Luehrs, Karl Williamson, Matthew Horsfall, Max Maischein, Neil Bowers, Nicholas Clark, Peter Martini, Philip Guenther, Ricardo Signes, Steve Hay, Tony Cook.

The list above is almost certainly incomplete as it is automatically generated from version control history. In particular, it does not include the names of the (very much appreciated) contributors who reported issues to the Perl bug tracker.

Many of the changes included in this version originated in the CPAN modules included in Perl's core. We're grateful to the entire CPAN community for helping Perl to flourish.

For a more complete list of all of Perl's historical contributors, please see the AUTHORS file in the Perl source distribution.

Reporting Bugs

If you find what you think is a bug, you might check the articles recently posted to the comp.lang.perl.misc newsgroup and the perl bug database at http://rt.perl.org/perlbug/ . There may also be information at http://www.perl.org/ , the Perl Home Page.

If you believe you have an unreported bug, please run the perlbug program included with your release. Be sure to trim your bug down to a tiny but sufficient test case. Your bug report, along with the output of perl -V, will be sent off to perlbug@perl.org to be analysed by the Perl porting team.

If the bug you are reporting has security implications, which make it inappropriate to send to a publicly archived mailing list, then please send it to perl5-security-report@perl.org. This points to a closed subscription unarchived mailing list, which includes all the core committers, who will be able to help assess the impact of issues, figure out a resolution, and help co-ordinate the release of patches to mitigate or fix the problem across all platforms on which Perl is supported. Please only use this address for security issues in the Perl core, not for modules independently distributed on CPAN.

SEE ALSO

The Changes file for an explanation of how to view exhaustive details on what changed.

The INSTALL file for how to build Perl.

The README file for general stuff.

The Artistic and Copying files for copyright information.