This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add new perldelta for 5.19.5
authorSteve Hay <steve.m.hay@googlemail.com>
Fri, 20 Sep 2013 16:49:09 +0000 (17:49 +0100)
committerSteve Hay <steve.m.hay@googlemail.com>
Fri, 20 Sep 2013 16:49:09 +0000 (17:49 +0100)
MANIFEST
Makefile.SH
pod/.gitignore
pod/perl.pod
pod/perl5194delta.pod [new file with mode: 0644]
pod/perldelta.pod
vms/descrip_mms.template
win32/Makefile
win32/makefile.mk
win32/pod.mak

index a0e1c4a..d061153 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -4623,6 +4623,7 @@ pod/perl5190delta.pod             Perl changes in version 5.19.0
 pod/perl5191delta.pod          Perl changes in version 5.19.1
 pod/perl5192delta.pod          Perl changes in version 5.19.2
 pod/perl5193delta.pod          Perl changes in version 5.19.3
+pod/perl5194delta.pod          Perl changes in version 5.19.4
 pod/perl561delta.pod           Perl changes in version 5.6.1
 pod/perl56delta.pod            Perl changes in version 5.6
 pod/perl581delta.pod           Perl changes in version 5.8.1
index ecaa8ac..53bb102 100755 (executable)
@@ -503,7 +503,7 @@ mini_obj = $(minindt_obj) $(MINIDTRACE_O)
 ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
 obj = $(ndt_obj) $(DTRACE_O)
 
-perltoc_pod_prereqs = extra.pods pod/perl5194delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
+perltoc_pod_prereqs = extra.pods pod/perl5195delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
 generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs)
 generated_headers = uudmap.h bitcount.h mg_data.h
 
@@ -981,9 +981,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc
 pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
        $(MINIPERL) pod/perlmodlib.PL -q
 
-pod/perl5194delta.pod: pod/perldelta.pod
-       $(RMS) pod/perl5194delta.pod
-       $(LNS) perldelta.pod pod/perl5194delta.pod
+pod/perl5195delta.pod: pod/perldelta.pod
+       $(RMS) pod/perl5195delta.pod
+       $(LNS) perldelta.pod pod/perl5195delta.pod
 
 extra.pods: $(MINIPERL_EXE)
        -@test ! -f extra.pods || rm -f `cat extra.pods`
index 5a54c7f..6e2449c 100644 (file)
@@ -57,7 +57,7 @@
 /roffitall
 
 # generated
-/perl5194delta.pod
+/perl5195delta.pod
 /perlapi.pod
 /perlintern.pod
 *.html
index b14624d..996f791 100644 (file)
@@ -179,6 +179,7 @@ aux a2p c2ph h2ph h2xs perlbug pl2pm pod2html pod2man s2p splain xsubpp
 
     perlhist           Perl history records
     perldelta          Perl changes since previous version
+    perl5194delta      Perl changes in version 5.19.4
     perl5193delta      Perl changes in version 5.19.3
     perl5192delta      Perl changes in version 5.19.2
     perl5191delta      Perl changes in version 5.19.1
diff --git a/pod/perl5194delta.pod b/pod/perl5194delta.pod
new file mode 100644 (file)
index 0000000..7221e67
--- /dev/null
@@ -0,0 +1,1235 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5194delta - what is new for perl v5.19.4
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.19.3 release and the 5.19.4
+release.
+
+If you are upgrading from an earlier release such as 5.19.2, first read
+L<perl5193delta>, which describes differences between 5.19.2 and 5.19.3.
+
+=head1 Core Enhancements
+
+=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.  This
+does not make perl's C<rand> cryptographically secure.  [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]
+
+The functions PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt and
+PerlIO_set_ptrcnt now have SSize_t, rather than int, return values and
+parameters.
+
+=head2 New slice syntax
+
+The new C<%hash{...}> and C<%array[...]> syntax returns a list of key/value (or
+index/value) pairs.
+
+=head2 EBCDIC support
+
+Core Perl now mostly works on EBCDIC platforms.  This is not true of many
+modules, including some which are shipped with this release.  If you have
+resources to help continue this process, including test machines, send email to
+L<mailto:perl-mvs@perl.org>.
+
+As a result of this, certain XS functions are now deprecated; see L</Internal
+Changes>.
+
+=head1 Incompatible Changes
+
+=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.
+
+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 S<C<use locale>> is not respected is in the
+stringification of L<$!|perlvar/$!>.
+
+=head2 Assignments of Windows sockets error codes to $! now prefer F<errno.h> values over WSAGetLastError() values
+
+In previous versions of Perl, Windows sockets error codes as returned by
+WSAGetLastError() were assigned to $!, and some constants such as ECONNABORTED,
+not in F<errno.h> in VC++ (or the various Windows ports of gcc) were defined to
+corresponding WSAE* values to allow $! to be tested against the E* constants
+exported by L<Errno> and L<POSIX>.
+
+This worked well until VC++ 2010 and later, which introduced new E* constants
+with values E<gt> 100 into F<errno.h>, including some being (re)defined by perl
+to WSAE* values.  That caused problems when linking XS code against other
+libraries which used the original definitions of F<errno.h> constants.
+
+To avoid this incompatibility, perl now maps WSAE* error codes to E* values
+where possible, and assigns those values to $!.  The E* constants exported by
+L<Errno> and L<POSIX> are updated to match so that testing $! against them,
+wherever previously possible, will continue to work as expected, and all E*
+constants found in F<errno.h> are now exported from those modules with their
+original F<errno.h> values
+
+In order to avoid breakage in existing Perl code which assigns WSAE* values to
+$!, perl now intercepts the assignment and performs the same mapping to E*
+values as it uses internally when assigning to $! itself.
+
+However, one backwards-incompatibility remains: existing Perl code which
+compares $! against the numeric values of the WSAE* error codes that were
+previously assigned to $! will now be broken in those cases where a
+corresponding E* value has been assigned instead.  This is only an issue for
+those E* values E<lt> 100, which were always exported from L<Errno> and
+L<POSIX> with their original F<errno.h> values, and therefore could not be used
+for WSAE* error code tests (e.g. WSAEINVAL is 10022, but the corresponding
+EINVAL is 22).  (E* values E<gt> 100, if present, were redefined to WSAE*
+values anyway, so compatibility can be achieved by using the E* constants,
+which will work both before and after this change, albeit using different
+numeric values under the hood.)
+
+=head1 Deprecations
+
+=head2 Literal control characters in variable names
+
+This deprecation affects things like $\cT, where \cT is a literal control in
+the source code.  Surprisingly, it appears that originally this was intended as
+the canonical way of accessing variables like $^T, with the caret form only
+being added as an alternative.
+
+The literal control form is being deprecated for two main reasons.  It has what
+are likely unfixable bugs, such as $\cI not working as an alias for $^I, and
+their usage not being portable to non-ASCII platforms: While $^T will work
+everywhere, \cT is whitespace in EBCDIC.  [perl #119123]
+
+=head1 Performance Enhancements
+
+=over 4
+
+=item *
+
+The trie performance enhancement for regular expressions has now been extended
+to those compiled under /iaa.
+
+=back
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=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]
+
+L<B> version 1.44 (Perl 5.19.2) introduced four new B::OP methods, C<slabbed>,
+C<savefree>, C<static> and C<folded>, but these have never actually worked
+until now.  They used to croak.
+
+=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.
+
+=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 *
+
+L<Carp> also now shows subroutine arguments that are references to regexp
+objects in a consistent manner in stack traces.
+
+=item *
+
+L<Carp> now takes care not to clobber the status variables $! and $^E.
+
+=item *
+
+L<Carp> now won't vivify the C<overload::StrVal> glob or subroutine or the
+L<overload> stash.
+
+=item *
+
+L<Carp> now avoids some unwanted Unicode warnings on older Perls.  This doesn't
+affect behaviour with current Perls.
+
+=item *
+
+Carp::Heavy detects version mismatch with L<Carp>, to give a good error message
+if a current (stub) Carp::Heavy gets loaded by an old L<Carp> that expects
+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> has been upgraded from version 2.00 to 2.03-TRIAL.
+
+Numerous updates and bug fixes are incorporated.  See the F<Changes> file for
+full details.
+
+=item *
+
+L<CPAN::Meta> has been upgraded from version 2.132140 to 2.132620.
+
+META validation no longer allows a scalar value when a list was required for a
+field.
+
+=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
+non-existent array elements.
+
+In addition, C<Dump> with no args was broken in Perl 5.19.3, but has now been
+fixed.
+
+=item *
+
+L<diagnostics> has been upgraded from version 1.32 to 1.33.
+
+C<=back> is now treated as the end of a warning description, thus keeping any
+trailing data in the file from showing up as part of the last warning's
+description.  [perl #119817]
+
+=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<Errno> has been upgraded from version 1.19 to 1.20.
+
+The list of E* constants exported on Windows has been updated to reflect the
+changes made in the assignment of sockets error codes to $! (see
+L</Incompatible Changes>).
+
+=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.280210 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::Copy> has been upgraded from version 2.27 to 2.28.
+
+The documentation of C<copy> now makes it clear that trying to copy a file into
+a non-existent directory is not supported.  [perl #119539]
+
+=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<IO::Socket> has been upgraded from version 1.36 to 1.37.
+
+The C<connect> method has been updated in the light of changes made in the
+assignment of sockets error codes to $! on Windows (see L</Incompatible
+Changes>).
+
+=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
+non-existent array elements.
+
+=item *
+
+L<JSON::PP> has been patched from version 2.27202 to 2.27202_01.
+
+A precedence issue has been fixed in the return value of a private subroutine.
+
+=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 *
+
+L<Module::CoreList> has been upgraded from version 2.97 to 2.99.
+
+The list of Perl versions covered has been updated.
+
+A function C<is_core> has been added, which returns true if the specified
+module was bundled with Perl.  Optionally you can specify a minimum version of
+the module, and the specific version of Perl you're interested in (defaults to
+$^V, the running version of Perl).
+
+=item *
+
+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.  Also, versions are now detainted if needed.  [cpan
+#88576]
+
+=item *
+
+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.228.
+
+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<POSIX> has been upgraded from version 1.34 to 1.35.
+
+The list of E* constants exported on Windows has been updated to reflect the
+changes made in the assignment of sockets error codes to $! (see
+L</Incompatible Changes>).
+
+=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
+non-existent array elements.
+
+=item *
+
+L<Term::ReadLine> has been upgraded from version 1.13 to 1.14.
+
+Term::ReadLine::EditLine support has been added.
+
+=item *
+
+L<Test::Simple> has been patched from version 0.98 to 0.98_06.
+
+A precedence issue has been fixed in the return value of a private subroutine
+in L<Test::Builder>.
+
+=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 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.
+[perl #117265]
+
+=item *
+
+L<XS::Typemap> has been upgraded from version 0.10 to 0.11.
+
+This upgrade is part of the change to remove the uninitialized warnings
+exemption for uninitialized values returned by XSUBs (see the L</Selected Bug
+Fixes> section).
+
+=back
+
+=head1 Documentation
+
+=head2 New Documentation
+
+=head3 L<perlrepository>
+
+This document was removed (actually, renamed L<perlgit> and given a major
+overhaul) in Perl 5.13.10, causing Perl documentation websites to show the now
+out of date version in Perl 5.12 as the latest version.  It has now been
+restored in stub form, directing readers to current information.
+
+=head2 Changes to Existing Documentation
+
+=head3 L<perldata>
+
+=over 4
+
+=item *
+
+New sections have been added to document the new index/value array slice and
+key/value hash slice syntax.
+
+=back
+
+=head3 L<perldebguts>
+
+=over 4
+
+=item *
+
+The C<DB::goto> and C<DB::lsub> debugger subroutines are now documented.  [perl
+#77680]
+
+=back
+
+=head3 L<perlguts>
+
+=over 4
+
+=item *
+
+Numerous minor changes have been made to reflect changes made to the perl
+internals in this release.
+
+=back
+
+=head3 L<perlhack>
+
+=over 4
+
+=item *
+
+The L<SUPER QUICK PATCH GUIDE|perlhack/SUPER QUICK PATCH GUIDE> section has
+been updated.
+
+=back
+
+=head3 L<perlsub>
+
+=over 4
+
+=item *
+
+A list of subroutine names used by the perl implementation is now included.
+[perl #77680]
+
+=back
+
+=head1 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 L<perldiag>.
+
+=head2 New Diagnostics
+
+=head3 New Errors
+
+=over 4
+
+=item *
+
+L<delete argument is indexE<sol>value array slice, use array slice|perldiag/"delete argument is index/value array slice, use array slice">
+
+(F) You used index/value array slice syntax (C<%array[...]>) as the argument to
+C<delete>.  You probably meant C<@array[...]> with an @ symbol instead.
+
+=item *
+
+L<delete argument is keyE<sol>value hash slice, use hash slice|perldiag/"delete argument is key/value hash slice, use hash slice">
+
+(F) You used key/value hash slice syntax (C<%hash{...}>) as the argument to
+C<delete>.  You probably meant C<@hash{...}> with an @ symbol instead.
+
+=back
+
+=head3 New Warnings
+
+=over 4
+
+=item *
+
+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.
+
+=item *
+
+L<Possible precedence issue with control flow operator|perldiag/"Possible precedence issue with control flow operator">
+
+(W syntax) There is a possible problem with the mixing of a control flow
+operator (e.g. C<return>) and a low-precedence operator like C<or>.  Consider:
+
+    sub { return $a or $b; }
+
+This is parsed as:
+
+    sub { (return $a) or $b; }
+
+Which is effectively just:
+
+    sub { return $a; }
+
+Either use parentheses or the high-precedence variant of the operator.
+
+Note this may be also triggered for constructs like:
+
+    sub { 1 if die; }
+
+=item *
+
+L<Scalar value %%s[%s] better written as $%s[%s]|perldiag/"Scalar value %%s[%s] better written as $%s[%s]">
+
+(W syntax) In scalar context, you've used an array index/value slice (indicated
+by %) to select a single element of an array.  Generally it's better to ask for
+a scalar value (indicated by $).  The difference is that C<$foo[&bar]> always
+behaves like a scalar, both in the value it returns and when evaluating its
+argument, while C<%foo[&bar]> provides a list context to its subscript, which
+can do weird things if you're expecting only one subscript.  When called in
+list context, it also returns the index (what C<&bar> returns) in addition to
+the value.
+
+=item *
+
+L<Scalar value %%s{%s} better written as $%s{%s}|perldiag/"Scalar value %%s{%s} better written as $%s{%s}">
+
+(W syntax) In scalar context, you've used a hash key/value slice (indicated by
+%) to select a single element of a hash.  Generally it's better to ask for a
+scalar value (indicated by $).  The difference is that C<$foo{&bar}> always
+behaves like a scalar, both in the value it returns and when evaluating its
+argument, while C<@foo{&bar}> and provides a list context to its subscript,
+which can do weird things if you're expecting only one subscript.  When called
+in list context, it also returns the key in addition to the value.
+
+=item *
+
+L<Use of literal control characters in variable names is deprecated|perldiag/"Use of literal control characters in variable names is deprecated">
+
+(D deprecated) Using literal control characters in the source to refer to the
+^FOO variables, like $^X and ${^GLOBAL_PHASE} is now deprecated.  This only
+affects code like $\cT, where \cT is a control in the source code: ${"\cT"} and
+$^T remain valid.
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+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.
+
+=item *
+
+The "%s "\x%X" does not map to Unicode" warning is now correctly listed as a
+severe warning rather than as a fatal error.
+
+=back
+
+=head1 Utility Changes
+
+=head3 L<find2perl>
+
+=over 4
+
+=item *
+
+L<find2perl> now handles C<?> wildcards correctly.  [perl #113054]
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+The F<Makefile.PL> for L<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
+
+=head1 Testing
+
+=over 4
+
+=item *
+
+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 *
+
+A bug that was fixed in Perl 5.15.4 is now tested by the new test script
+F<t/io/eintr_print.t>.  [perl #119097]
+
+=item *
+
+The new test scripts F<t/op/kvaslice.t> and F<t/op/kvhslice.t> test the new
+index/value array slice and key/value hash slice syntax respectively.
+
+=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/op/waitpid.t> tests the fix for [perl #85228] (see
+L</Selected Bug Fixes>).
+
+=item *
+
+The latest copyright years in the top-level F<README> file and the B<perl -v>
+output are now tested as matching each other by the new test script
+F<t/porting/copyright.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
+
+=head1 Platform Support
+
+=head2 New Platforms
+
+=over 4
+
+=item FreeMiNT
+
+Support has been added for FreeMiNT, a free open-source OS for the Atari ST
+system and its successors, based on the original MiNT that was officially
+adopted by Atari.
+
+=item Bitrig
+
+Compile support has been added for Bitrig, a fork of OpenBSD.
+
+=back
+
+=head2 Discontinued Platforms
+
+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 AT&T 3b1
+
+Configure support for the 3b1, also known as the AT&T Unix PC (and the similar
+AT&T 7300), has been removed.
+
+=back
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item VMS
+
+The C<PERL_ENV_TABLES> feature to control the population of %ENV at perl
+start-up was broken in Perl 5.16.0 but has now been fixed.
+
+=item Win32
+
+C<rename> and C<link> on Win32 now set $! to ENOSPC and EDQUOT when
+appropriate.  [perl #119857]
+
+=item WinCE
+
+Perl now builds again on WinCE, following locale-related breakage (WinCE has
+non-existent locale support) introduced around 5.19.1.  [perl #119443]
+
+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
+
+=head1 Internal Changes
+
+=over 4
+
+=item *
+
+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>.
+
+=item *
+
+The SV returned by HeSVKEY_force() now correctly reflects the UTF8ness of the
+underlying hash key when that key is not stored as a SV.  [perl #79074]
+
+=item *
+
+Certain rarely used functions and macros available to XS code are now, or are
+planned to be, deprecated.  These are:
+C<utf8n_to_uvuni> (use C<utf8_to_uvchr_buf> instead),
+C<utf8_to_uni_buf> (use C<utf8_to_uvchr_buf> instead),
+C<valid_utf8_to_uvuni> (use C<utf8_to_uvchr_buf> instead),
+C<uvuni_to_utf8> (use C<uvchr_to_utf8> instead),
+C<NATIVE_TO_NEED> (this did not work properly anyway),
+and C<ASCII_TO_NEED>  (this did not work properly anyway).
+
+Starting in this release, almost never does application code need to
+distinguish between the platform's character set and Latin1, on which the
+lowest 256 characters of Unicode are based.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+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 non-existent 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 non-existent 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 non-existent
+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 optimization 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]
+
+=item *
+
+C<$! = EINVAL; waitpid(0, WNOHANG);> no longer goes into an internal infinite
+loop.  [perl #85228]
+
+=item *
+
+Perl 5.19.3 accidentally caused C<\(1+2)> to return a reference to the same
+mutable scalar each time, so that modifications affect future evaluations.
+This has been fixed.  [perl #119501]
+
+=item *
+
+A possible segmentation fault in filehandle duplication has been fixed.
+
+=item *
+
+A subroutine in @INC can return a reference to a scalar containing the initial
+contents of the file.  However, that scalar was freed prematurely if not
+referenced elsewhere, giving random results.
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.19.4 represents approximately 4 weeks of development since Perl 5.19.3
+and contains approximately 31,000 lines of changes across 580 files from 42
+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.4:
+
+Andy Dougherty, Brian Fraser, Chris 'BinGOs' Williams, Christian Millour, Craig
+A. Berry, Daniel Dragan, David Golden, David Leadbeater, David Mitchell, Father
+Chrysostomos, Florian Ragwitz, François Perrad, H.Merijn Brand, James E
+Keenan, John Goodyear, John P. Linderman, John Peacock, Karl Williamson, kevin
+dawson, Leon Timmermans, Marco Peereboom, Matthew Horsfall, Nathan Glenn, Neil
+Bowers, Nicholas Clark, Niels Thykier, Niko Tyni, Owain G. Ainsworth, Peter
+John Acklam, Reini Urban, Ricardo Signes, Ruslan Zakirov, Slaven Rezic,
+Smylers, Steve Hay, Sullivan Beck, Toby Inkster, Tokuhiro Matsuno, Tony Cook,
+Victor Efimov, Zefram, Zsbán Ambrus.
+
+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 F<AUTHORS> file in the Perl source distribution.
+
+=head1 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 L<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 C<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.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
index 5d932f7..d87daef 100644 (file)
 
 =head1 NAME
 
-perldelta - what is new for perl v5.19.4
+[ this is a template for a new perldelta file.  Any text flagged as XXX needs
+to be processed before release. ]
+
+perldelta - what is new for perl v5.19.5
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.19.3 release and the 5.19.4
+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.2, first read
-L<perl5193delta>, which describes differences between 5.19.2 and 5.19.3.
-
-=head1 Core Enhancements
-
-=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.  This
-does not make perl's C<rand> cryptographically secure.  [perl #115928]
-
-=head2 Better 64-bit support
+If you are upgrading from an earlier release such as 5.19.3, first read
+L<perl5194delta>, which describes differences between 5.19.3 and 5.19.4.
 
-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.
+=head1 Notice
 
-The regular expression engine now supports strings longer than 2**31
-characters.  [perl #112790, #116907]
+XXX Any important notices here
 
-The functions PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt and
-PerlIO_set_ptrcnt now have SSize_t, rather than int, return values and
-parameters.
+=head1 Core Enhancements
 
-=head2 New slice syntax
+XXX New core language features go here.  Summarize user-visible core language
+enhancements.  Particularly prominent performance optimisations could go
+here, but most should go in the L</Performance Enhancements> section.
 
-The new C<%hash{...}> and C<%array[...]> syntax returns a list of key/value (or
-index/value) pairs.
+[ List each enhancement as a =head2 entry ]
 
-=head2 EBCDIC support
+=head1 Security
 
-Core Perl now mostly works on EBCDIC platforms.  This is not true of many
-modules, including some which are shipped with this release.  If you have
-resources to help continue this process, including test machines, send email to
-L<mailto:perl-mvs@perl.org>.
+XXX Any security-related notices go here.  In particular, any security
+vulnerabilities closed should be noted here rather than in the
+L</Selected Bug Fixes> section.
 
-As a result of this, certain XS functions are now deprecated; see L</Internal
-Changes>.
+[ List each security issue as a =head2 entry ]
 
 =head1 Incompatible Changes
 
-=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.
-
-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 S<C<use locale>> is not respected is in the
-stringification of L<$!|perlvar/$!>.
-
-=head2 Assignments of Windows sockets error codes to $! now prefer F<errno.h> values over WSAGetLastError() values
-
-In previous versions of Perl, Windows sockets error codes as returned by
-WSAGetLastError() were assigned to $!, and some constants such as ECONNABORTED,
-not in F<errno.h> in VC++ (or the various Windows ports of gcc) were defined to
-corresponding WSAE* values to allow $! to be tested against the E* constants
-exported by L<Errno> and L<POSIX>.
-
-This worked well until VC++ 2010 and later, which introduced new E* constants
-with values E<gt> 100 into F<errno.h>, including some being (re)defined by perl
-to WSAE* values.  That caused problems when linking XS code against other
-libraries which used the original definitions of F<errno.h> constants.
-
-To avoid this incompatibility, perl now maps WSAE* error codes to E* values
-where possible, and assigns those values to $!.  The E* constants exported by
-L<Errno> and L<POSIX> are updated to match so that testing $! against them,
-wherever previously possible, will continue to work as expected, and all E*
-constants found in F<errno.h> are now exported from those modules with their
-original F<errno.h> values
-
-In order to avoid breakage in existing Perl code which assigns WSAE* values to
-$!, perl now intercepts the assignment and performs the same mapping to E*
-values as it uses internally when assigning to $! itself.
-
-However, one backwards-incompatibility remains: existing Perl code which
-compares $! against the numeric values of the WSAE* error codes that were
-previously assigned to $! will now be broken in those cases where a
-corresponding E* value has been assigned instead.  This is only an issue for
-those E* values E<lt> 100, which were always exported from L<Errno> and
-L<POSIX> with their original F<errno.h> values, and therefore could not be used
-for WSAE* error code tests (e.g. WSAEINVAL is 10022, but the corresponding
-EINVAL is 22).  (E* values E<gt> 100, if present, were redefined to WSAE*
-values anyway, so compatibility can be achieved by using the E* constants,
-which will work both before and after this change, albeit using different
-numeric values under the hood.)
-
-=head1 Deprecations
-
-=head2 Literal control characters in variable names
+XXX For a release on a stable branch, this section aspires to be:
 
-This deprecation affects things like $\cT, where \cT is a literal control in
-the source code.  Surprisingly, it appears that originally this was intended as
-the canonical way of accessing variables like $^T, with the caret form only
-being added as an alternative.
-
-The literal control form is being deprecated for two main reasons.  It has what
-are likely unfixable bugs, such as $\cI not working as an alias for $^I, and
-their usage not being portable to non-ASCII platforms: While $^T will work
-everywhere, \cT is whitespace in EBCDIC.  [perl #119123]
-
-=head1 Performance Enhancements
+    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.
 
-=over 4
-
-=item *
-
-The trie performance enhancement for regular expressions has now been extended
-to those compiled under /iaa.
-
-=back
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules and Pragmata
-
-=over 4
-
-=item *
+[ List each incompatible change as a =head2 entry ]
 
-L<autodie> has been upgraded from version 2.20 to 2.21.
+=head1 Deprecations
 
-Numerous improvements have been made, many speed-related.  See the F<Changes>
-file in the CPAN distribution for full details.
+XXX Any deprecated features, syntax, modules etc. should be listed here.
 
-=item *
+=head2 Module removals
 
-L<B> has been upgraded from version 1.45 to 1.46.
+XXX Remove this section if inapplicable.
 
-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]
+The following modules will be removed from the core distribution in a
+future release, and will at that time need to be installed from CPAN.
+Distributions on CPAN which require these modules will need to list them as
+prerequisites.
 
-L<B> version 1.44 (Perl 5.19.2) introduced four new B::OP methods, C<slabbed>,
-C<savefree>, C<static> and C<folded>, but these have never actually worked
-until now.  They used to croak.
+The core versions of these modules will now issue C<"deprecated">-category
+warnings to alert you to this fact.  To silence these deprecation warnings,
+install the modules in question from CPAN.
 
-=item *
+Note that these are (with rare exceptions) fine modules that you are encouraged
+to continue to use.  Their disinclusion from core primarily hinges on their
+necessity to bootstrapping a fully functional, CPAN-capable Perl installation,
+not usually on concerns over their design.
 
-L<B::Concise> has been upgraded from version 0.98 to 0.99.
+=over
 
-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.
+XXX Note that deprecated modules should be listed here even if they are listed
+as an updated module in the L</Modules and Pragmata> section.
 
-=item *
+=back
 
-L<B::Deparse> has been upgraded from version 1.22 to 1.23.
+[ List each other deprecation as a =head2 entry ]
 
-The new kvaslice and kvhslice operators have been added.
+=head1 Performance Enhancements
 
-=item *
+XXX Changes which enhance performance without changing behaviour go here.
+There may well be none in a stable release.
 
-L<Carp> has been upgraded from version 1.31 to 1.32.
+[ List each enhancement as a =item entry ]
 
 =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 *
-
-L<Carp> also now shows subroutine arguments that are references to regexp
-objects in a consistent manner in stack traces.
-
-=item *
-
-L<Carp> now takes care not to clobber the status variables $! and $^E.
-
-=item *
-
-L<Carp> now won't vivify the C<overload::StrVal> glob or subroutine or the
-L<overload> stash.
-
-=item *
-
-L<Carp> now avoids some unwanted Unicode warnings on older Perls.  This doesn't
-affect behaviour with current Perls.
-
-=item *
-
-Carp::Heavy detects version mismatch with L<Carp>, to give a good error message
-if a current (stub) Carp::Heavy gets loaded by an old L<Carp> that expects
-Carp::Heavy to provide subroutines.
+XXX
 
 =back
 
-=item *
-
-L<charnames> has been upgraded from version 1.38 to 1.39.
-
-This module now works on EBCDIC platforms.
-
-=item *
-
-L<CPAN> has been upgraded from version 2.00 to 2.03-TRIAL.
-
-Numerous updates and bug fixes are incorporated.  See the F<Changes> file for
-full details.
-
-=item *
-
-L<CPAN::Meta> has been upgraded from version 2.132140 to 2.132620.
-
-META validation no longer allows a scalar value when a list was required for a
-field.
-
-=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
-non-existent array elements.
-
-In addition, C<Dump> with no args was broken in Perl 5.19.3, but has now been
-fixed.
-
-=item *
-
-L<diagnostics> has been upgraded from version 1.32 to 1.33.
-
-C<=back> is now treated as the end of a warning description, thus keeping any
-trailing data in the file from showing up as part of the last warning's
-description.  [perl #119817]
-
-=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<Errno> has been upgraded from version 1.19 to 1.20.
-
-The list of E* constants exported on Windows has been updated to reflect the
-changes made in the assignment of sockets error codes to $! (see
-L</Incompatible Changes>).
-
-=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.280210 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::Copy> has been upgraded from version 2.27 to 2.28.
-
-The documentation of C<copy> now makes it clear that trying to copy a file into
-a non-existent directory is not supported.  [perl #119539]
-
-=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<IO::Socket> has been upgraded from version 1.36 to 1.37.
-
-The C<connect> method has been updated in the light of changes made in the
-assignment of sockets error codes to $! on Windows (see L</Incompatible
-Changes>).
-
-=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
-non-existent array elements.
-
-=item *
-
-L<JSON::PP> has been patched from version 2.27202 to 2.27202_01.
-
-A precedence issue has been fixed in the return value of a private subroutine.
-
-=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 *
-
-L<Module::CoreList> has been upgraded from version 2.97 to 2.99.
-
-The list of Perl versions covered has been updated.
-
-A function C<is_core> has been added, which returns true if the specified
-module was bundled with Perl.  Optionally you can specify a minimum version of
-the module, and the specific version of Perl you're interested in (defaults to
-$^V, the running version of Perl).
-
-=item *
-
-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.  Also, versions are now detainted if needed.  [cpan
-#88576]
-
-=item *
-
-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.228.
-
-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<POSIX> has been upgraded from version 1.34 to 1.35.
-
-The list of E* constants exported on Windows has been updated to reflect the
-changes made in the assignment of sockets error codes to $! (see
-L</Incompatible Changes>).
-
-=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
-non-existent array elements.
-
-=item *
-
-L<Term::ReadLine> has been upgraded from version 1.13 to 1.14.
-
-Term::ReadLine::EditLine support has been added.
-
-=item *
-
-L<Test::Simple> has been patched from version 0.98 to 0.98_06.
-
-A precedence issue has been fixed in the return value of a private subroutine
-in L<Test::Builder>.
-
-=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 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.
+=head1 Modules and Pragmata
 
-No changes have been made to the installed code other than the version bump to
-keep in sync with the latest CPAN release.
+XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/>
+go here.  If Module::CoreList is updated, generate an initial draft of the
+following sections using F<Porting/corelist-perldelta.pl>, which prints stub
+entries to STDOUT.  Results can be pasted in place of the '=head2' entries
+below.  A paragraph summary for important changes should then be added by hand.
+In an ideal world, dual-life modules would have a F<Changes> file that could be
+cribbed.
 
-=item *
+[ Within each section, list entries as a =item entry ]
 
-L<warnings> has been upgraded from version 1.18 to 1.19.
+=head2 New Modules and Pragmata
 
-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.
-[perl #117265]
+=over 4
 
 =item *
 
-L<XS::Typemap> has been upgraded from version 0.10 to 0.11.
-
-This upgrade is part of the change to remove the uninitialized warnings
-exemption for uninitialized values returned by XSUBs (see the L</Selected Bug
-Fixes> section).
+XXX
 
 =back
 
-=head1 Documentation
-
-=head2 New Documentation
-
-=head3 L<perlrepository>
-
-This document was removed (actually, renamed L<perlgit> and given a major
-overhaul) in Perl 5.13.10, causing Perl documentation websites to show the now
-out of date version in Perl 5.12 as the latest version.  It has now been
-restored in stub form, directing readers to current information.
-
-=head2 Changes to Existing Documentation
-
-=head3 L<perldata>
+=head2 Updated Modules and Pragmata
 
 =over 4
 
 =item *
 
-New sections have been added to document the new index/value array slice and
-key/value hash slice syntax.
+L<XXX> has been upgraded from version A.xx to B.yy.
 
 =back
 
-=head3 L<perldebguts>
+=head2 Removed Modules and Pragmata
 
 =over 4
 
 =item *
 
-The C<DB::goto> and C<DB::lsub> debugger subroutines are now documented.  [perl
-#77680]
+XXX
 
 =back
 
-=head3 L<perlguts>
+=head1 Documentation
 
-=over 4
+XXX Changes to files in F<pod/> go here.  Consider grouping entries by
+file and be sure to link to the appropriate page, e.g. L<perlfunc>.
 
-=item *
-
-Numerous minor changes have been made to reflect changes made to the perl
-internals in this release.
+=head2 New Documentation
 
-=back
+XXX Changes which create B<new> files in F<pod/> go here.
 
-=head3 L<perlhack>
+=head3 L<XXX>
 
-=over 4
+XXX Description of the purpose of the new file here
 
-=item *
+=head2 Changes to Existing Documentation
 
-The L<SUPER QUICK PATCH GUIDE|perlhack/SUPER QUICK PATCH GUIDE> section has
-been updated.
+XXX Changes which significantly change existing files in F<pod/> go here.
+However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
+section.
 
-=back
-
-=head3 L<perlsub>
+=head3 L<XXX>
 
 =over 4
 
 =item *
 
-A list of subroutine names used by the perl implementation is now included.
-[perl #77680]
+XXX Description of the change here
 
 =back
 
@@ -667,25 +168,21 @@ 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 L<perldiag>.
 
+XXX New or changed warnings emitted by the core's C<C> code go here.  Also
+include any changes in L<perldiag> that reconcile it to the C<C> code.
+
 =head2 New Diagnostics
 
+XXX Newly added diagnostic messages go under here, separated into New Errors
+and New Warnings
+
 =head3 New Errors
 
 =over 4
 
 =item *
 
-L<delete argument is indexE<sol>value array slice, use array slice|perldiag/"delete argument is index/value array slice, use array slice">
-
-(F) You used index/value array slice syntax (C<%array[...]>) as the argument to
-C<delete>.  You probably meant C<@array[...]> with an @ symbol instead.
-
-=item *
-
-L<delete argument is keyE<sol>value hash slice, use hash slice|perldiag/"delete argument is key/value hash slice, use hash slice">
-
-(F) You used key/value hash slice syntax (C<%hash{...}>) as the argument to
-C<delete>.  You probably meant C<@hash{...}> with an @ symbol instead.
+XXX L<message|perldiag/"message">
 
 =back
 
@@ -695,509 +192,182 @@ C<delete>.  You probably meant C<@hash{...}> with an @ symbol instead.
 
 =item *
 
-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.
-
-=item *
-
-L<Possible precedence issue with control flow operator|perldiag/"Possible precedence issue with control flow operator">
-
-(W syntax) There is a possible problem with the mixing of a control flow
-operator (e.g. C<return>) and a low-precedence operator like C<or>.  Consider:
-
-    sub { return $a or $b; }
-
-This is parsed as:
-
-    sub { (return $a) or $b; }
-
-Which is effectively just:
-
-    sub { return $a; }
-
-Either use parentheses or the high-precedence variant of the operator.
-
-Note this may be also triggered for constructs like:
-
-    sub { 1 if die; }
-
-=item *
-
-L<Scalar value %%s[%s] better written as $%s[%s]|perldiag/"Scalar value %%s[%s] better written as $%s[%s]">
-
-(W syntax) In scalar context, you've used an array index/value slice (indicated
-by %) to select a single element of an array.  Generally it's better to ask for
-a scalar value (indicated by $).  The difference is that C<$foo[&bar]> always
-behaves like a scalar, both in the value it returns and when evaluating its
-argument, while C<%foo[&bar]> provides a list context to its subscript, which
-can do weird things if you're expecting only one subscript.  When called in
-list context, it also returns the index (what C<&bar> returns) in addition to
-the value.
-
-=item *
-
-L<Scalar value %%s{%s} better written as $%s{%s}|perldiag/"Scalar value %%s{%s} better written as $%s{%s}">
-
-(W syntax) In scalar context, you've used a hash key/value slice (indicated by
-%) to select a single element of a hash.  Generally it's better to ask for a
-scalar value (indicated by $).  The difference is that C<$foo{&bar}> always
-behaves like a scalar, both in the value it returns and when evaluating its
-argument, while C<@foo{&bar}> and provides a list context to its subscript,
-which can do weird things if you're expecting only one subscript.  When called
-in list context, it also returns the key in addition to the value.
-
-=item *
-
-L<Use of literal control characters in variable names is deprecated|perldiag/"Use of literal control characters in variable names is deprecated">
-
-(D deprecated) Using literal control characters in the source to refer to the
-^FOO variables, like $^X and ${^GLOBAL_PHASE} is now deprecated.  This only
-affects code like $\cT, where \cT is a control in the source code: ${"\cT"} and
-$^T remain valid.
+XXX L<message|perldiag/"message">
 
 =back
 
 =head2 Changes to Existing Diagnostics
 
-=over 4
-
-=item *
-
-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;
+XXX Changes (i.e. rewording) of diagnostic messages go here
 
-Additionally, the C<'E<lt>-- HERE'> marker in the error will now point to the
-correct spot in the regex.
+=over 4
 
 =item *
 
-The "%s "\x%X" does not map to Unicode" warning is now correctly listed as a
-severe warning rather than as a fatal error.
+XXX Describe change here
 
 =back
 
 =head1 Utility Changes
 
-=head3 L<find2perl>
-
-=over 4
-
-=item *
-
-L<find2perl> now handles C<?> wildcards correctly.  [perl #113054]
+XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here.
+Most of these are built within the directories F<utils> and F<x2p>.
 
-=back
+[ List utility changes as a =head3 entry for each utility and =item
+entries for each change
+Use L<XXX> with program names to get proper documentation linking. ]
 
-=head1 Configuration and Compilation
+=head3 L<XXX>
 
 =over 4
 
 =item *
 
-The F<Makefile.PL> for L<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.
+XXX
 
 =back
 
-=head1 Testing
-
-=over 4
-
-=item *
-
-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.
+=head1 Configuration and Compilation
 
-=item *
+XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools
+go here.  Any other changes to the Perl build process should be listed here.
+However, any platform-specific changes should be listed in the
+L</Platform Support> section, instead.
 
-A bug that was fixed in Perl 5.15.4 is now tested by the new test script
-F<t/io/eintr_print.t>.  [perl #119097]
+[ List changes as a =item entry ].
 
-=item *
-
-The new test scripts F<t/op/kvaslice.t> and F<t/op/kvhslice.t> test the new
-index/value array slice and key/value hash slice syntax respectively.
+=over 4
 
 =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 *
+XXX
 
-The new test script F<t/op/waitpid.t> tests the fix for [perl #85228] (see
-L</Selected Bug Fixes>).
+=back
 
-=item *
+=head1 Testing
 
-The latest copyright years in the top-level F<README> file and the B<perl -v>
-output are now tested as matching each other by the new test script
-F<t/porting/copyright.t>
+XXX Any significant changes to the testing of a freshly built perl should be
+listed here.  Changes which create B<new> files in F<t/> go here as do any
+large changes to the testing harness (e.g. when parallel testing was added).
+Changes to existing files in F<t/> aren't worth summarizing, although the bugs
+that they represent may be covered elsewhere.
 
-=item *
+[ List each test improvement as a =item entry ]
 
-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.
+=over 4
 
 =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.
+XXX
 
 =back
 
 =head1 Platform Support
 
-=head2 New Platforms
+XXX Any changes to platform support should be listed in the sections below.
 
-=over 4
+[ Within the sections, list each platform as a =item entry with specific
+changes as paragraphs below it. ]
+
+=head2 New Platforms
 
-=item FreeMiNT
+XXX List any platforms that this version of perl compiles on, that previous
+versions did not.  These will either be enabled by new files in the F<hints/>
+directories, or new subdirectories and F<README> files at the top level of the
+source tree.
 
-Support has been added for FreeMiNT, a free open-source OS for the Atari ST
-system and its successors, based on the original MiNT that was officially
-adopted by Atari.
+=over 4
 
-=item Bitrig
+=item XXX-some-platform
 
-Compile support has been added for Bitrig, a fork of OpenBSD.
+XXX
 
 =back
 
 =head2 Discontinued Platforms
 
-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.
+XXX List any platforms that this version of perl no longer compiles on.
 
 =over 4
 
-=item AT&T 3b1
+=item XXX-some-platform
 
-Configure support for the 3b1, also known as the AT&T Unix PC (and the similar
-AT&T 7300), has been removed.
+XXX
 
 =back
 
 =head2 Platform-Specific Notes
 
-=over 4
-
-=item VMS
-
-The C<PERL_ENV_TABLES> feature to control the population of %ENV at perl
-start-up was broken in Perl 5.16.0 but has now been fixed.
-
-=item Win32
+XXX List any changes for specific platforms.  This could include configuration
+and compilation changes or changes in portability/compatibility.  However,
+changes within modules for platforms should generally be listed in the
+L</Modules and Pragmata> section.
 
-C<rename> and C<link> on Win32 now set $! to ENOSPC and EDQUOT when
-appropriate.  [perl #119857]
-
-=item WinCE
-
-Perl now builds again on WinCE, following locale-related breakage (WinCE has
-non-existent locale support) introduced around 5.19.1.  [perl #119443]
-
-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.
+=over 4
 
-=item GNU/Hurd
+=item XXX-some-platform
 
-The BSD compatibility library C<libbsd> is no longer required for builds.
+XXX
 
 =back
 
 =head1 Internal Changes
 
-=over 4
-
-=item *
+XXX Changes which affect the interface available to C<XS> code go here.  Other
+significant internal changes for future core maintainers should be noted as
+well.
 
-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.
+[ List each change as a =item entry ]
 
-=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>.
-
-=item *
-
-The SV returned by HeSVKEY_force() now correctly reflects the UTF8ness of the
-underlying hash key when that key is not stored as a SV.  [perl #79074]
+=over 4
 
 =item *
 
-Certain rarely used functions and macros available to XS code are now, or are
-planned to be, deprecated.  These are:
-C<utf8n_to_uvuni> (use C<utf8_to_uvchr_buf> instead),
-C<utf8_to_uni_buf> (use C<utf8_to_uvchr_buf> instead),
-C<valid_utf8_to_uvuni> (use C<utf8_to_uvchr_buf> instead),
-C<uvuni_to_utf8> (use C<uvchr_to_utf8> instead),
-C<NATIVE_TO_NEED> (this did not work properly anyway),
-and C<ASCII_TO_NEED>  (this did not work properly anyway).
-
-Starting in this release, almost never does application code need to
-distinguish between the platform's character set and Latin1, on which the
-lowest 256 characters of Unicode are based.
+XXX
 
 =back
 
 =head1 Selected Bug Fixes
 
-=over 4
-
-=item *
-
-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.
+XXX Important bug fixes in the core language are summarized here.  Bug fixes in
+files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
-=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]
+[ List each fix as a =item entry ]
 
-=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 non-existent 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 non-existent 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 non-existent
-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 optimization 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 @_.
+=over 4
 
 =item *
 
-Overlong identifiers no longer cause a buffer overflow (and a crash).  They
-started doing so in Perl 5.18.
+XXX
 
-=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
 
-=item *
+=head1 Known Problems
 
-C<$! = EINVAL; waitpid(0, WNOHANG);> no longer goes into an internal infinite
-loop.  [perl #85228]
+XXX Descriptions of platform agnostic bugs we know we can't fix go here.  Any
+tests that had to be C<TODO>ed for the release would be noted here.  Unfixed
+platform specific bugs also go here.
 
-=item *
+[ List each fix as a =item entry ]
 
-Perl 5.19.3 accidentally caused C<\(1+2)> to return a reference to the same
-mutable scalar each time, so that modifications affect future evaluations.
-This has been fixed.  [perl #119501]
+=over 4
 
 =item *
 
-A possible segmentation fault in filehandle duplication has been fixed.
+XXX
 
-=item *
+=back
 
-A subroutine in @INC can return a reference to a scalar containing the initial
-contents of the file.  However, that scalar was freed prematurely if not
-referenced elsewhere, giving random results.
+=head1 Obituary
 
-=back
+XXX If any significant core contributor has died, we've added a short obituary
+here.
 
 =head1 Acknowledgements
 
-Perl 5.19.4 represents approximately 4 weeks of development since Perl 5.19.3
-and contains approximately 31,000 lines of changes across 580 files from 42
-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.4:
-
-Andy Dougherty, Brian Fraser, Chris 'BinGOs' Williams, Christian Millour, Craig
-A. Berry, Daniel Dragan, David Golden, David Leadbeater, David Mitchell, Father
-Chrysostomos, Florian Ragwitz, François Perrad, H.Merijn Brand, James E
-Keenan, John Goodyear, John P. Linderman, John Peacock, Karl Williamson, kevin
-dawson, Leon Timmermans, Marco Peereboom, Matthew Horsfall, Nathan Glenn, Neil
-Bowers, Nicholas Clark, Niels Thykier, Niko Tyni, Owain G. Ainsworth, Peter
-John Acklam, Reini Urban, Ricardo Signes, Ruslan Zakirov, Slaven Rezic,
-Smylers, Steve Hay, Sullivan Beck, Toby Inkster, Tokuhiro Matsuno, Tony Cook,
-Victor Efimov, Zefram, Zsbán Ambrus.
-
-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 F<AUTHORS> file in the Perl source distribution.
+XXX Generate this with:
+
+  perl Porting/acknowledgements.pl v5.19.4..HEAD
 
 =head1 Reporting Bugs
 
index 706a8f7..71ca61c 100644 (file)
@@ -318,7 +318,7 @@ x2p : [.x2p]$(DBG)a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com
 extra.pods : miniperl
        @ @extra_pods.com
 
-PERLDELTA_CURRENT = [.pod]perl5194delta.pod
+PERLDELTA_CURRENT = [.pod]perl5195delta.pod
 
 $(PERLDELTA_CURRENT) : [.pod]perldelta.pod
        Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT)
index aeaf67d..39d01c1 100644 (file)
@@ -1156,7 +1156,7 @@ utils: $(PERLEXE) $(X2P) ..\utils\Makefile
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5194delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5195delta.pod
        cd ..\win32
        $(PERLEXE) $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
@@ -1255,7 +1255,7 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5194delta.pod perlaix.pod perlamiga.pod perlapi.pod \
+           perl5195delta.pod perlaix.pod perlamiga.pod perlapi.pod \
            perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod perldos.pod \
            perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \
            perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \
index 8c54a6a..7cf7b48 100644 (file)
@@ -1338,7 +1338,7 @@ utils: $(PERLEXE) $(X2P) ..\utils\Makefile
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5194delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5195delta.pod
        $(PERLEXE) $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
        $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1436,7 +1436,7 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5194delta.pod perlaix.pod perlamiga.pod perlapi.pod \
+           perl5195delta.pod perlaix.pod perlamiga.pod perlapi.pod \
            perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod perldos.pod \
            perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \
            perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \
index 65589ee..eb56c56 100644 (file)
@@ -39,6 +39,7 @@ POD = perl.pod        \
        perl5192delta.pod       \
        perl5193delta.pod       \
        perl5194delta.pod       \
+       perl5195delta.pod       \
        perl561delta.pod        \
        perl56delta.pod \
        perl581delta.pod        \
@@ -171,6 +172,7 @@ MAN = perl.man      \
        perl5192delta.man       \
        perl5193delta.man       \
        perl5194delta.man       \
+       perl5195delta.man       \
        perl561delta.man        \
        perl56delta.man \
        perl581delta.man        \
@@ -303,6 +305,7 @@ HTML = perl.html    \
        perl5192delta.html      \
        perl5193delta.html      \
        perl5194delta.html      \
+       perl5195delta.html      \
        perl561delta.html       \
        perl56delta.html        \
        perl581delta.html       \
@@ -435,6 +438,7 @@ TEX = perl.tex      \
        perl5192delta.tex       \
        perl5193delta.tex       \
        perl5194delta.tex       \
+       perl5195delta.tex       \
        perl561delta.tex        \
        perl56delta.tex \
        perl581delta.tex        \