=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
[ List each enhancement as a =head2 entry ]
+=head2 C<rand> now uses a consistent random number generator
+
+Previously perl would use a platform specific random number generator, varying
+between the libc rand(), random() or drand48().
+
+This meant that the quality of perl's random numbers would vary from platform
+to platform, from the 15 bits of rand() on Windows to 48-bits on POSIX
+platforms such as Linux with drand48().
+
+Perl now uses its own internal 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 supports 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
=head1 Incompatible Changes
-XXX For a release on a stable branch, this section aspires to be:
+=head2 Locale decimal point character no longer leaks outside of
+S<C<use locale>> scope (with the exception of $!)
+
+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.
- There are no changes intentionally incompatible with 5.XXX.XXX
- If any exist, they are bugs, and we request that you submit a
- report. See L</Reporting Bugs> below.
+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>>.
-[ List each incompatible change as a =head2 entry ]
+Now, the only known place where S<C<use locale>> is not respected is in the
+stringification of L<$!|perlvar/$!>.
=head1 Deprecations
=head1 Performance Enhancements
-XXX Changes which enhance performance without changing behaviour go here.
-There may well be none in a stable release.
-
-[ List each enhancement as a =item entry ]
-
=over 4
=item *
-XXX
+The trie performance enhancement for regular expressions has now been extended
+to those compiled under C</iaa>.
=back
=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]
+
+=item *
+
+L<B::Concise> has been upgraded from version 0.98 to 0.99.
+
+The handling of the C<glob> operator, broken since Perl 5.17.6, has been fixed
+and handling of the new kvaslice and kvhslice operators have been added.
+
+=item *
+
+L<B::Deparse> has been upgraded from version 1.22 to 1.23.
+
+The new kvaslice and kvhslice operators have been added.
+
+=item *
+
L<Carp> has been upgraded from version 1.31 to 1.32.
-Carp now avoids some unwanted Unicode warnings on older Perls; doesn't
-affect behaviour with current Perl.
+=over 4
+
+=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.
+
+=item *
+
+C<Carp> now takes care not to clobber the status variables $! and $^E.
+
+=item *
+
+C<Carp> now won't vivify the C<overload::StrVal> glob or subroutine or the
+C<overload> stash.
+
+=item *
+
+C<Carp> now avoids some unwanted Unicode warnings on older Perls. This doesn't
+affect behaviour with current Perls.
+
+=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.
+
+=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.
+
+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.
+
+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. Support for GNU DLD has also been removed.
+
+=item *
+
+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. Encode also now uses L<parent> rather
+than L<base> throughout.
+
+=item *
+
+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.23.
+
+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.
+
+=item *
+
+L<FileCache> has been upgraded from version 1.08 to 1.09.
+
+This upgrade is part of a larger change to use L<parent> rather than L<base>.
+
+=item *
+
+L<Hash::Util::FieldHash> has been upgraded from version 1.12 to 1.13.
+
+This upgrade is part of a larger change to use L<parent> rather than L<base>.
+
+=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<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
+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]
+
+Added a C<bint> method for rounding towards zero. [perl #85296]
+
+=item *
+
+L<Math::BigInt::FastCalc> has been upgraded from version 0.30 to 0.31.
+
+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 *
=item *
-L<Module::Metadata> has been upgraded from version 1.000014 to 1.000016.
+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.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<Perl::OSType> has been upgraded from 1.003 to 1.004.
+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<Opcode> has been upgraded from version 1.25 to 1.26.
+
+The new kvaslice and kvhslice operators have been added.
+
+=item *
+
+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<Pod::Html> has been upgraded from version 1.20 to 1.21.
+
+This upgrade is part of a larger change to use L<parent> rather than L<base>.
+
+=item *
+
+L<re> has been upgraded from version 0.25 to 0.26.
+
+This upgrade is part of a larger change to support 64-bit string lengths in the
+regular expression engine.
+
+=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
+passing C<undef> to a subroutine by using NULL rather than &PL_sv_undef for
+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
+(C<"\0">) characters in pathnames and string arguments to other system calls.
+
+=item *
+
+L<XS::Typemap> has been upgraded from version 0.10 to 0.11.
+
+XXX TODO
+
=back
=head2 Removed Modules and Pragmata
=item *
-XXX L<message|perldiag/"message">
+L<Invalid \0 character in %s for %s: %s\0%s|perldiag/"Invalid \0 character in %s for %s: %s\0%s">
+
+(W syscalls) Embedded \0 characters in pathnames or other system call arguments
+produce a warning as of 5.20. The parts after the \0 were formerly ignored by
+system calls.
=back
=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 C<(?(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 C<(?(foobar))>, you might have
+seen "fo" or "f". For Unicode characters, you would generally get a corrupted
+string. The message has been changed to read:
+
+ Unknown switch condition (?(...)) in regex;
+
+Additionally, the C<'E<lt>-- HERE'> marker in the error will now point to the
+correct spot in the regex.
=back
=item *
-L<find2perl> now handler C<?> wildcards correctly. [perl #113054]
+L<find2perl> now handles C<?> wildcards correctly. [perl #113054]
=back
=item *
-XXX
+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
+
+Strictly only for a build where build files such as F<Makefile.SH> have not
+been updated by C<git> in an already configured and built tree.
=back
=item *
-XXX
+The test script F<t/bigmem/regexp.t> has been added to test that regular
+expression matches on very large strings now succeed as expected.
+
+=item *
+
+Various cases of C<die>, C<last>, C<goto> and C<exit> triggering C<DESTROY> are
+now tested by the new test script F<t/op/rt119311.t>.
+
+=item *
+
+The new test script F<t/win32/signal.t> tests that $! and $^E are now preserved
+across signal handlers by the Win32 signal emulation code.
+
+=item *
+
+The test script F<t/x2p/find2perl.t> has been added to test the F<find2perl>
+program on platforms where it is practical to do so.
=back
=over 4
-=item XXX-some-platform
+=item Bitrig
-XXX
+Compile support has been added for Bitrig, a fork of OpenBSD.
=back
=head2 Discontinued Platforms
-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
=over 4
-=item XXX-some-platform
+=item WinCE
-XXX
+The building of XS modules has largely been restored. Several still cannot
+(yet) be built but it is now possible to build Perl on WinCE with only a couple
+of further patches (to L<Socket> and L<ExtUtils::MakeMaker>), hopefully to be
+incorporated soon.
+
+=item GNU/Hurd
+
+The BSD compatibility library C<libbsd> is no longer required for builds.
=back
=item *
-XXX
+The internal representation has changed for the match variables $1, $2 etc.,
+$`, $&, $', ${^PREMATCH}, ${^MATCH} and ${^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
+&PL_sv_undef. &PL_sv_undef is no longer treated as a special value, so
+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
=item *
-XXX
+The value of $^E is now saved across signal handlers on Windows. [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 erroneously 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 $#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 @- and @+ 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 C<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 *
+
+${^MPEN} is no longer treated as a synonym for ${^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<=E<gt>> 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 they 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 *_ 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.
+
+=item *
+
+The warning "Scalar value @hash{foo} better written as $hash{foo}" now produces
+far fewer false positives. In particular, C<@hash{+function_returning_a_list}>
+and C<@hash{ qw "foo bar baz" }> no longer warn. The same applies to array
+slices. [perl #28380, #114024]
=back