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.
sub
s 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
andpostderef_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
andproduct
have been added, andreduce
andfirst
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 thanuse vars
, haveuse warnings
enabled anduse 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
die
s if it cannot get Unicode code points usingunpack
. (There is already a similardie
if Unicode code points cannot be stringified usingpack
.)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 onwaitpid(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 thatpush @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 asselect
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.