This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for b846c0c86e5
[perl5.git] / pod / perldelta.pod
index fc07985..86ea9a9 100644 (file)
@@ -1,5 +1,11 @@
 =encoding utf8
 
+=for comment
+To do:
+3f40aba3 Merge branch 'ebcdic' into blead
+df8c7dee Fix segfault in filehandle duplication
+b66f3475 Fix PerlIO_get_cnt and friends
+
 =head1 NAME
 
 [ this is a template for a new perldelta file.  Any text flagged as XXX needs
@@ -27,6 +33,32 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
+=head2 rand() now uses a consistent random number generator
+
+Previously perl would use a platform specific random number generator,
+varying between the libc C<rand()>, C<random()> or C<drand48()>.
+
+This meant that the quality of perl's random numbers would vary from
+platform to platform, from the 15 bits of C<rand()> on Win32 to
+48-bits on POSIX platforms such as Linux with C<drand48()>.
+
+Perl now uses its own internal C<drand48()> implementation on all
+platforms.  [perl #115928]
+
+=head2 Better 64-bit support
+
+On 64-bit platforms, the internal array functions now use 64-bit offsets,
+allowing Perl arrays to hold more than 2**31 elements, if you have the
+memory available.
+
+The regular expression engine now supporst strings longer than 2**31
+characters.  [perl #112790, #116907]
+
+=head2 New slice syntax
+
+The new C<%hash{...}> and C<@array[...]> syntax returns a list of key/value
+(or index/value) pairs.
+
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -37,23 +69,23 @@ L</Selected Bug Fixes> section.
 
 =head1 Incompatible Changes
 
-=head2 Locale decimal point character no longer leaks outside of S<C<use locale>> scope
-(with the exception of C<$!>)
+=head2 Locale decimal point character no longer leaks outside of
+S<C<use locale>> scope (with the exception of C<$!>)
 
-This is actually a bug fix, but some code has come to rely on the bug
-being present, so this change is listed here.  The current locale that
-the program is running under is not supposed to be visible to Perl code
-except within the scope of a S<C<use locale>>.  However, until now under
-certain circumstances, the character used for a decimal point (often a
-comma) leaked outside the scope.
+This is actually a bug fix, but some code has come to rely on the bug being
+present, so this change is listed here.  The current locale that the program is
+running under is not supposed to be visible to Perl code except within the
+scope of a S<C<use locale>>.  However, until now under certain circumstances,
+the character used for a decimal point (often a comma) leaked outside the
+scope.
 
-This continues the work released in Perl v5.19.1.  It turns out that
-that did not catch all the leaks, including C<printf> and C<sprintf> not
-respecting S<C<use locale>>.  If your code is affected by this change,
-simply add a S<C<use locale>>.
+This continues the work released in Perl 5.19.1.  It turns out that that did
+not catch all the leaks, including C<printf> and C<sprintf> not respecting
+S<C<use locale>>.  If your code is affected by this change, simply add a
+S<C<use locale>>.
 
-Now, the only known place where C<'use locale'> is not respected is in
-the stringification of L<$!|perlvar/$!>.
+Now, the only known place where C<'use locale'> is not respected is in the
+stringification of L<$!|perlvar/$!>.
 
 =head1 Deprecations
 
@@ -92,8 +124,8 @@ as an updated module in the L</Modules and Pragmata> section.
 
 =item *
 
-The trie performance enhancement for regular expressions has now been
-extended to those compiled under C</iaa>.
+The trie performance enhancement for regular expressions has now been extended
+to those compiled under C</iaa>.
 
 =back
 
@@ -125,12 +157,19 @@ XXX
 
 =item *
 
+L<autodie> has been upgraded from version 2.20 to 2.21.
+
+Numerous improvements have been made, many speed-related.  See the F<Changes>
+file in the CPAN distribution for full details.
+
+=item *
+
 L<B> has been upgraded from version 1.45 to 1.46.
 
 The fix for [perl #118525] introduced a regression in the behaviour of
-C<B::CV::GV>, changing the return value from a C<B::SPECIAL> object on
-a C<NULL> C<CvGV> to C<undef>.  C<B::CV::GV> again returns a
-C<B::SPECIAL> object in this case. [perl #119351]
+C<B::CV::GV>, changing the return value from a C<B::SPECIAL> object on a
+C<NULL> C<CvGV> to C<undef>.  C<B::CV::GV> again returns a C<B::SPECIAL>
+object in this case. [perl #119351]
 
 =item *
 
@@ -146,9 +185,14 @@ L<Carp> has been upgraded from version 1.31 to 1.32.
 
 =item *
 
-In stack traces, subroutine arguments that are strings are now quoted
-in a consistent manner, regardless of what characters they contain and
-how they're internally represented.
+In stack traces, subroutine arguments that are strings are now quoted in a
+consistent manner, regardless of what characters they contain and how they're
+internally represented.
+
+=item *
+
+C<Carp> now takes care not to clobber the status variables C<$!> and
+C<$^E>.
 
 =item *
 
@@ -157,24 +201,46 @@ C<overload> stash.
 
 =item *
 
-C<Carp> now avoids some unwanted Unicode warnings on older Perls.  This
-doesn't affect behaviour with current Perl.
+C<Carp> now avoids some unwanted Unicode warnings on older Perls.  This doesn't
+affect behaviour with current Perl.
 
 =item *
 
-C<Carp::Heavy> detects version mismatch with C<Carp>, to give a good
-error message if a current (stub) C<Carp::Heavy> gets loaded by an old
-C<Carp> that expects C<Carp::Heavy> to provide subroutines.
+C<Carp::Heavy> detects version mismatch with C<Carp>, to give a good error
+message if a current (stub) C<Carp::Heavy> gets loaded by an old C<Carp> that
+expects C<Carp::Heavy> to provide subroutines.
 
 =back
 
 =item *
 
+L<charnames> has been upgraded from version 1.38 to 1.39.
+
+This module now works on EBCDIC platforms.
+
+=item *
+
+L<CPAN::Meta> has been upgraded from version 2.132140 to 2.132510.
+
+No changes have been made to the installed code other than the version bump to
+keep in sync with the latest CPAN release.
+
+=item *
+
+L<CPAN::Meta::Requirements> has been upgraded from version 2.122 to 2.123.
+
+No changes have been made to the installed code other than the version bump to
+keep in sync with the latest CPAN release.
+
+=item *
+
 L<Data::Dumper> has been upgraded from version 2.148 to 2.149.
 
 This upgrade is part of a larger change to make the array interface 64-bit safe
 by using SSize_t instead of I32 for array indices.
 
+In addition, an EBCDIC fix has been applied.
+
 =item *
 
 L<Devel::Peek> has been upgraded from version 1.13 to 1.14.
@@ -183,6 +249,9 @@ This upgrade is part of a larger change to preserve referential identity when
 passing C<undef> to a subroutine by using NULL rather than &PL_sv_undef for
 nonexistent array elements.
 
+In addition, C<Dump> with no args was broken in Perl 5.19.3, but has now been
+fixed.
+
 =item *
 
 L<DynaLoader> has been upgraded from version 1.19 to 1.20.
@@ -190,39 +259,87 @@ L<DynaLoader> has been upgraded from version 1.19 to 1.20.
 The documentation now makes it clear, as has always been the case, that
 C<dl_unload_file> is only called automatically to unload all loaded shared
 objects if the perl interpreter was built with the C macro
-DL_UNLOAD_ALL_AT_EXIT defined.
+DL_UNLOAD_ALL_AT_EXIT defined.  Support for GNU DLD has also been removed.
 
 =item *
 
-L<Encode> has been upgraded from version 2.52 to 2.54.
+L<Encode> has been upgraded from version 2.52 to 2.55.
 
 An erroneous early return in C<decode_utf8> has been removed, and a bug in
-C<_utf8_on> under COW has been fixed.
+C<_utf8_on> under COW has been fixed.  Encode also now uses L<parent> rather
+than L<base> throughout.
 
 =item *
 
-L<ExtUtils::MakeMaker> has been upgraded from version 6.72 to 6.74.
+L<Exporter> has been upgraded from version 5.69 to 5.70.
+
+A number of typos have been corrected in the documentation.
+
+=item *
+
+L<ExtUtils::CBuilder> has been upgraded from version 0.280205 to 0.280212.
+
+No changes have been made to the installed code other than the version bump to
+keep in sync with the latest CPAN release.
+
+=item *
+
+L<ExtUtils::Command> has been upgraded from version 1.17 to 1.18.
+
+No changes have been made to the installed code other than the version bump to
+keep in sync with the latest CPAN release.
+
+=item *
+
+L<ExtUtils::MakeMaker> has been upgraded from version 6.72 to 6.76.
 
 Numerous updates and bug fixes are incorporated.  See the F<Changes> file for
 full details.
 
 =item *
 
-L<ExtUtils::ParseXS> has been upgraded from version 3.21 to 3.22.
+L<ExtUtils::ParseXS> has been upgraded from version 3.21 to 3.23.
 
-No changes have been made other than the version bump to keep in sync with the
-latest CPAN release.
+Unquoted "here-doc" markers for typemaps can now be optionally followed by
+a semicolon, just like quoted markers.  [perl #119761]
+
+=item *
+
+L<File::Find> has been upgraded from version 1.24 to 1.25.
+
+Better diagnostics are now provided in the case of a failed C<chdir>.
 
 =item *
 
 L<File::Glob> has been upgraded from version 1.20 to 1.21.
 
-C<glob()> now warns in the context of C<use warnings "syscalls";> if
-the supplied pattern has an internal NUL (C<"\0">) character.
+C<glob()> now warns in the context of C<use warnings "syscalls";> if the
+supplied pattern has an internal NUL (C<"\0">) character.
+
+=item *
+
+L<HTTP::Tiny> has been upgraded from version 0.034 to 0.035.
+
+Encoded data from C<post_form> now preserves term order if data is provided as
+an array reference.  (They are still sorted for consistency if provided as a
+hash reference.)
 
 =item *
 
-L<IPC::Open3> has been upgraded from 1.15 to 1.16.
+L<I18N::LangTags> has been upgraded from version 0.39 to 0.40.
+
+Bosnian has now joined Croatian and Serbian in the lists of mutually
+intelligible Slavic languages. [perl #72594]
+
+=item *
+
+L<IO> has been upgraded from version 1.28 to 1.29.
+
+A minor internals-only change has been made to the XS code.
+
+=item *
+
+L<IPC::Open3> has been upgraded from version 1.15 to 1.16.
 
 This upgrade is part of a larger change to preserve referential identity when
 passing C<undef> to a subroutine by using NULL rather than &PL_sv_undef for
@@ -230,10 +347,17 @@ nonexistent array elements.
 
 =item *
 
+L<Locale::Codes> has been upgraded from version 3.26 to 3.27.
+
+New codes have been added and the (deprecated) set of FIPS-10 country codes has
+been removed.
+
+=item *
+
 L<Math::BigInt> has been upgraded from version 1.9992 to 1.9993.
 
-Cleaned up the L<Math::BigInt> and L<Math::BigFloat> documentation to
-be more consistent with other perl documentation. [perl #86686]
+Cleaned up the L<Math::BigInt> and L<Math::BigFloat> documentation to be more
+consistent with other perl documentation. [perl #86686]
 
 Added a bint() method for rounding towards zero. [perl #85296]
 
@@ -252,38 +376,74 @@ The list of Perl versions covered has been updated.
 
 =item *
 
-L<Module::Load::Conditional> has been upgraded from version 0.54 to 0.56.
+L<Module::Load::Conditional> has been upgraded from version 0.54 to 0.58.
 
 C<requires> has been made more robust. [cpan #83728]
 
 =item *
 
-L<Module::Metadata> has been upgraded from version 1.000014 to 1.000016.
+L<Module::Metadata> has been upgraded from version 1.000014 to 1.000018.
 
 The module's DESCRIPTION has been re-worded regarding safety/security to
-satisfy CVE-2013-1437.
+satisfy CVE-2013-1437.  Also, versions are now detainted if needed. [cpan
+#88576]
 
 =item *
 
-L<mro> has been upgraded from 1.13 to 1.14.
+L<mro> has been upgraded from version 1.13 to 1.14.
 
 This upgrade is part of a larger change to make the array interface 64-bit safe
 by using SSize_t instead of I32 for array indices.
 
 =item *
 
-L<Perl::OSType> has been upgraded from version 1.003 to 1.004.
+L<parent> has been upgraded from version 0.226 to 0.227.
+
+No changes have been made to the installed code other than the version bump to
+keep in sync with the latest CPAN release.
+
+=item *
+
+L<Parse::CPAN::Meta> has been upgraded from version 1.4405 to 1.4407.
+
+No changes have been made to the installed code other than the version bump to
+keep in sync with the latest CPAN release.
+
+=item *
+
+L<Perl::OSType> has been upgraded from version 1.003 to 1.005.
 
 The Unix OSType 'bitrig' has been added.
 
 =item *
 
+L<perlfaq> has been upgraded from version 5.0150043 to 5.0150044.
+
+The use of C<gensym> in a number of examples has been removed, the use of C<&>
+in subroutine calls is now clarified and several new questions have been
+answered.
+
+=item *
+
 L<re> has been upgraded from version 0.25 to 0.26.
 
 A function signature has been corrected in the XS implementation.
 
 =item *
 
+L<Scalar::Util> has been upgraded from version 1.31 to 1.32.
+
+The documentation of C<blessed> has been improved to mention the fact that
+package "0" is defined but false.
+
+=item *
+
+L<Socket> has been upgraded from version 2.011 to 2.012.
+
+Syntax errors when building on the WinCE platform have been fixed. [cpan #87389]
+
+=item *
+
 L<Storable> has been upgraded from version 2.46 to 2.47.
 
 This upgrade is part of a larger change to preserve referential identity when
@@ -292,6 +452,40 @@ nonexistent array elements.
 
 =item *
 
+L<Term::ReadLine> has been upgraded from version 1.10 to 1.14.
+
+Term::ReadLine::EditLine support has been added.
+
+=item *
+
+L<Time::Piece> has been upgraded from version 1.22 to 1.23.
+
+Day of year parsing (like "%y%j") has been fixed.
+
+=item *
+
+L<Unicode::Collate> has been upgraded from version 0.98 to 0.99.
+
+By default, out-of-range values are replaced with C<U+FFFD> (REPLACEMENT
+CHARACTER) when C<UCA_Version> E<gt>= 22, or ignored when C<UCA_Version> E<lt>=
+20.  When C<UCA_Version> E<gt>= 22, the weights of out-of-range values can be
+overridden.
+
+=item *
+
+L<Unicode::UCD> has been upgraded from version 0.53 to 0.54.
+
+This module now works on EBCDIC platforms.
+
+=item *
+
+L<version> has been upgraded from version 0.9903 to 0.9904.
+
+No changes have been made to the installed code other than the version bump to
+keep in sync with the latest CPAN release.
+
+=item *
+
 L<warnings> has been upgraded from version 1.18 to 1.19.
 
 The C<syscalls> warnings category has been added to check for embedded NUL
@@ -388,7 +582,25 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-XXX Describe change here
+Warnings and errors from the regexp engine are now UTF-8 clean
+
+=item *
+
+The "Unknown switch condition" error message has some slight changes.
+This error triggers when there is an unknown condition in a (?(foo))
+conditional; The error message used to read:
+
+    Unknown switch condition (?(%s in regex;
+
+But what %s could be was mostly up to luck; For (?(foobar)), you
+might've seen "fo" or "f".  For Unicode characters, you'd generally
+get a corrupted string.
+The message was changed to read:
+
+    Unknown switch condition (?(...)) in regex;
+
+And additionally, the '<-- HERE' marker in the error will now point
+to the correct spot in the regex.
 
 =back
 
@@ -424,11 +636,10 @@ L</Platform Support> section, instead.
 
 =item *
 
-The F<Makefile.PL> for C<SDBM_File> now generates a better F<Makefile>,
-which avoids a race condition during parallel makes, which could cause the
-build to fail. This is the last known parallel make problem (on *nix
-platforms), and therefore we believe that a parallel make should now always
-be error free.
+The F<Makefile.PL> for C<SDBM_File> now generates a better F<Makefile>, which
+avoids a race condition during parallel makes, which could cause the build to
+fail.  This is the last known parallel make problem (on *nix platforms), and
+therefore we believe that a parallel make should now always be error free.
 
 =for comment
 
@@ -489,7 +700,7 @@ source tree.
 
 =item Bitrig
 
-Compile support has been added for Bitrig, a fork of OpenBSD
+Compile support has been added for Bitrig, a fork of OpenBSD.
 
 =back
 
@@ -497,11 +708,16 @@ Compile support has been added for Bitrig, a fork of OpenBSD
 
 XXX List any platforms that this version of perl no longer compiles on.
 
+Configure hints and conditional code for several very old platforms
+has been removed.  We have not received reports for these in many years,
+typically not since perl-5.6.0.
+
 =over 4
 
-=item XXX-some-platform
+=item AT&T 3b1
 
-XXX
+Configure support for the 3b1, also known as the AT&T Unix PC (and the
+similar AT&T 7300), has been removed.
 
 =back
 
@@ -535,7 +751,19 @@ well.
 
 =item *
 
-XXX
+The internal representation has changed for the match variables C<$1>, C<$2>
+I<etc.>, C<$`>, C<$&>, C<$'>, C<${^PREMATCH}>, C<${^MATCH}> and
+C<${^POSTMATCH>.  It uses slightly less memory, avoids string comparisons
+and numeric conversions during lookup, and uses 23 fewer lines of C.  This
+change should not affect any external code.
+
+=item *
+
+Arrays now use NULL internally to represent unused slots, instead of
+C<&PL_sv_undef>.  C<&PL_sv_undef> is no longer treated as a special value,
+so C<av_store(av, 0, &PL_sv_undef)> will cause element 0 of that array to
+hold a read-only undefined scalar.  C<$array[0] = anything> will croak and
+C<\$array[0]> will compare equal to C<\undef>.
 
 =back
 
@@ -550,8 +778,161 @@ files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
 =item *
 
-The value of C<$^E> is now saved across signal handlers on
-Win32. [perl #85104]
+The value of C<$^E> is now saved across signal handlers on Win32. [perl #85104]
+
+=item *
+
+A lexical filehandle (as in C<open my $fh...>) is usually given a name
+based on the current package and the name of the variable; e.g.,
+"main::$fh".  Under recursion, the filehandle was losing the "$fh" part of
+the name.  This has been fixed.
+
+=item *
+
+Perl 5.19.3 accidentally extended the previous bug to all closures, even
+when not called recursively; i.e., lexical handles in closure would always
+be called "main::" or "MyPackage::" etc.  This has been fixed.
+
+=item *
+
+Uninitialized values returned by XSUBs are no longer exempt from
+uninitialized warnings.  [perl #118693]
+
+=item *
+
+C<elsif ("")> no longer erroneous produces a warning about void context.
+[perl #118753]
+
+=item *
+
+Passing C<undef> to a subroutine now causes @_ to contain the same read-only undefined scalar that C<undef> returns.  Furthermore, C<exists $_[0]> will now return true if C<undef> was the first argument.
+[perl #7508, #109726].
+
+=item *
+
+Passing a nonexistent array element to a subroutine does not usually
+autovivify it unless the subroutine modifies its argument.  This did not
+work correctly with negative indices and with nonexistent elements within
+the array.  The element would be vivified immediately.  The delayed
+vivification has been extended to work with those.  [perl #118691]
+
+=item *
+
+Assigning references or globs to the scalar returned by C<$#foo> after the
+@foo array has been freed no longer causes assertion failures on debugging
+builds and memory leaks on regular builds.
+
+=item *
+
+Perl 5.19.2 threw line numbers off after some cases of line breaks
+following keywords, such as
+
+   1 unless
+   1;
+
+This has been fixed.  [perl #118931]
+
+=item *
+
+On 64-bit platforms, large ranges like 1..1000000000000 no longer crash,
+but eat up all your memory instead.  [perl #119161]
+
+=item *
+
+C<__DATA__> now puts the C<DATA> handle in the right package, even if the
+current package has been renamed through glob assignment.
+
+=item *
+
+The string position set by C<pos> could shift if the string changed
+representation internally to or from utf8.  This could happen, e.g., with
+references to objects with string overloading.
+
+=item *
+
+Taking references to the return values of two C<pos> calls with the same
+argument, and then assigning a reference to one and C<undef> to the other,
+could result in assertion failures or memory leaks.
+
+=item *
+
+Elements of C<@-> and C<@+> now update correctly when they refer to
+nonexistent captures.  Previously, a referenced element (C<$ref = \$-[1]>) 
+could refer to the wrong match after subsequent matches.
+
+=item *
+
+When C<die>, C<last>, C<next>, C<redo>, C<goto> and C<exit> unwind the
+scope, it is possible for DESTROY recursively to call a subroutine or
+format that is currently being exited.  It that case, sometimes the lexical
+variables inside the sub would start out having values from the outer call,
+instead of being undefined as they should.  This has been fixed.
+[perl #119311].
+
+=item *
+
+C<${^MPEN>} is no longer treated as a synonym for C<${^MATCH}>.
+
+=item *
+
+Perl now tries a little harder to return the correct line number in
+C<(caller)[2]>.  [perl #115768]
+
+=item *
+
+Line numbers inside multiline quote-like operators are now reported correctly.  [perl #3643]
+
+=item *
+
+C<#line> directives inside code embedded in quote-like operators are now respected.
+
+=item *
+
+Line numbers are now correct inside the second here-doc when two here-doc
+markers occur on the same line.
+
+=item *
+
+Starting with Perl 5.12, line numbers were off by one if the B<-d> switch
+was used on the #! line.  Now they are correct.
+
+=item *
+
+Perl 5.19.2 inadvertently stopped some lines of code from being available
+to the debugger if C<< => >> occurred at the beginning of a line and the
+previous line ended with a keyword.  This is now fixed.
+
+=item *
+
+Perl 5.19.2 allowed the PERL5DB environment variable to contain multiple
+lines of code.  But those lines were not made available to the debugger.
+Now the are all stuffed into line number 0, accessible via C<$dbline[0]>
+in the debugger.
+
+=item *
+
+An optimisation in Perl 5.18 made incorrect assumptions causing a bad
+interaction with the L<Devel::CallParser> CPAN module.  If the module was
+loaded, then lexical variables declared in separate statements following a C<my(...)> list might fail to be cleared on scope exit.
+
+=item *
+
+C<&xsub> and C<goto &xsub> calls now allow the called subroutine to
+autovivify elements of @_.
+
+=item *
+
+C<&xsub> and C<goto &xsub> no longer crash if C<*_> has been undefined and
+has no ARRAY entry (i.e., @_ does not exist).
+
+=item *
+
+C<&xsub> and C<goto &xsub> now work with tied @_.
+
+=item *
+
+Overlong identifiers no longer cause a buffer overflow (and a crash).  They
+started doing so in Perl 5.18.
 
 =back