This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: Clarify seek() entry
[perl5.git] / pod / perldelta.pod
index 1a73492..2850645 100644 (file)
 
 =head1 NAME
 
-perldelta - what is new for perl v5.25.9
+perldelta - what is new for perl v5.26.0
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.25.8 release and the 5.25.9
-release.
+This document describes the differences between the 5.24.0 release and the
+5.26.0 release.
 
-If you are upgrading from an earlier release such as 5.25.7, first read
-L<perl5258delta>, which describes differences between 5.25.7 and 5.25.8.
+=head1 Notice
+
+This release includes three updates with widespread effects:
+
+=over 4
+
+=item * C<"."> no longer in C<@INC>
+
+For security reasons, the current directory (C<".">) is no longer included
+by default at the end of the module search path (C<@INC>). This may have
+widespread implications for the building, testing and installing of
+modules, and for the execution of scripts.  See the section
+L<< Removal of the current directory (C<".">) from C<@INC> >>
+for the full details.
+
+=item * C<do> may now warn
+
+C<do> now gives a deprecation warning when it fails to load a file which
+it would have loaded had C<"."> been in C<@INC>.
+
+=item * In regular expression patterns, a literal left brace C<"{">
+should be escaped
+
+See L</Unescaped literal C<"{"> characters in regular expression patterns are no longer permissible>.
+
+=back
 
 =head1 Core Enhancements
 
+=head2 Lexical subroutines are no longer experimental
+
+Using the C<lexical_subs> feature introduced in v5.18 no longer emits a warning.  Existing
+code that disables the C<experimental::lexical_subs> warning category
+that the feature previously used will continue to work.  The
+C<lexical_subs> feature has no effect; all Perl code can use lexical
+subroutines, regardless of what feature declarations are in scope.
+
+=head2 Indented Here-documents
+
+This adds a new modifier C<"~"> to here-docs that tells the parser
+that it should look for C</^\s*$DELIM\n/> as the closing delimiter.
+
+These syntaxes are all supported:
+
+    <<~EOF;
+    <<~\EOF;
+    <<~'EOF';
+    <<~"EOF";
+    <<~`EOF`;
+    <<~ 'EOF';
+    <<~ "EOF";
+    <<~ `EOF`;
+
+The C<"~"> modifier will strip, from each line in the here-doc, the
+same whitespace that appears before the delimiter.
+
+Newlines will be copied as-is, and lines that don't include the
+proper beginning whitespace will cause perl to croak.
+
+For example:
+
+    if (1) {
+      print <<~EOF;
+        Hello there
+        EOF
+    }
+
+prints "Hello there\n" with no leading whitespace.
+
 =head2 New regular expression modifier C</xx>
 
-Specifying two C<x> characters to modify a regular expression pattern
+Specifying two C<"x"> characters to modify a regular expression pattern
 does everything that a single one does, but additionally TAB and SPACE
 characters within a bracketed character class are generally ignored and
 can be added to improve readability, like
 S<C</[ ^ A-Z d-f p-x ]/xx>>.  Details are at
 L<perlre/E<sol>x and E<sol>xx>.
 
+=head2 C<@{^CAPTURE}>, C<%{^CAPTURE}>, and C<%{^CAPTURE_ALL}>
+
+C<@{^CAPTURE}> exposes the capture buffers of the last match as an
+array.  So C<$1> is C<${^CAPTURE}[0]>.  This is a more efficient equivalent
+to code like C<substr($matched_string,$-[0],$+[0]-$-[0])>, and you don't
+have to keep track of the C<$matched_string> either.  This variable has no
+single character equivalent.  Note that, like the other regex magic variables,
+the contents of this variable is dynamic; if you wish to store it beyond
+the lifetime of the match you must copy it to another array.
+
+C<%{^CAPTURE}> is equivalent to C<%+> (I<i.e.>, named captures).  Other than
+being more self documenting there is no difference between the two forms.
+
+C<%{^CAPTURE_ALL}> is equivalent to C<%-> (I<i.e.>, all named captures).
+Other than being more self documenting there is no difference between the
+two forms.
+
+=head2 Declaring a reference to a variable
+
+As an experimental feature, Perl now allows the referencing operator to come
+after L<C<my()>|perlfunc/my>, L<C<state()>|perlfunc/state>,
+L<C<our()>|perlfunc/our>, or L<C<local()>|perlfunc/local>.  This syntax must
+be enabled with C<use feature 'declared_refs'>.  It is experimental, and will
+warn by default unless C<no warnings 'experimental::refaliasing'> is in effect.
+It is intended mainly for use in assignments to references.  For example:
+
+    use experimental 'refaliasing', 'declared_refs';
+    my \$a = \$b;
+
+See L<perlref/Assigning to References> for more details.
+
+=head2 Unicode 9.0 is now supported
+
+A list of changes is at L<http://www.unicode.org/versions/Unicode9.0.0/>.
+Modules that are shipped with core Perl but not maintained by p5p do not
+necessarily support Unicode 9.0.  L<Unicode::Normalize> does work on 9.0.
+
+=head2 Use of C<\p{I<script>}> uses the improved Script_Extensions property
+
+Unicode 6.0 introduced an improved form of the Script (C<sc>) property, and
+called it Script_Extensions (C<scx>).  Perl now uses this improved
+version when a property is specified as just C<\p{I<script>}>.  This
+should make programs be more accurate when determining if a character is
+used in a given script, but there is a slight chance of breakage for
+programs that very specifically needed the old behavior.  The meaning of
+compound forms, like C<\p{sc=I<script>}> are unchanged.  See
+L<perlunicode/Scripts>.
+
+=head2 Perl can now do default collation in UTF-8 locales on platforms
+that support it
+
+Some platforms natively do a reasonable job of collating and sorting in
+UTF-8 locales.  Perl now works with those.  For portability and full
+control, L<Unicode::Collate> is still recommended, but now you may
+not need to do anything special to get good-enough results, depending on
+your application.  See
+L<perllocale/Category C<LC_COLLATE>: Collation: Text Comparisons and Sorting>.
+
+=head2 Better locale collation of strings containing embedded C<NUL>
+characters
+
+In locales that have multi-level character weights, C<NUL>s are now
+ignored at the higher priority ones.  There are still some gotchas in
+some strings, though.  See
+L<perllocale/Collation of strings containing embedded C<NUL> characters>.
+
+=head2 C<CORE> subroutines for hash and array functions callable via
+reference
+
+The hash and array functions in the C<CORE> namespace (C<keys>, C<each>,
+C<values>, C<push>, C<pop>, C<shift>, C<unshift> and C<splice>) can now
+be called with ampersand syntax (C<&CORE::keys(\%hash>) and via reference
+(C<< my $k = \&CORE::keys; $k-E<gt>(\%hash) >>).  Previously they could only be
+used when inlined.
+
+=head2 New Hash Function For 64-bit Builds
+
+We have switched to a hybrid hash function to better balance
+performance for short and long keys.
+
+For short keys, 16 bytes and under, we use an optimised variant of
+One At A Time Hard, and for longer keys we use Siphash 1-3.  For very
+long keys this is a big improvement in performance.  For shorter keys
+there is a modest improvement.
+
+=head1 Security
+
+=head2 Removal of the current directory (C<".">) from C<@INC>
+
+The perl binary includes a default set of paths in C<@INC>.  Historically
+it has also included the current directory (C<".">) as the final entry,
+unless run with taint mode enabled (C<perl -T>).  While convenient, this has
+security implications: for example, where a script attempts to load an
+optional module when its current directory is untrusted (such as F</tmp>),
+it could load and execute code from under that directory.
+
+Starting with v5.26, C<"."> is always removed by default, not just under
+tainting.  This has major implications for installing modules and executing
+scripts.
+
+The following new features have been added to help ameliorate these
+issues.
+
+=over
+
+=item * C<Configure -Udefault_inc_excludes_dot>
+
+There is a new C<Configure> option, C<default_inc_excludes_dot> (enabled
+by default) which builds a perl executable without C<".">; unsetting this
+option using C<-U> reverts perl to the old behaviour.  This may fix your
+path issues but will reintroduce all the security concerns, so don't
+build a perl executable like this unless you're I<really> confident that
+such issues are not a concern in your environment.
+
+=item * C<PERL_USE_UNSAFE_INC>
+
+There is a new environment variable recognised by the perl interpreter.
+If this variable has the value 1 when the perl interpreter starts up,
+then C<"."> will be automatically appended to C<@INC> (except under tainting).
+
+This allows you restore the old perl interpreter behaviour on a
+case-by-case basis.  But note that this is intended to be a temporary crutch,
+and this feature will likely be removed in some future perl version.
+It is currently set by the C<cpan> utility and C<Test::Harness> to
+ease installation of CPAN modules which have not been updated to handle the
+lack of dot.  Once again, don't use this unless you are sure that this
+will not reintroduce any security concerns.
+
+=item * A new mandatory warning issued by C<do>.
+
+While it is well-known that C<use> and C<require> use C<@INC> to search
+for the file to load, many people don't realise that C<do "file"> also
+searches C<@INC> if the file is a relative path.  With the removal of C<".">,
+a simple C<do "file.pl"> will fail to read in and execute C<file.pl> from
+the current directory.  Since this is commonly expected behaviour, a new
+mandatory warning is now issued whenever C<do> fails to load a file which
+it otherwise would have found if dot had been in C<@INC>.
+
+=back
+
+Here are some things script and module authors may need to do to make
+their software work in the new regime.
+
+=over
+
+=item * Script authors
+
+If the issue is within your own code (rather than within included
+modules), then you have two main options.  Firstly, if you are confident
+that your script will only be run within a trusted directory (under which
+you expect to find trusted files and modules), then add C<"."> back into the
+path; I<e.g.>:
+
+    BEGIN {
+        my $dir = "/some/trusted/directory";
+        chdir $dir or die "Can't chdir to $dir: $!\n";
+        # safe now
+        push @INC, '.';
+    }
+    use "Foo::Bar"; # may load /some/trusted/directory/Foo/Bar.pm
+    do "config.pl"; # may load /some/trusted/directory/config.pl
+
+On the other hand, if your script is intended to be run from within
+untrusted directories (such as F</tmp>), then your script suddenly failing
+to load files may be indicative of a security issue.  You most likely want
+to replace any relative paths with full paths; for example,
+
+    do ".foo_config.pl"
+
+might become
+
+    do "$ENV{HOME}/.foo_config.pl"
+
+If you are absolutely certain that you want your script to load and
+execute a file from the current directory, then use a C<./> prefix; for
+example:
+
+    do "./.foo_config.pl"
+
+=item * Installing and using CPAN modules
+
+If you install a CPAN module using an automatic tool like C<cpan>, then
+this tool will itself set the C<PERL_USE_UNSAFE_INC> environment variable
+while building and testing the module, which may be sufficient to install
+a distribution which hasn't been updated to be dot-aware.  If you want to
+install such a module manually, then you'll need to replace the
+traditional invocation:
+
+    perl Makefile.PL && make && make test && make install
+
+with something like
+
+    (export PERL_USE_UNSAFE_INC=1; \
+     perl Makefile.PL && make && make test && make install)
+
+Note that this only helps build and install an unfixed module.  It's
+possible for the tests to pass (since they were run under
+C<PERL_USE_UNSAFE_INC=1>), but for the module itself to fail to perform
+correctly in production.  In this case you may have to temporarily modify
+your script until such time as a fixed version of the module is released.
+For example:
+
+    use Foo::Bar;
+    {
+        local @INC = (@INC, '.');
+        # assuming read_config() needs '.' in @INC
+        $config = Foo::Bar->read_config();
+    }
+
+This is only rarely expected to be necessary.  Again, if doing this,
+assess the resultant risks first.
+
+=item * Module Authors
+
+If you maintain a CPAN distribution, it may need updating to run in
+a dotless environment.  Although C<cpan> and other such tools will
+currently set the C<PERL_USE_UNSAFE_INC> during module build, this is a
+temporary workaround for the set of modules which rely on C<"."> being in
+C<@INC> for installation and testing, and this may mask deeper issues.  It
+could result in a module which passes tests and installs, but which
+fails at run time.
+
+During build, test and install, it will normally be the case that any perl
+processes will be executing directly within the root directory of the
+untarred distribution, or a known subdirectory of that, such as F<t/>.  It
+may well be that F<Makefile.PL> or F<t/foo.t> will attempt to include
+local modules and configuration files using their direct relative
+filenames, which will now fail.
+
+However, as described above, automatic tools like F<cpan> will (for now)
+set the C<PERL_USE_UNSAFE_INC> environment variable, which introduces
+dot during build.
+
+This makes it likely that your existing build and test code will work, but
+this may mask issues with your code which only manifest when used after
+install.  It is prudent to try and run your build process with that
+variable explicitly disabled:
+
+    (export PERL_USE_UNSAFE_INC=0; \
+     perl Makefile.PL && make && make test && make install)
+
+This is more likely to show up any potential problems with your module's
+build process, or even with the module itself.  Fixing such issues will
+ensure both that your module can again be installed manually, and that
+it will still build once the C<PERL_USE_UNSAFE_INC> crutch goes away.
+
+When fixing issues in tests due to the removal of dot from C<@INC>,
+reinsertion of dot into C<@INC> should be performed with caution, for this
+too may suppress real errors in your runtime code.  You are encouraged
+wherever possible to apply the aforementioned approaches with explicit
+absolute/relative paths, or to relocate your needed files into a
+subdirectory and insert that subdirectory into C<@INC> instead.
+
+If your runtime code has problems under the dotless C<@INC>, then the comments
+above on how to fix for script authors will mostly apply here too.  Bear in
+mind though that it is considered bad form for a module to globally add dot to
+C<@INC>, since it introduces both a security risk and hides issues of
+accidentally requiring dot in C<@INC>, as explained above.
+
+=back
+
+=head2 Escaped colons and relative paths in PATH
+
+On Unix systems, Perl treats any relative paths in the PATH environment
+variable as tainted when starting a new process.  Previously, it was
+allowing a backslash to escape a colon (unlike the OS), consequently
+allowing relative paths to be considered safe if the PATH was set to
+something like C</\:.>.  The check has been fixed to treat C<"."> as tainted
+in that example.
+
+=head2 C<-Di> switch is now required for PerlIO debugging output
+
+Previously PerlIO debugging output would be sent to the file specified
+by the C<PERLIO_DEBUG> environment variable if perl wasn't running
+setuid and the C<-T> or C<-t> switches hadn't been parsed yet.
+
+If perl performed output at a point where it hadn't yet parsed its
+switches this could result in perl creating or overwriting the file
+named by C<PERLIO_DEBUG> even when the C<-T> switch had been supplied.
+
+Perl now requires the C<-Di> switch to produce PerlIO debugging
+output.  By default this is written to C<stderr>, but can optionally
+be redirected to a file by setting the C<PERLIO_DEBUG> environment
+variable.
+
+If perl is running setuid or the C<-T> switch has supplied
+C<PERLIO_DEBUG> is ignored and the debugging output is sent to
+C<stderr> as for any other C<-D> switch.
+
+=head1 Incompatible Changes
+
+=head2 Unescaped literal C<"{"> characters in regular expression
+patterns are no longer permissible
+
+You have to now say something like C<"\{"> or C<"[{]"> to specify to
+match a LEFT CURLY BRACKET; otherwise it is a fatal pattern compilation
+error.  This change will allow future extensions to the language.
+
+These have been deprecated since v5.16, with a deprecation message
+raised for some uses starting in v5.22.  Unfortunately, the code added
+to raise the message was buggy, and failed to warn in some cases where
+it should have.  Therefore, enforcement of this ban for these cases is
+deferred until Perl 5.30, but the code has been fixed to raise a
+default-on deprecation message for them in the meantime.
+
+Some uses of literal C<"{"> occur in contexts where we do not foresee
+the meaning ever being anything but the literal, such as the very first
+character in the pattern, or after a C<"|"> meaning alternation.  Thus
+
+ qr/{fee|{fie/
+
+matches either of the strings C<{fee> or C<{fie>.  To avoid forcing
+unnecessary code changes, these uses do not need to be escaped, and no
+warning is raised about them, and there are no current plans to change this.
+
+But it is always correct to escape C<"{">, and the simple rule to
+remember is to always do so.
+
+=head2 C<scalar(%hash)> return signature changed
+
+The value returned for C<scalar(%hash)> will no longer show information about
+the buckets allocated in the hash.  It will simply return the count of used
+keys.  It is thus equivalent to C<0+keys(%hash)>.
+
+A form of backwards compatibility is provided via
+L<C<Hash::Util::bucket_ratio()>|Hash::Util/bucket_ratio> which provides
+the same behavior as
+C<scalar(%hash)> provided in Perl 5.24 and earlier.
+
+=head2 C<keys> returned from an lvalue subroutine
+
+C<keys> returned from an lvalue subroutine can no longer be assigned
+to in list context.
+
+    sub foo : lvalue { keys(%INC) }
+    (foo) = 3; # death
+    sub bar : lvalue { keys(@_) }
+    (bar) = 3; # also an error
+
+This makes the lvalue sub case consistent with C<(keys %hash) = ...> and
+C<(keys @_) = ...>, which are also errors.  [perl #128187]
+
+=head2 C<${^ENCODING}> has been removed
+
+Consequently, the L<encoding> pragma's default mode is no longer supported.  If
+you still need to write your source code in encodings other than UTF-8, use a
+source filter such as L<Filter::Encoding> on CPAN or L<encoding>'s C<Filter>
+option.
+
+=head2 C<POSIX::tmpnam()> has been removed
+
+The fundamentally unsafe C<tmpnam()> interface was deprecated in
+Perl 5.22 and has now been removed.  In its place you can use,
+for example, the L<File::Temp> interfaces.
+
+=head2 require ::Foo::Bar is now illegal.
+
+Formerly, C<require ::Foo::Bar> would try to read F</Foo/Bar.pm>.  Now any
+bareword require which starts with a double colon dies instead.
+
+=head2 Literal control character variable names are no longer permissible
+
+A variable name may no longer contain a literal control character under
+any circumstances.  These previously were allowed in single-character
+names on ASCII platforms, but have been deprecated there since Perl
+5.20.  This affects things like C<$I<\cT>>, where I<\cT> is a literal
+control (such as a C<NAK> or C<NEGATIVE ACKNOWLEDGE> character) in the
+source code.
+
+=head2 C<NBSP> is no longer permissible in C<\N{...}>
+
+The name of a character may no longer contain non-breaking spaces.  It
+has been deprecated to do so since Perl 5.22.
+
 =head1 Deprecations
 
 =head2 String delimiters that aren't stand-alone graphemes are now deprecated
 
 In order for Perl to eventually allow string delimiters to be Unicode
 grapheme clusters (which look like a single character, but may be
-a sequence of several ones), we have to stop allowing a single char
+a sequence of several ones), we have to stop allowing a single character
 delimiter that isn't a grapheme by itself.  These are unlikely to exist
 in actual code, as they would typically display as attached to the
 character in front of them.
 
-=head1 Performance Enhancements
+=head2 C<\cI<X>> that maps to a printable is no longer deprecated
+
+This means we have no plans to remove this feature.  It still raises a
+warning, but only if syntax warnings are enabled.  The feature was
+originally intended to be a way to express non-printable characters that
+don't have a mnemonic (C<\t> and C<\n> are mnemonics for two
+non-printable characters, but most non-printables don't have a
+mnemonic.)  But the feature can be used to specify a few printable
+characters, though those are more clearly expressed as the printable
+itself.  See
+L<http://www.nntp.perl.org/group/perl.perl5.porters/2017/02/msg242944.html>.
+
+=head1 Performance Enhancements
+
+=over 4
+
+=item *
+
+A hash in boolean context is now sometimes faster, I<e.g.>
+
+    if (!%h) { ... }
+
+This was already special-cased, but some cases were missed (such as
+C<grep %$_, @AoH>, and even the ones which weren't have been improved.
+
+=item * New Faster Hash Function on 64 bit builds
+
+We use a different hash function for short and long keys.  This should
+improve performance and security, especially for long keys.
+
+=item * readline is faster
+
+Reading from a file line-by-line with C<readline()> or C<< E<lt>E<gt> >> should
+now typically be faster due to a better implementation of the code that
+searches for the next newline character.
+
+=item *
+
+Reduce cost of C<SvVALID()>.
+
+=item *
+
+C<$ref1 = $ref2> has been optimized.
+
+=item *
+
+Array and hash assignment are now faster, I<e.g.>
+
+    (..., @a) = (...);
+    (..., %h) = (...);
+
+especially when the RHS is empty.
+
+=item *
+
+Reduce the number of odd special cases for the C<SvSCREAM> flag.
+
+=item *
+
+Avoid C<sv_catpvn()> in C<do_vop()> when unneeded.
+
+=item *
+
+Enhancements in Regex concat COW implementation.
+
+=item *
+
+Better optimise array and hash assignment: where an array or hash appears
+in the LHS of a list assignment, such as C<(..., @a) = (...);>, it's
+likely to be considerably faster, especially if it involves emptying the
+array/hash. For example this code runs about 1/3 faster compared to
+Perl 5.24.0:
+
+    my @a;
+    for my $i (1..10_000_000) {
+        @a = (1,2,3);
+        @a = ();
+    }
+
+
+=item *
+
+Converting a single-digit string to a number is now substantially faster.
+
+=item *
+
+The internal op implementing the C<split> builtin has been simplified and
+sped up.  Firstly, it no longer requires a subsidiary internal C<pushre> op
+to do its work.  Secondly, code of the form C<my @x = split(...)> is now
+optimised in the same way as C<@x = split(...)>, and is therefore a few
+percent faster.
+
+=item *
+
+The rather slow implementation for the experimental subroutine signatures
+feature has been made much faster; it is now comparable in speed with the
+old-style C<my ($a, $b, @c) = @_>.
+
+=item *
+
+Bareword constant strings are now permitted to take part in constant
+folding.  They were originally exempted from constant folding in August 1999,
+during the development of Perl 5.6, to ensure that C<use strict "subs">
+would still apply to bareword constants.  That has now been accomplished a
+different way, so barewords, like other constants, now gain the performance
+benefits of constant folding.
+
+This also means that void-context warnings on constant expressions of
+barewords now report the folded constant operand, rather than the operation;
+this matches the behaviour for non-bareword constants.
+
+=back
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Archive::Tar> has been upgraded from version 2.04 to 2.24.
+
+=item *
+
+L<arybase> has been upgraded from version 0.11 to 0.12.
+
+=item *
+
+L<attributes> has been upgraded from version 0.27 to 0.29.
+
+The deprecation message for the C<:unique> and C<:locked> attributes
+now mention that they will disappear in Perl 5.28.
+
+=item *
+
+L<B> has been upgraded from version 1.62 to 1.68.
+
+=item *
+
+L<B::Concise> has been upgraded from version 0.996 to 0.999.
+
+Its output is now more descriptive for C<op_private> flags.
+
+=item *
+
+L<B::Debug> has been upgraded from version 1.23 to 1.24.
+
+=item *
+
+L<B::Deparse> has been upgraded from version 1.37 to 1.40.
+
+=item *
+
+L<B::Xref> has been upgraded from version 1.05 to 1.06.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<base> has been upgraded from version 2.23 to 2.25.
+
+=item *
+
+L<bignum> has been upgraded from version 0.42 to 0.47.
+
+=item *
+
+L<Carp> has been upgraded from version 1.40 to 1.42.
+
+=item *
+
+L<charnames> has been upgraded from version 1.43 to 1.44.
+
+=item *
+
+L<Compress::Raw::Bzip2> has been upgraded from version 2.069 to 2.074.
+
+=item *
+
+L<Compress::Raw::Zlib> has been upgraded from version 2.069 to 2.074.
+
+=item *
+
+L<Config::Perl::V> has been upgraded from version 0.25 to 0.28.
+
+=item *
+
+L<CPAN> has been upgraded from version 2.11 to 2.18.
+
+=item *
+
+L<CPAN::Meta> has been upgraded from version 2.150005 to 2.150010.
+
+=item *
+
+L<Data::Dumper> has been upgraded from version 2.160 to 2.167.
+
+The XS implementation now supports Deparse.
+
+This fixes a stack management bug. [perl #130487].
+
+=item *
+
+L<DB_File> has been upgraded from version 1.835 to 1.840.
+
+=item *
+
+L<Devel::Peek> has been upgraded from version 1.23 to 1.26.
+
+=item *
+
+L<Devel::PPPort> has been upgraded from version 3.32 to 3.35.
+
+=item *
+
+L<Devel::SelfStubber> has been upgraded from version 1.05 to 1.06.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<diagnostics> has been upgraded from version 1.34 to 1.36.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<Digest> has been upgraded from version 1.17 to 1.17_01.
+
+=item *
+
+L<Digest::MD5> has been upgraded from version 2.54 to 2.55.
+
+=item *
+
+L<Digest::SHA> has been upgraded from version 5.95 to 5.96.
+
+=item *
+
+L<DynaLoader> has been upgraded from version 1.38 to 1.42.
+
+=item *
+
+L<Encode> has been upgraded from version 2.80 to 2.88.
+
+=item *
+
+L<encoding> has been upgraded from version 2.17 to 2.19.
+
+This module's default mode is no longer supported.  It now
+dies when imported, unless the C<Filter> option is being used.
+
+=item *
+
+L<encoding::warnings> has been upgraded from version 0.12 to 0.13.
+
+This module is no longer supported.  It emits a warning to
+that effect and then does nothing.
+
+=item *
+
+L<Errno> has been upgraded from version 1.25 to 1.28.
+
+Document that using C<%!> loads Errno for you.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<ExtUtils::Embed> has been upgraded from version 1.33 to 1.34.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<ExtUtils::MakeMaker> has been upgraded from version 7.10_01 to 7.24.
+
+=item *
+
+L<ExtUtils::Miniperl> has been upgraded from version 1.05 to 1.06.
+
+=item *
+
+L<ExtUtils::ParseXS> has been upgraded from version 3.31 to 3.34.
+
+=item *
+
+L<ExtUtils::Typemaps> has been upgraded from version 3.31 to 3.34.
+
+=item *
+
+L<feature> has been upgraded from version 1.42 to 1.47.
+
+Fixes the Unicode Bug in the range operator.
+
+=item *
+
+L<File::Copy> has been upgraded from version 2.31 to 2.32.
+
+=item *
+
+L<File::Fetch> has been upgraded from version 0.48 to 0.52.
+
+=item *
+
+L<File::Glob> has been upgraded from version 1.26 to 1.28.
+
+Issue a deprecation message for C<File::Glob::glob()>.
+
+=item *
+
+L<File::Spec> has been upgraded from version 3.63 to 3.67.
+
+=item *
+
+L<FileHandle> has been upgraded from version 2.02 to 2.03.
+
+=item *
+
+L<Filter::Simple> has been upgraded from version 0.92 to 0.93.
+
+It no longer treats C<no MyFilter> immediately following C<use MyFilter> as
+end-of-file.  [perl #107726]
+
+=item *
+
+L<Getopt::Long> has been upgraded from version 2.48 to 2.49.
+
+=item *
+
+L<Getopt::Std> has been upgraded from version 1.11 to 1.12.
+
+=item *
+
+L<Hash::Util> has been upgraded from version 0.19 to 0.22.
+
+=item *
+
+L<HTTP::Tiny> has been upgraded from version 0.056 to 0.070.
+
+Internal 599-series errors now include the redirect history.
+
+=item *
+
+L<I18N::LangTags> has been upgraded from version 0.40 to 0.42.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<IO> has been upgraded from version 1.36 to 1.38.
+
+=item *
+
+IO-Compress has been upgraded from version 2.069 to 2.074.
+
+=item *
+
+L<IO::Socket::IP> has been upgraded from version 0.37 to 0.38.
+
+=item *
+
+L<IPC::Cmd> has been upgraded from version 0.92 to 0.96.
+
+=item *
+
+L<IPC::SysV> has been upgraded from version 2.06_01 to 2.07.
+
+=item *
+
+L<JSON::PP> has been upgraded from version 2.27300 to 2.27400_02.
+
+=item *
+
+L<lib> has been upgraded from version 0.63 to 0.64.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<List::Util> has been upgraded from version 1.42_02 to 1.46_02.
+
+=item *
+
+L<Locale::Codes> has been upgraded from version 3.37 to 3.42.
+
+=item *
+
+L<Locale::Maketext> has been upgraded from version 1.26 to 1.28.
+
+=item *
+
+L<Locale::Maketext::Simple> has been upgraded from version 0.21 to 0.21_01.
+
+=item *
+
+L<Math::BigInt> has been upgraded from version 1.999715 to 1.999806.
+
+There have also been some core customizations.
+
+=item *
+
+L<Math::BigInt::FastCalc> has been upgraded from version 0.40 to 0.5005.
+
+=item *
+
+L<Math::BigRat> has been upgraded from version 0.260802 to 0.2611.
+
+=item *
+
+L<Math::Complex> has been upgraded from version 1.59 to 1.5901.
+
+=item *
+
+L<Memoize> has been upgraded from version 1.03 to 1.03_01.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20170420 to 5.20170520.
+
+=item *
+
+L<Module::Load::Conditional> has been upgraded from version 0.64 to 0.68.
+
+=item *
+
+L<Module::Metadata> has been upgraded from version 1.000031 to 1.000033.
+
+=item *
+
+L<mro> has been upgraded from version 1.18 to 1.20.
+
+=item *
+
+L<Net::Ping> has been upgraded from version 2.43 to 2.55.
+
+IPv6 addresses and C<AF_INET6> sockets are now supported, along with several
+other enhancements.
+
+Remove sudo from 500_ping_icmp.t.
+
+Avoid stderr noise in tests
+
+Check for echo in new L<Net::Ping> tests.
+
+=item *
+
+L<NEXT> has been upgraded from version 0.65 to 0.67.
+
+=item *
+
+L<Opcode> has been upgraded from version 1.34 to 1.39.
+
+=item *
+
+L<open> has been upgraded from version 1.10 to 1.11.
+
+=item *
+
+L<OS2::Process> has been upgraded from version 1.11 to 1.12.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<overload> has been upgraded from version 1.26 to 1.28.
+
+Its compilation speed has been improved slightly.
+
+=item *
+
+L<parent> has been upgraded from version 0.234 to 0.236.
+
+=item *
+
+L<perl5db.pl> has been upgraded from version 1.50 to 1.51.
+
+Ignore F</dev/tty> on non-Unix systems. [perl #113960]
+
+=item *
+
+L<Perl::OSType> has been upgraded from version 1.009 to 1.010.
+
+=item *
+
+L<perlfaq> has been upgraded from version 5.021010 to 5.021011.
+
+=item *
+
+L<PerlIO> has been upgraded from version 1.09 to 1.10.
+
+=item *
+
+L<PerlIO::encoding> has been upgraded from version 0.24 to 0.25.
+
+=item *
+
+L<PerlIO::scalar> has been upgraded from version 0.24 to 0.26.
+
+=item *
+
+L<Pod::Checker> has been upgraded from version 1.60 to 1.73.
+
+=item *
+
+L<Pod::Functions> has been upgraded from version 1.10 to 1.11.
+
+=item *
+
+L<Pod::Html> has been upgraded from version 1.22 to 1.2202.
+
+=item *
+
+L<Pod::Perldoc> has been upgraded from version 3.25_02 to 3.28.
+
+=item *
+
+L<Pod::Simple> has been upgraded from version 3.32 to 3.35.
+
+=item *
+
+L<Pod::Usage> has been upgraded from version 1.68 to 1.69.
+
+=item *
+
+L<POSIX> has been upgraded from version 1.65 to 1.76.  This remedies several
+defects in making its symbols exportable. [perl #127821]
+The C<POSIX::tmpnam()> interface has been removed,
+see L</"POSIX::tmpnam() has been removed">.
+Trying to import POSIX subs that have no real implementations
+(like C<POSIX::atend()>) now fails at import time, instead of
+waiting until runtime.
+
+=item *
+
+L<re> has been upgraded from version 0.32 to 0.34
+
+This adds support for the new L<C<E<47>xx>|perlre/E<sol>x and E<sol>xx>
+regular expression pattern modifier, and a change to the L<S<C<use re
+'strict'>>|re/'strict' mode> experimental feature.  When S<C<re
+'strict'>> is enabled, a warning now will be generated for all
+unescaped uses of the two characters C<"}"> and C<"]"> in regular
+expression patterns (outside bracketed character classes) that are taken
+literally.  This brings them more in line with the C<")"> character which
+is always a metacharacter unless escaped.  Being a metacharacter only
+sometimes, depending on action at a distance, can lead to silently
+having the pattern mean something quite different than was intended,
+which the S<C<re 'strict'>> mode is intended to minimize.
+
+=item *
+
+L<Safe> has been upgraded from version 2.39 to 2.40.
+
+=item *
+
+L<Scalar::Util> has been upgraded from version 1.42_02 to 1.46_02.
+
+=item *
+
+L<Storable> has been upgraded from version 2.56 to 2.62.
+
+Fixes [perl #130098].
+
+=item *
+
+L<Symbol> has been upgraded from version 1.07 to 1.08.
+
+=item *
+
+L<Sys::Syslog> has been upgraded from version 0.33 to 0.35.
+
+=item *
+
+L<Term::ANSIColor> has been upgraded from version 4.04 to 4.06.
+
+=item *
+
+L<Term::ReadLine> has been upgraded from version 1.15 to 1.16.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<Test> has been upgraded from version 1.28 to 1.30.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<Test::Harness> has been upgraded from version 3.36 to 3.38.
+
+=item *
+
+L<Test::Simple> has been upgraded from version 1.001014 to 1.302073.
+
+=item *
+
+L<Thread::Queue> has been upgraded from version 3.09 to 3.12.
+
+=item *
+
+L<Thread::Semaphore> has been upgraded from 2.12 to 2.13.
+
+Added the C<down_timed> method.
+
+=item *
+
+L<threads> has been upgraded from version 2.07 to 2.15.
+
+Compatibility with 5.8 has been restored.
+
+Fixes [perl #130469].
+
+=item *
+
+L<threads::shared> has been upgraded from version 1.51 to 1.56.
+
+This fixes [cpan #119529], [perl #130457]
+
+=item *
+
+L<Tie::Hash::NamedCapture> has been upgraded from version 0.09 to 0.10.
+
+=item *
+
+L<Time::HiRes> has been upgraded from version 1.9733 to 1.9741.
+
+It now builds on systems with C++11 compilers (such as G++ 6 and Clang++
+3.9).
+
+Now uses C<clockid_t>.
+
+=item *
+
+L<Time::Local> has been upgraded from version 1.2300 to 1.25.
+
+=item *
+
+L<Unicode::Collate> has been upgraded from version 1.14 to 1.19.
+
+=item *
+
+L<Unicode::UCD> has been upgraded from version 0.64 to 0.68.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<version> has been upgraded from version 0.9916 to 0.9917.
+
+=item *
+
+L<VMS::DCLsym> has been upgraded from version 1.06 to 1.08.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=item *
+
+L<warnings> has been upgraded from version 1.36 to 1.37.
+
+=item *
+
+L<XS::Typemap> has been upgraded from version 0.14 to 0.15.
+
+=item *
+
+L<XSLoader> has been upgraded from version 0.21 to 0.27.
+
+Fixed a security hole in which binary files could be loaded from a path
+outside of L<C<@INC>|perlvar/@INC>.
+
+It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+
+=back
+
+=head1 Documentation
+
+=head2 New Documentation
+
+=head3 L<perldeprecation>
+
+This file documents all upcoming deprecations, and some of the deprecations
+which already have been removed.  The purpose of this documentation is
+two-fold: document what will disappear, and by which version, and serve
+as a guide for people dealing with code which has features that no longer
+work after an upgrade of their perl.
+
+=head2 Changes to Existing Documentation
+
+We have attempted to update the documentation to reflect the changes
+listed in this document.  If you find any we have missed, send email to
+L<perlbug@perl.org|mailto:perlbug@perl.org>.
+
+Additionally all references to Usenet have been removed, and the
+following selected changes have been made:
+
+=head3 L<perlfunc>
+
+=over 4
+
+=item *
+
+Removed obsolete text about L<C<defined()>|perlfunc/defined>
+on aggregates that should have been deleted earlier, when the feature
+was removed.
+
+=item *
+
+Corrected documentation of L<C<eval()>|perlfunc/eval>,
+and L<C<evalbytes()>|perlfunc/evalbytes>.
+
+=item *
+
+Clarified documentation of L<C<seek()>|perlfunc/seek>,
+L<C<tell()>|perlfunc/tell> and L<C<sysseek()>|perlfunc/sysseek>
+emphasizing that positions are in bytes and not characters.
+L<[perl #128607]|https://rt.perl.org/Public/Bug/Display.html?id=128607>
+
+=item *
+
+Clarified documentation of L<C<sort()>|perlfunc/sort LIST> concerning
+the variables C<$a> and C<$b>.
+
+=item *
+
+In L<C<split()>|perlfunc/split> added a caution about its use in Perls
+before v5.11, and noted that certain pattern modifiers are legal in it.
+
+=item *
+
+Removed obsolete documentation of L<C<study()>|perlfunc/study>, noting
+that it is now a no-op.
+
+=item *
+
+Noted that L<C<vec()>|perlfunc/vec> doesn't work well when the string
+contains characters whose code points are above 255.
+
+=back
+
+=head3 L<perlguts>
+
+=over 4
+
+=item *
+
+Added advice on
+L<formatted printing of operands of C<Size_t> and C<SSize_t>|perlguts/Formatted Printing of Size_t and SSize_t>
+
+=back
+
+=head3 L<perlhack>
+
+=over 4
+
+=item *
+
+Clariy indentation rules, and note that we are migrating away from using
+tabs to indent, replacing them with sequences of SPACE characters.
+
+=back
+
+=head3 L<perlhacktips>
+
+=over 4
+
+=item *
+
+Give another reason to use C<cBOOL> to cast an expression to boolean.
+
+=item *
+
+Note that there are macros C<TRUE> and C<FALSE> available to express
+boolean values.
+
+=back
+
+=head3 L<perlinterp>
+
+=over 4
+
+=item *
+
+L<perlinterp> has been expanded to give a more detailed example of how to
+hunt around in the parser for how a given operator is handled.
+
+=back
+
+=head3 L<perllocale>
+
+=over 4
+
+=item *
+
+Some locales aren't compatible with Perl.  Note that these can cause
+core dumps.
+
+=back
+
+=head3 L<perlmodinstall>
+
+=over 4
+
+=item *
+
+Various clarifications have been added.
+
+=back
+
+=head3 L<perlmodlib>
+
+=over 4
+
+=item *
+
+Updated the site mirror list.
+
+=back
+
+=head3 L<perlobj>
+
+=over 4
+
+=item *
+
+Added a section on calling methods using their fully qualified names.
+
+=item *
+
+Do not discourage manual C<@ISA>.
+
+=back
+
+=head3 L<perlootut>
+
+=over 4
+
+=item *
+
+Mention C<Moo> more.
+
+=back
+
+=head3 L<perlop>
+
+=over 4
+
+=item *
+
+Clarify behavior of single quote regexps.
+
+=back
+
+=head3 L<perlre>
+
+=over 4
+
+=item *
+
+The first part was extensively rewritten to incorporate various basic
+points, that in earlier versions were mentioned in sort of an appendix
+on Version 8 regular expressions.
+
+=item *
+
+Note that it is common to have the C</x> modifier and forget that this
+means that C<"#"> has to be escaped.
+
+=back
+
+=head3 L<perlretut>
+
+=over 4
+
+=item *
+
+Add introductory material
+
+=item *
+
+Note that a metacharacter occurring in a context where it can't mean
+that, silently loses its meta-ness and matches literally.
+L<C<use re 'strict'>|re/'strict' mode> can catch some of these.
+
+=back
+
+=head3 L<perlunicode>
+
+=over 4
+
+=item *
+
+Corrected the text about Unicode BYTE ORDER MARK handling.
+
+=item *
+
+Updated the text to correspond with changes in Unicode UTS#18, concerning
+regular expressions, and Perl compatibility with what it says.
+
+=back
+
+=head3 L<perlvar>
+
+=over 4
+
+=item *
+
+Document C<@ISA>.  Was documented other places, not not in L<perlvar>.
+
+=back
+
+=head1 Diagnostics
+
+=head2 New Diagnostics
+
+=head3 New Errors
+
+=over 4
+
+=item *
+
+Since C<"."> is now removed from C<@INC> by default, C<do> will now trigger
+a warning recommending to fix the C<do> statement:
+
+L<do "%s" failed, '.' is no longer in @INC|perldiag/do "%s" failed, '.' is no longer in @INC; did you mean do ".E<sol>%s"?>
+
+=item *
+
+Using the empty pattern (which re-executes the last successfully-matched
+pattern) inside a code block in another regex, as in C</(?{ s!!new! })/>, has
+always previously yielded a segfault.  It now produces an error:
+L<Infinite recursion in regex|perldiag/"Infinite recursion in regex">.
+
+=item *
+
+L<The experimental declared_refs feature is not enabled|perldiag/"The experimental declared_refs feature is not enabled">
+
+(F) To declare references to variables, as in C<my \%x>, you must first enable
+the feature:
+
+    no warnings "experimental::declared_refs";
+    use feature "declared_refs";
+
+=item *
+
+L<Version control conflict marker|perldiag/"Version control conflict marker">
+
+(F) The parser found a line starting with C<E<lt>E<lt>E<lt>E<lt>E<lt>E<lt>E<lt>>,
+C<E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>>, or C<=======>.  These may be left by a
+version control system to mark conflicts after a failed merge operation.
+
+=item *
+
+L<%s: command not found|perldiag/"%s: command not found">
+
+(A) You've accidentally run your script through B<bash> or another shell
+instead of Perl.  Check the #! line, or manually feed your script into
+Perl yourself.  The #! line at the top of your file could look like:
+
+  #!/usr/bin/perl
+
+=item *
+
+L<%s: command not found: %s|perldiag/"%s: command not found: %s">
+
+(A) You've accidentally run your script through B<zsh> or another shell
+instead of Perl.  Check the #! line, or manually feed your script into
+Perl yourself.  The #! line at the top of your file could look like:
+
+  #!/usr/bin/perl
+
+=item *
+
+L<Unescaped left brace in regex is illegal here|perldiag/Unescaped left brace in regex is illegal here in regex; marked by S<E<lt>-- HERE> in mE<sol>%sE<sol>>
+
+Unescaped left braces are now illegal in some contexts in regular expression
+patterns.  In other contexts, they are still just deprecated; they will
+be illegal in Perl 5.30.
+
+=item *
+
+L<Bareword in require contains "%s"|perldiag/"Bareword in require contains "%s"">
+
+=item *
+
+L<Bareword in require maps to empty filename|perldiag/"Bareword in require maps to empty filename">
+
+=item *
+
+L<Bareword in require maps to disallowed filename "%s"|perldiag/"Bareword in require maps to disallowed filename "%s"">
+
+=item *
+
+L<Bareword in require must not start with a double-colon: "%s"|perldiag/"Bareword in require must not start with a double-colon: "%s"">
+
+=back
+
+=head3 New Warnings
+
+=over 4
+
+=item *
+
+L<Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30|perldiag/"Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30">
+
+See L</Deprecations>
+
+=item *
+
+L<Declaring references is experimental|perldiag/"Declaring references is experimental">
+
+(S experimental::declared_refs) This warning is emitted if you use a reference
+constructor on the right-hand side of C<my()>, C<state()>, C<our()>, or
+C<local()>.  Simply suppress the warning if you want to use the feature, but
+know that in doing so you are taking the risk of using an experimental feature
+which may change or be removed in a future Perl version:
+
+    no warnings "experimental::declared_refs";
+    use feature "declared_refs";
+    $fooref = my \$foo;
+
+=item *
+
+L<C<${^ENCODING}> is no longer supported. Its use will be fatal in Perl 5.28|perldiag/"${^ENCODING} is no longer supported. Its use will be fatal in Perl 5.28">
+
+The special variable C<${^ENCODING}>, formerly used to implement
+the C<encoding> pragma, is no longer supported as of Perl 5.26.
+
+=item *
+
+Since C<"."> is now removed from C<@INC> by default, C<do> will now trigger
+a warning recommending to fix the C<do> statement:
+
+L<do "%s" failed, '.' is no longer in @INC|perldiag/do "%s" failed, '.' is no longer in @INC; did you mean do ".E<sol>%s"?>
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+When a C<require> fails, we now do not provide C<@INC> when the C<require>
+is for a file instead of a module.
+
+=item *
+
+When C<@INC> is not scanned for a C<require> call, we no longer display
+C<@INC> to avoid confusion.
+
+=item *
+
+Attribute "locked" is deprecated, and will disappear in Perl 5.28
+
+=item *
+
+Attribute "unique" is deprecated, and will disappear in Perl 5.28
+
+=item *
+
+Constants from lexical variables potentially modified elsewhere are
+deprecated. This will not be allowed in Perl 5.32
+
+=item *
+
+Deprecated use of C<my()> in false conditional. This will be a fatal error
+in Perl 5.30
+
+=item *
+
+C<dump()> better written as C<CORE::dump()>. C<dump()> will no longer be available
+in Perl 5.30
+
+=item *
+
+${^ENCODING} is no longer supported. Its use will be fatal in Perl 5.28
+
+=item *
+
+File::Glob::glob() will disappear in perl 5.30. Use File::Glob::bsd_glob()
+instead.
+
+=item *
+
+%s() is deprecated on :utf8 handles. This will be a fatal error in Perl 5.30
+
+=item *
+
+$* is no longer supported. Its use will be fatal in Perl 5.30
+
+=item *
+
+$* is no longer supported. Its use will be fatal in Perl 5.30
+
+=item *
+
+Opening dirhandle %s also as a file. This will be a fatal error in Perl 5.28
+
+=item *
+
+Opening filehandle %s also as a directory. This will be a fatal
+error in Perl 5.28
+
+=item *
+
+Setting C<$/> to a reference to %s as a form of slurp is deprecated,
+treating as undef. This will be fatal in Perl 5.28
+
+=item *
+
+Unescaped left brace in regex is deprecated here (and will be fatal
+in Perl 5.30), passed through in regex; marked by S<< E<lt>-- HERE >> in m/%s/
+
+=item *
+
+Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28
+
+=item *
+
+Use of bare E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated. Its use will be fatal in Perl 5.28
+
+=item *
+
+Use of code point 0x%s is deprecated; the permissible max is 0x%s.
+This will be fatal in Perl 5.28
+
+=item *
+
+Use of comma-less variable list is deprecated. Its use will be fatal
+in Perl 5.28
+
+=item *
+
+Use of inherited AUTOLOAD for non-method %s() is deprecated. This
+will be fatal in Perl 5.28
+
+=item *
+
+Use of strings with code points over 0xFF as arguments to %s operator
+is deprecated. This will be a fatal error in Perl 5.28
+
+=item *
+
+Improve error for missing C<tie()> package/method. This brings the error messages
+in line with the ones used for normal method calls, despite not using
+call_method().
+
+=item *
+
+Make the C<sysread()>/C<syswrite()> I<etc.>, C<:utf8> handle warnings
+XXX default. These warnings were under 'deprecated' previously.
+
+=item *
+
+C<do> errors now refer to C<do> (not C<require>).
+
+=item *
+
+Details as to the exact problem have been added to the diagnostics that
+occur when malformed UTF-8 is encountered when trying to convert to a
+code point.
+
+=item *
+
+Executing C<undef $x> where C<$x> is tied or magical no longer incorrectly
+blames the variable for an uninitialized-value warning encountered by the
+tied/magical code.
+
+=item *
+
+Code like C<$x = $x . "a"> was incorrectly failing to yield a
+L<use of uninitialized value|perldiag/"Use of uninitialized value%s">
+warning when C<$x> was a lexical variable with an undefined value. That has
+now been fixed. [perl #127877]
+
+=item *
+
+When the error "Experimental push on scalar is now forbidden" is raised for
+the hash functions C<keys>, C<each>, and C<values>, it is now followed by
+the more helpful message, "Type of arg 1 to whatever must be hash or
+array". [perl #127976]
+
+=item *
+
+C<undef *_; shift> or C<undef *_; pop> inside a subroutine, with no
+argument to C<shift> or C<pop>, began crashing in Perl 5.14, but has now
+been fixed.
+
+=item *
+
+C<< "string$scalar-E<gt>$*" >> now correctly prefers concat overloading to
+string overloading if C<< $scalar-E<gt>$* >> returns an overloaded object,
+bringing it into consistency with C<$$scalar>.
+
+=item *
+
+C<< /@0{0*-E<gt>@*/*0 >> and similar contortions used to crash, but no longer
+do, but merely produce a syntax error. [perl #128171]
+
+=item *
+
+C<do> or C<require> with a reference or typeglob which, when stringified,
+contains a null character started crashing in Perl 5.20, but has now been
+fixed. [perl #128182]
+
+=back
+
+=head1 Utility Changes
+
+=head2 F<c2ph> and F<pstruct>
+
+=over 4
+
+=item *
+
+These old utilities have long since superceded by L<h2xs>, and are
+now gone from the distribution.
+
+=back
+
+=head2 F<Porting/pod_lib.pl>
+
+=over 4
+
+=item *
+
+Removed spurious executable bit.
+
+=item *
+
+Account for the possibility of DOS file endings.
+
+=back
+
+=head2 F<Porting/sync-with-cpan>
+
+=over 4
+
+=item *
+
+Many improvements
+
+=back
+
+=head2 F<perf/benchmarks>
+
+=over 4
+
+=item *
+
+Tidy file, rename some symbols.
+
+=back
+
+=head2 F<Porting/checkAUTHORS.pl>
+
+=over 4
+
+=item *
+
+Replace obscure character range with C<\w>.
+
+=back
+
+=head2 F<t/porting/regen.t>
+
+=over 4
+
+=item *
+
+try to be more helpful when tests fail.
+
+=back
+
+=head2 F<utils/h2xs.PL>
+
+=over 4
+
+=item *
+
+Avoid infinite loop for enums.
+
+=back
+
+=head2 L<perlbug>
+
+=over 4
+
+=item *
+
+Long lines in the message body are now wrapped at 900 characters, to stay
+well within the 1000-character limit imposed by SMTP mail transfer agents.
+This is particularly likely to be important for the list of arguments to
+C<Configure>, which can readily exceed the limit if, for example, it names
+several non-default installation paths.  This change also adds the first unit
+tests for perlbug. [perl #128020]
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+C<-Ddefault_inc_excludes_dot> has been turned on by default.
+
+=item *
+
+The C<dtrace> build process has further changes [perl #130108]:
+
+=over
+
+=item *
+
+If the C<-xnolibs> is available, use that so a F<dtrace> perl can be
+built within a FreeBSD jail.
+
+=item *
+
+On systems that build a dtrace object file (FreeBSD, Solaris and
+SystemTap's dtrace emulation), copy the input objects to a separate
+directory and process them there, and use those objects in the link,
+since C<dtrace -G> also modifies these objects.
+
+=item *
+
+Add libelf to the build on FreeBSD 10.x, since dtrace adds references
+to libelf symbols.
+
+=item *
+
+Generate a dummy dtrace_main.o if C<dtrace -G> fails to build it.  A
+default build on Solaris generates probes from the unused inline
+functions, while they don't on FreeBSD, which causes C<dtrace -G> to
+fail.
+
+=back
+
+=item *
+
+You can now disable perl's use of the C<PERL_HASH_SEED> and
+C<PERL_PERTURB_KEYS> environment variables by configuring perl with
+C<-Accflags=NO_PERL_HASH_ENV>.
+
+=item *
+
+You can now disable perl's use of the C<PERL_HASH_SEED_DEBUG> environment
+variable by configuring perl with
+C<-Accflags=-DNO_PERL_HASH_SEED_DEBUG>.
+
+=item *
+
+Zero out the alignment bytes when calculating the bytes for 80-bit C<NaN>
+and C<Inf> to make builds more reproducible. [perl #130133]
+
+=item *
+
+Since v5.18 for testing purposes, we have included support for
+building perl with a variety of non-standard, and non-recommended
+hash functions.  Since we do not recommend the use of these functions
+we have removed them and their corresponding build options.  Specifically
+this includes the following build options:
+
+    PERL_HASH_FUNC_SDBM
+    PERL_HASH_FUNC_DJB2
+    PERL_HASH_FUNC_SUPERFAST
+    PERL_HASH_FUNC_MURMUR3
+    PERL_HASH_FUNC_ONE_AT_A_TIME
+    PERL_HASH_FUNC_ONE_AT_A_TIME_OLD
+    PERL_HASH_FUNC_MURMUR_HASH_64A
+    PERL_HASH_FUNC_MURMUR_HASH_64B
+
+=item *
+
+Remove "Warning: perl appears in your path"
+
+This install warning is more or less obsolete, since most platforms already
+B<will> have a F</usr/bin/perl> or similar provided by the OS.
+
+=item *
+
+Reduce verbosity of C<make install.man>
+
+Previously, two progress messages were emitted for each manpage: one by
+installman itself, and one by the function in install_lib.pl that it calls to
+actually install the file.  Disabling the second of those in each case saves
+over 750 lines of unhelpful output.
+
+=item *
+
+Cleanup for C<clang -Weverything> support. [perl 129961]
+
+=item *
+
+Configure: signbit scan was assuming too much, stop assuming negative 0.
+
+=item *
+
+Various compiler warnings have been silenced.
+
+=item *
+
+Several smaller changes have been made to remove impediments to compiling under
+C++11.
+
+=item *
+
+Builds using C<USE_PAD_RESET> now work again; this configuration had
+bit-rotted.
+
+=item *
+
+A probe for C<gai_strerror> was added to F<Configure> that checks if the
+the C<gai_strerror()> routine is available and can be used to
+translate error codes returned by C<getaddrinfo()> into human
+readable strings.
+
+=item *
+
+F<Configure> now aborts if both C<-Duselongdouble> and C<-Dusequadmath> are
+requested.
+L<[perl #126203]|https://rt.perl.org/Public/Bug/Display.html?id=126203>
+
+=item *
+
+Fixed a bug in which F<Configure> could append C<-quadmath> to the archname even
+if it was already present.
+L<[perl #128538]|https://rt.perl.org/Public/Bug/Display.html?id=128538>
+
+=item *
+
+Clang builds with C<-DPERL_GLOBAL_STRUCT> or
+C<-DPERL_GLOBAL_STRUCT_PRIVATE> have
+been fixed (by disabling Thread Safety Analysis for these configurations).
+
+=item *
+
+F<make_ext.pl> no longer updates a module's F<pm_to_blib> file when no
+files require updates.  This could cause dependencies, F<perlmain.c>
+in particular, to be rebuilt unnecessarily.  [perl #126710]
+
+=item *
+
+The output of C<perl -V> has been reformatted so that each configuration
+and compile-time option is now listed one per line, to improve
+readability.
+
+=item *
+
+C<Configure> now builds C<miniperl> and C<generate_uudmap> if you
+invoke it with C<-Dusecrosscompiler> but not C<-Dtargethost=somehost>.
+This means you can supply your target platform C<config.sh>, generate
+the headers and proceed to build your cross-target perl.  [perl #127234]
+
+=item *
+
+Builds with C<-Accflags=-DPERL_TRACE_OPS> now only dump the operator
+counts when the environment variable C<PERL_TRACE_OPS> to be set to a
+non-zero integer.  This allows C<make test> to pass on such a build.
+
+=item *
+
+When building with GCC 6 and link-time optimization (the C<-flto> option to
+C<gcc>), C<Configure> was treating all probed symbols as present on the
+system, regardless of whether they actually exist.  This has been fixed.
+[perl #128131]
+
+=item *
+
+The F<t/test.pl> library is used for internal testing of Perl itself, and
+also copied by several CPAN modules.  Some of those modules must work on
+older versions of Perl, so F<t/test.pl> must in turn avoid newer Perl
+features.  Compatibility with Perl 5.8 was inadvertently removed some time
+ago; it has now been restored. [perl #128052]
+
+=item *
+
+The build process no longer emits an extra blank line before building each
+"simple" extension (those with only F<*.pm> and F<*.pod> files).
+
+=back
+
+=head1 Testing
+
+Tests were added and changed to reflect the other additions and changes
+in this release.  In addition, these substantive changes were made:
+
+=over 4
+
+=item *
+
+A new test script, F<comp/parser_run.t>, has been added to test
+reads through invalid pointers.
+
+=item *
+
+Tests for locales were erroneously using locales incompatible with Perl.
+
+=item *
+
+Some parts of the test suite that try to exhaustively test edge cases in the
+regex implementation have been restricted to running for a maximum of five
+minutes.  On slow systems they could otherwise take several hours, without
+significantly improving our understanding of the correctness of the code
+under test.
+
+In addition, some of those test cases have been split into more files, to
+allow them to be run in parallel on suitable systems.
+
+=item *
+
+A new internal facility allows analysing the time taken by the individual
+tests in Perl's own test suite; see F<Porting/harness-timer-report.pl>.
+
+=item *
+
+F<t/re/regexp_nonull.t> has been added to test that the regular expression
+engine can handle scalars that do not have a null byte just past the end of
+the string.
+
+=item *
+
+A new test script, F<t/op/decl-refs.t>, has been added to test the new feature,
+"Declaring a reference to a variable".
+
+=item *
+
+A new test script, F<t/re/keep_tabs.t> has been added to contain tests
+where C<\t> characters should not be expanded into spaces.
+
+=item *
+
+A new test script, F<t/re/anyof.t>, has been added to test that the ANYOF nodes
+generated by bracketed character classes are as expected.
+
+=item *
+
+There is now more extensive testing of the Unicode-related API macros
+and functions.
+
+=item *
+
+Several of the longer running API test files have been split into
+multiple test files so that they can be run in parallel.
+
+=item *
+
+F<t/harness> now tries really hard not to run tests outside of the Perl
+source tree. [perl #124050]
+
+=back
+
+=head1 Platform Support
+
+=head2 New Platforms
+
+=over 4
+
+=item NetBSD/VAX
+
+Perl now compiles under NetBSD on VAX machines.  However, it's not
+possible for that platform to implement floating-point infinities and
+NaNs compatibly with most modern systems, which implement the IEEE-754
+floating point standard.  The hexadecimal floating point (C<0x...p[+-]n>
+literals, C<printf %a>) is not implemented, either.
+The C<make test> passes 98% of tests.
+
+=over 4
+
+=item *
+
+Test fixes and minor updates.
+
+=item *
+
+Account for lack of C<inf>, C<nan>, and C<-0.0> support.
+
+=back
+
+=back
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item Darwin
+
+don't treat C<-Dprefix=/usr> as special, instead require an extra option
+C<-Ddarwin_distribution> to produce the same results.
+
+=item POSIX
+
+Finish removing POSIX deprecated functions.
+
+=item OS X
+
+OS X El Capitan doesn't implement the C<clock_gettime()> or
+C<clock_getres()> APIs; emulate them as necessary.
+
+=item macOS
+
+Deprecated C<syscall(2)> on macOS 10.12.
+
+=item EBCDIC
+
+Several tests have been updated to work (or be skipped) on EBCDIC platforms.
+
+=item HP-UX
+
+L<Net::Ping> UDP test is skipped on HP-UX.
+
+=item Hurd
+
+The hints for Hurd have been improved enabling malloc wrap and reporting the
+GNU libc used (previously it was an empty string when reported).
+
+=item VAX
+
+VAX floating point formats are now supported on NetBSD.
+
+=item VMS
+
+=over 4
+
+=item *
+
+The path separator for the C<PERL5LIB> and C<PERLLIB> environment entries is
+now a colon (C<":">) when running under a Unix shell.  There is no change when
+running under DCL (it's still C<"|">).
+
+=item *
+
+C<configure.com> now recognizes the VSI-branded C compiler and no longer
+recognizes the "DEC"-branded C compiler (as there hasn't been such a thing for
+15 or more years).
+
+=back
+
+=item Windows
+
+=over 4
+
+=item *
+
+Support for compiling perl on Windows using Microsoft Visual Studio 2015
+(containing Visual C++ 14.0) has been added.
+
+This version of VC++ includes a completely rewritten C run-time library, some
+of the changes in which mean that work done to resolve a socket
+C<close()> bug in
+perl #120091 and perl #118059 is not workable in its current state with this
+version of VC++.  Therefore, we have effectively reverted that bug fix for
+VS2015 onwards on the basis that being able to build with VS2015 onwards is
+more important than keeping the bug fix.  We may revisit this in the future to
+attempt to fix the bug again in a way that is compatible with VS2015.
+
+These changes do not affect compilation with GCC or with Visual Studio versions
+up to and including VS2013, I<i.e.>, the bug fix is retained (unchanged) for those
+compilers.
+
+Note that you may experience compatibility problems if you mix a perl built
+with GCC or VS E<lt>= VS2013 with XS modules built with VS2015, or if you mix a
+perl built with VS2015 with XS modules built with GCC or VS E<lt>= VS2013.
+Some incompatibility may arise because of the bug fix that has been reverted
+for VS2015 builds of perl, but there may well be incompatibility anyway because
+of the rewritten CRT in VS2015 (I<e.g.>, see discussion at
+http://stackoverflow.com/questions/30412951).
+
+=back
+
+=item Win32
+
+=over 4
+
+=item *
+
+Tweaks for Win32 VC vs GCC detection makefile code.  This fixes issue that CCHOME
+depends on CCTYPE, which in auto detect mode is set after CCHOME, so CCHOME uses
+the uninit CCTYPE var.  Also fix else vs .ELSE in makefile.mk
+
+=item *
+
+fp definitions have been updated.
+
+=back
+
+=item Linux
+
+Drop support for Linux a.out Linux has used ELF for over twenty years.
+
+=item OpenBSD 6
+
+OpenBSD 6 still does not support returning pid, gid or uid with SA_SIGINFO.
+Make sure this is accounted for.
+
+=item FreeBSD
+
+F<t/uni/overload.t>: Skip hanging test on FreeBSD.
+
+=back
+
+=head1 Internal Changes
+
+=over 4
+
+=item *
+
+A new API function C<sv_setvpv_bufsize()> allows simultaneously setting the
+length and allocated size of the buffer in an C<SV>, growing the buffer if
+necessary.
+
+=item *
+
+A new API macro C<SvPVCLEAR()> sets its C<SV> argument to an empty string,
+like Perl-space C<$x = ''>, but with several optimisations.
+
+=item *
+
+Several new macros and functions for dealing with Unicode and
+UTF-8-encoded strings have been added to the API, as well as some
+changes in
+functionality of existing functions (see L<perlapi/Unicode Support> for
+more details):
+
+=over
+
+=item *
+
+New versions of macros like C<isALPHA_utf8> and C<toLOWER_utf8>  have
+been added, each with the
+suffix C<_safe>, like C<isSPACE_utf8_safe>.  These take an extra
+parameter, giving an upper limit of how far into the string it is safe
+to read.  Using the old versions could cause attempts to read beyond the
+end of the input buffer if the UTF-8 is not well-formed, and their use
+now raises a deprecation warning.  Details are at
+L<perlapi/Character classification>.
+
+=item *
+
+Calling macros like C<isALPHA_utf8> on malformed UTF-8 have issued a
+deprecation warning since Perl 5.18.  They now die.
+Similarly, macros like C<toLOWER_utf8> on malformed UTF-8 now die.
+
+=item *
+
+Several new macros for analysing the validity of utf8 sequences. These
+are:
+
+L<C<UTF8_GOT_ABOVE_31_BIT>|perlapi/UTF8_GOT_ABOVE_31_BIT>
+L<C<UTF8_GOT_CONTINUATION>|perlapi/UTF8_GOT_CONTINUATION>
+L<C<UTF8_GOT_EMPTY>|perlapi/UTF8_GOT_EMPTY>
+L<C<UTF8_GOT_LONG>|perlapi/UTF8_GOT_LONG>
+L<C<UTF8_GOT_NONCHAR>|perlapi/UTF8_GOT_NONCHAR>
+L<C<UTF8_GOT_NON_CONTINUATION>|perlapi/UTF8_GOT_NON_CONTINUATION>
+L<C<UTF8_GOT_OVERFLOW>|perlapi/UTF8_GOT_OVERFLOW>
+L<C<UTF8_GOT_SHORT>|perlapi/UTF8_GOT_SHORT>
+L<C<UTF8_GOT_SUPER>|perlapi/UTF8_GOT_SUPER>
+L<C<UTF8_GOT_SURROGATE>|perlapi/UTF8_GOT_SURROGATE>
+L<C<UTF8_IS_INVARIANT>|perlapi/UTF8_IS_INVARIANT>
+L<C<UTF8_IS_NONCHAR>|perlapi/UTF8_IS_NONCHAR>
+L<C<UTF8_IS_SUPER>|perlapi/UTF8_IS_SUPER>
+L<C<UTF8_IS_SURROGATE>|perlapi/UTF8_IS_SURROGATE>
+L<C<UVCHR_IS_INVARIANT>|perlapi/UVCHR_IS_INVARIANT>
+L<C<isUTF8_CHAR_flags>|perlapi/isUTF8_CHAR_flags>
+L<C<isSTRICT_UTF8_CHAR>|perlapi/isSTRICT_UTF8_CHAR>
+L<C<isC9_STRICT_UTF8_CHAR>|perlapi/isC9_STRICT_UTF8_CHAR>
+
+=item *
+
+Functions that are all extensions of the C<is_utf8_string_I<*>()> functions,
+that apply various restrictions to the UTF-8 recognized as valid:
+
+L<C<is_strict_utf8_string>|perlapi/is_strict_utf8_string>,
+L<C<is_strict_utf8_string_loc>|perlapi/is_strict_utf8_string_loc>,
+L<C<is_strict_utf8_string_loclen>|perlapi/is_strict_utf8_string_loclen>,
+
+L<C<is_c9strict_utf8_string>|perlapi/is_c9strict_utf8_string>,
+L<C<is_c9strict_utf8_string_loc>|perlapi/is_c9strict_utf8_string_loc>,
+L<C<is_c9strict_utf8_string_loclen>|perlapi/is_c9strict_utf8_string_loclen>,
+
+L<C<is_utf8_string_flags>|perlapi/is_utf8_string_flags>,
+L<C<is_utf8_string_loc_flags>|perlapi/is_utf8_string_loc_flags>,
+L<C<is_utf8_string_loclen_flags>|perlapi/is_utf8_string_loclen_flags>,
+
+L<C<is_utf8_fixed_width_buf_flags>|perlapi/is_utf8_fixed_width_buf_flags>,
+L<C<is_utf8_fixed_width_buf_loc_flags>|perlapi/is_utf8_fixed_width_buf_loc_flags>,
+L<C<is_utf8_fixed_width_buf_loclen_flags>|perlapi/is_utf8_fixed_width_buf_loclen_flags>.
+
+L<C<is_utf8_invariant_string>|perlapi/is_utf8_invariant_string>.
+L<C<is_utf8_valid_partial_char>|perlapi/is_utf8_valid_partial_char>.
+L<C<is_utf8_valid_partial_char_flags>|perlapi/is_utf8_valid_partial_char_flags>.
+
+=item *
+
+The  functions L<C<utf8n_to_uvchr>|perlapi/utf8n_to_uvchr> and its
+derivatives have had several changes of behaviour.
+
+Calling them, while passing a string length of 0 is now asserted against
+in DEBUGGING builds, and otherwise returns the Unicode REPLACEMENT
+CHARACTER.   If you have nothing to decode, you shouldn't call the decode
+function.
+
+They now return the Unicode REPLACEMENT CHARACTER if called with UTF-8
+that has the overlong malformation, and that malformation is allowed by
+the input parameters.  This malformation is where the UTF-8 looks valid
+syntactically, but there is a shorter sequence that yields the same code
+point.  This has been forbidden since Unicode version 3.1.
+
+They now accept an input
+flag to allow the overflow malformation.  This malformation is when the
+UTF-8 may be syntactically valid, but the code point it represents is
+not capable of being represented in the word length on the platform.
+What "allowed" means in this case is that the function doesn't return an
+error, and it advances the parse pointer to beyond the UTF-8 in
+question, but it returns the Unicode REPLACEMENT CHARACTER as the value
+of the code point (since the real value is not representable).
+
+C<utf8n_to_uvchr> has been changed to not
+abandon searching for other malformations when the first one is
+encountered.  A call to it thus can generate multiple diagnostics,
+instead of just one.
+
+=item *
+
+C<valid_utf8_to_uvchr()> has been added to the API (although it was
+present in core earlier). Like C<utf8_to_uvchr_buf()>, but assumes that
+the next character is well-formed.  Use with caution.
+
+=item *
+
+A new function, L<C<utf8n_to_uvchr_error>|perlapi/utf8n_to_uvchr_error>,
+has been added for
+use by modules that need to know the details of UTF-8 malformations
+beyond pass/fail.  Previously, the only ways to know why a sequence was
+ill-formed was to capture and parse the generated diagnostics, or to do
+your own analysis.
+
+=item *
+
+There is now a safer version of utf8_hop(), called utf8_hop_safe().
+Unlike utf8_hop(), utf8_hop_safe() won't navigate before the beginning or
+after the end of the supplied buffer.
+
+=item *
+
+Two new functions, C<utf8_hop_forward()> and C<utf8_hop_back()> are
+similar to C<utf8_hop_safe()> but are for when you know which direction
+you wish to travel.
+
+=item *
+
+Two new macros which return useful utf8 byte sequences:
+
+L<C<BOM_UTF8>|perlapi/BOM_UTF8>
+L<C<REPLACEMENT_CHARACTER_UTF8>|perlapi/REPLACEMENT_CHARACTER_UTF8>
+
+=back
+
+=item *
+
+Perl is now built with the C<PERL_OP_PARENT> compiler define enabled by
+default.  To disable it, use the C<PERL_NO_OP_PARENT> compiler define.
+This flag alters how the C<op_sibling> field is used in C<OP> structures,
+and has been available optionally since perl 5.22.
+
+See L<perl5220delta/"Internal Changes"> for more details of what this
+build option does.
+
+=item *
+
+Three new ops, C<OP_ARGELEM>, C<OP_ARGDEFELEM> and C<OP_ARGCHECK> have
+been added.  These are intended principally to implement the individual
+elements of a subroutine signature, plus any overall checking required.
+
+=item *
+
+The C<op_class()> API function has been added.  This is like the existing
+C<OP_CLASS()> macro, but can more accurately determine what struct an op
+has been allocated as.  For example C<OP_CLASS()> might return
+C<OA_BASEOP_OR_UNOP> indicating that ops of this type are usually
+allocated as an C<OP> or C<UNOP>; while C<op_class()> will return
+C<OPclass_BASEOP> or C<OPclass_UNOP> as appropriate.
+
+=item *
+
+All parts of the internals now agree that the C<sassign> op is a C<BINOP>;
+previously it was listed as a C<BASEOP> in F<regen/opcodes>, which meant
+that several parts of the internals had to be special-cased to accommodate
+it.  This oddity's original motivation was to handle code like C<$x ||= 1>;
+that is now handled in a simpler way.
+
+=item *
+
+The output format of the C<op_dump()> function (as used by C<perl -Dx>)
+has changed: it now displays an "ASCII-art" tree structure, and shows more
+low-level details about each op, such as its address and class.
+
+=item *
 
-=over 4
+The C<PADOFFSET> type has changed from being unsigned to signed, and
+several pad-related variables such as C<PL_padix> have changed from being
+of type C<I32> to type C<PADOFFSET>.
 
 =item *
 
-A hash in boolean context is now sometimes faster, e.g.
+The C<DEBUGGING>-mode output for regex compilation and execution has been
+enhanced.
 
-    if (!%h) { ... }
+=item *
 
-This was already special-cased, but some cases were missed, and even the
-ones which weren't have been improved.
+Several obscure SV flags have been eliminated, sometimes along with the
+macros which manipulate them: C<SVpbm_VALID>, C<SVpbm_TAIL>, C<SvTAIL_on>,
+C<SvTAIL_off>, C<SVrepl_EVAL>, C<SvEVALED>
 
 =item *
 
-Several other ops may now also be faster in boolean context.
+An OP op_private flag has been eliminated: C<OPpRUNTIME>. This used to
+often get set on C<PMOP>s, but had become meaningless over time.
 
 =back
 
-=head1 Modules and Pragmata
-
-=head2 Updated Modules and Pragmata
+=head1 Selected Bug Fixes
 
 =over 4
 
 =item *
 
-L<attributes> has been upgraded from version 0.28 to 0.29.
-
-The deprecation message for the C<:unique> and C<:locked> attributes
-now mention they will disappear in Perl 5.28.
+Perl no longer panics when switching into some locales on machines with
+buggy C<strxfrm()> implementations in their libc. [perl #121734]
 
 =item *
 
-L<B::Deparse> has been upgraded from version 1.39 to 1.40.
+C< $-{$name} > would leak an C<AV> on each access if the regular
+expression had no named captures.  The same applies to access to any
+hash tied with L<Tie::Hash::NamedCapture> and C<< all =E<gt> 1 >>. [perl
+#130822]
 
 =item *
 
-L<B::Xref> has been upgraded from version 1.05 to 1.06.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+Attempting to use the deprecated variable C<$#> as the object in an
+indirect object method call could cause a heap use after free or
+buffer overflow.  [perl #129274]
 
 =item *
 
-L<Compress::Raw::Bzip2> has been upgraded from version 2.069 to 2.070.
+When checking for an indirect object method call in some rare cases
+the parser could reallocate the line buffer but then continue to use
+pointers to the old buffer.  [perl #129190]
 
 =item *
 
-L<Compress::Raw::Zlib> has been upgraded from version 2.069 to 2.070.
+Supplying a glob as the format argument to
+L<C<formline>|perlfunc/formline> would
+cause an assertion failure.  [perl #130722]
 
 =item *
 
-L<CPAN> has been upgraded from version 2.14_01 to 2.16.
+Code like C< $value1 =~ qr/.../ ~~ $value2 > would have the match
+converted into a C<qr//> operator, leaving extra elements on the stack to
+confuse any surrounding expression.  [perl #130705]
 
 =item *
 
-L<Data::Dumper> was upgraded from version 2.166 to 2.167.
-
-This fixes a stack management bug. [perl #130487].
+Since v5.24 in some obscure cases, a regex which included code blocks
+from multiple sources (I<e.g.>, via embedded via C<qr//> objects) could end up
+with the wrong current pad and crash or give weird results. [perl #129881]
 
 =item *
 
-L<DB_File> has been upgraded from version 1.838 to 1.840.
+Occasionally C<local()>s in a code block within a patterns weren't being
+undone when the pattern matching backtracked over the code block.
+[perl #126697]
 
 =item *
 
-L<Devel::SelfStubber> has been upgraded from version 1.05 to 1.06.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+Using C<substr()> to modify a magic variable could access freed memory
+in some cases.  [perl #129340]
 
 =item *
 
-L<diagnostics> has been upgraded from version 1.35 to 1.36.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+Under C<use utf8>, the entire Perl program is now checked that the UTF-8
+is wellformed.  [perl #126310].
 
 =item *
 
-L<DynaLoader> has been upgraded from version 1.40 to 1.41.
+The range operator C<".."> on strings now handles its arguments correctly when in
+the scope of the L<< C<unicode_strings>|feature/"The 'unicode_strings' feature" >>
+feature.  The previous behaviour was sufficiently unexpected that we believe no
+correct program could have made use of it.
 
 =item *
 
-L<Errno> has been upgraded from version 1.27 to 1.28.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+The C<split> operator did not ensure enough space was allocated for
+its return value in scalar context.  It could then write a single
+pointer immediately beyond the end of the memory block allocated for
+the stack.  [perl #130262]
 
 =item *
 
-L<ExtUtils::Embed> has been upgraded from version 1.33 to 1.34.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+Using a large code point with the C<"W"> pack template character with
+the current output position aligned at just the right point could
+cause a write a single zero byte immediately beyond the end of an
+allocated buffer.  [perl #129149]
 
 =item *
 
-L<feature> has been upgraded from version 1.45 to 1.46.
-
-Fixes the Unicode Bug in the range operator.
+Supplying the form picture argument as part of the form argument list
+where the picture specifies modifying the argument could cause an
+access to the new freed compiled form.  [perl #129125]
 
 =item *
 
-L<File::Glob> has been upgraded from version 1.27 to 1.28.
-
-Issue a deprecation message for C<File::Glob::glob()>.
+Fix a problem with sort's build-in compare, where it would not sort
+correctly with 64-bit integers, and non-long doubles. [perl #130335]
 
 =item *
 
-L<I18N::LangTags> has been upgraded from version 0.41 to 0.42.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+Fix issues with C</(?{ ... E<lt>E<lt>EOF })/> that broke Method-Signatures. [perl #130398]
 
 =item *
 
-L<lib> has been upgraded from version 0.63 to 0.64.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+Fix a macro which caused syntax error on an EBCDIC build.
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 5.20161220 to 5.20170120.
+Prevent tests from getting hung up on 'NonStop' option. [perl #130445]
 
 =item *
 
-L<OS2::Process> has been upgraded from version 1.11 to 1.12.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+Fixed an assertion failure with C<chop> and C<chomp>, which
+could be triggered by C<chop(@x =~ tr/1/1/)>. [perl #130198].
 
 =item *
 
-L<overload> has been upgraded from version 1.27 to 1.28.
+Fixed a comment skipping error in patterns under C</x>; it could stop
+skipping a byte early, which could be in the middle of a UTF-8
+character.  [perl #130495].
 
 =item *
 
-L<perl5db.pl> has been upgraded from version 1.50 to 1.51.
-
-Ignore F</dev/tty> on non-Unix systems. [perl #113960]
+F<perldb> now ignores F</dev/tty> on non-Unix systems. [perl #113960];
 
 =item *
 
-L<PerlIO::scalar> has been upgraded from version 0.25 to 0.26.
+Fix assertion failure for C<{}-E<gt>$x> when C<$x> isn't defined. [perl #130496].
 
 =item *
 
-L<Pod::Html> has been upgraded from version 1.2201 to 1.2202.
+DragonFly BSD now has support for C<setproctitle()>. [perl #130068].
 
 =item *
 
-L<re> has been upgraded from version 0.33 to 0.34
-
-This adds support for the new L<C<E<47>xx>|perlre/E<sol>x and E<sol>xx>
-regular expression pattern modifier, and a change to the L<S<C<use re
-'strict'>>|re/'strict' mode> experimental feature.  When S<C<re
-'strict'>> is enabled, a warning now will be generated for all
-unescaped uses of the two characters C<}> and C<]> in regular
-expression patterns (outside bracketed character classes) that are taken
-literally.  This brings them more in line with the C<)> character which
-is always a metacharacter unless escaped.  Being a metacharacter only
-sometimes, depending on action at a distance, can lead to silently
-having the pattern mean something quite different than was intended,
-which the S<C<re 'strict'>> mode is intended to minimize.
+Fix an assertion error which could be triggered when a lookahead string
+in patterns exceeded a minimum length. [perl #130522].
 
 =item *
 
-L<Storable> has been upgraded from version 2.59 to 2.61.
-
-Fixes [perl #130098].
+Only warn once per literal about a misplaced C<"_">. [perl #70878].
 
 =item *
 
-L<Symbol> has been upgraded from version 1.07 to 1.08.
+Ensure range-start is set after error in C<tr///>. [perl #129342].
 
 =item *
 
-L<Term::ReadLine> has been upgraded from version 1.15 to 1.16.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+Don't read past start of string for unmatched backref; otherwise,
+we may have heap buffer overflow. [perl #129377].
 
 =item *
 
-L<Test> has been upgraded from version 1.29 to 1.30.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+C<use re 'strict'> is supposed to warn if you use a range whose start
+and end digit aren't from the same group of 10.  It didn't do that
+for five groups of mathematical digits starting at U+1D7E.
 
 =item *
 
-L<threads> has been upgraded from version 2.10 to 2.12.
-
-Fixes [perl #130469].
+A sub containing a "forward" declaration with the same name (I<e.g.>,
+C<sub c { sub c; }>) could sometimes crash or loop infinitely.  [perl
+#129090]
 
 =item *
 
-L<threads::shared> has been upgraded from version 1.52 to 1.54.
-
-This fixes [cpan #119529], [perl #130457]
+A crash in executing a regex with a non-anchored UTF-8 substring against a
+target string that also used UTF-8 has been fixed. [perl #129350]
 
 =item *
 
-L<Unicode::UCD> has been upgraded from version 0.67 to 0.68.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+Previously, a shebang line like C<#!perl -i u> could be erroneously
+interpreted as requesting the C<-u> option.  This has been fixed. [perl
+#129336]
 
 =item *
 
-L<VMS::DCLsym> has been upgraded from version 1.07 to 1.08.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+The regex engine was previously producing incorrect results in some rare
+situations when backtracking past a trie that matches only one thing; this
+showed up as capture buffers (C<$1>, C<$2>, I<etc.>) erroneously containing data
+from regex execution paths that weren't actually executed for the final
+match.  [perl #129897]
 
 =item *
 
-L<XSLoader> has been upgraded from version 0.24 to 0.26.
-
-It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122]
+Certain regexes making use of the experimental C<regex_sets> feature could
+trigger an assertion failure.  This has been fixed. [perl #129322]
 
-=back
+=item *
 
-=head1 Documentation
+Invalid assignments to a reference constructor (I<e.g.>, C<\eval=time>) could
+sometimes crash in addition to giving a syntax error.  [perl #125679]
 
-=head2 New Documentation
+=item *
 
-=head3 L<perldeprecation>
+The parser could sometimes crash if a bareword came after C<evalbytes>.
+[perl #129196]
 
-This file documents all upcoming deprecations, and some of the deprecations
-which already have been removed. The purpose of this documentation is
-two-fold: document what will disappear, and by which version, and serve
-as a guide for people dealing with code which has features that no longer
-work after an upgrade of their perl.
+=item *
 
-=head1 Diagnostics
+Autoloading via a method call would warn erroneously ("Use of inherited
+AUTOLOAD for non-method") if there was a stub present in the package into
+which the invocant had been blessed.  The warning is no longer emitted in
+such circumstances.  [perl #47047]
 
-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>.
+=item *
 
-=head2 New Diagnostics
+The use of C<splice> on arrays with nonexistent elements could cause other
+operators to crash.  [perl #129164]
 
-=head3 New Warnings
+=item *
 
-=over 4
+Fixed case where C<re_untuit_start> will overshoot the length of a utf8
+string. [perl #129012]
 
 =item *
 
-L<Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl v5.30|perldiag/"Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl v5.30">
+Handle C<CXt_SUBST> better in C<Perl_deb_stack_all>, previously it wasn't
+checking that the I<current> C<cx> is the right type, and instead was always
+checking the base C<cx> (effectively a noop). [perl #129029]
 
-See L</Deprecations>
-
-=back
+=item *
 
-=head2 Changes to Existing Diagnostics
+Fixed two possible use-after-free bugs in C<Perl_yylex>.  C<Perl_yylex>
+maintains up to two pointers into the parser buffer, one of which can
+become stale under the right conditions. [perl #129069]
 
-As of Perl 5.25.9, all new deprecations will come with a version in
-which the feature will disappear. And with a few exceptions, most
-existing deprecations will state when they'll disappear. As such, most
-deprecation messages have changed.
+=item *
 
-=over 4
+Fixed a crash with C<s///l> where it thought it was dealing with UTF-8
+when it wasn't. [perl #129038]
 
 =item *
 
-Attribute "locked" is deprecated, and will disappear in Perl 5.28
+Fixed place where regex was not setting the syntax error correctly.
+[perl #129122]
 
 =item *
 
-Attribute "unique" is deprecated, and will disappear in Perl 5.28
+The C<&.> operator (and the C<"&"> operator, when it treats its arguments as
+strings) were failing to append a trailing null byte if at least one string
+was marked as utf8 internally.  Many code paths (system calls, regexp
+compilation) still expect there to be a null byte in the string buffer
+just past the end of the logical string.  An assertion failure was the
+result.  [perl #129287]
 
 =item *
 
-"\c%c" is more clearly written simply as "%s". This will be a fatal error
-in Perl 5.28
+Check C<pack_sockaddr_un()>'s return value because C<pack_sockaddr_un()>
+silently truncates the supplied path if it won't fit into the C<sun_path>
+member of C<sockaddr_un>.  This may change in the future, but for now
+check the path in theC<sockaddr> matches the desired path, and skip if
+it doesn't. [perl #128095]
 
 =item *
 
-Constants from lexical variables potentially modified elsewhere are
-deprecated. This will not be allowed in Perl 5.32
+Make sure C<PL_oldoldbufptr> is preserved in C<scan_heredoc()>.  In some
+cases this is used in building error messages. [perl #128988]
 
 =item *
 
-Deprecated use of my() in false conditional. This will be a fatal error
-in Perl 5.30
+Check for null PL_curcop in IN_LC() [perl #129106]
 
 =item *
 
-dump() better written as CORE::dump(). dump() will no longer be available 
-in Perl 5.30
+Fixed the parser error handling for an 'C<:attr(foo>' that does not have
+an ending 'C<")">'.
 
 =item *
 
-${^ENCODING} is no longer supported. Its use will be fatal in Perl 5.28
+Fix C<Perl_delimcpy()> to handle a backslash as last char, this
+actually fixed two bugs, [perl #129064] and [perl #129176].
 
 =item *
 
-File::Glob::glob() will disappear in perl 5.30. Use File::Glob::bsd_glob()
-instead.
+[perl #129267] rework C<gv_fetchmethod_pvn_flags> separator parsing to
+prevent possible string overrun with invalid len in F<gv.c>
 
 =item *
 
-%s() is deprecated on :utf8 handles. This will be a fatal error in Perl 5.30
+Problems with in-place array sorts: code like C<@a = sort { ... } @a>,
+where the source and destination of the sort are the same plain array, are
+optimised to do less copying around.  Two side-effects of this optimisation
+were that the contents of C<@a> as visible to to sort routine were
+partially sorted, and under some circumstances accessing C<@a> during the
+sort could crash the interpreter.  Both these issues have been fixed, and
+Sort functions see the original value of C<@a>.
 
 =item *
 
-$* is no longer supported. Its use will be fatal in Perl 5.30
+Non-ASCII string delimiters are now reported correctly in error messages
+for unterminated strings.  [perl #128701]
 
 =item *
 
-$* is no longer supported. Its use will be fatal in Perl 5.30
+C<pack("p", ...)> used to emit its warning ("Attempt to pack pointer to
+temporary value") erroneously in some cases, but has been fixed.
 
 =item *
 
-Opening dirhandle %s also as a file. This will be a fatal error in Perl 5.28
+C<@DB::args> is now exempt from "used once" warnings.  The warnings only
+occurred under B<-w>, because F<warnings.pm> itself uses C<@DB::args>
+multiple times.
 
 =item *
 
-Opening filehandle %s also as a directory. This will be a fatal
-error in Perl 5.28
+The use of built-in arrays or hash slices in a double-quoted string no
+longer issues a warning ("Possible unintended interpolation...") if the
+variable has not been mentioned before.  This affected code like
+C<qq|@DB::args|> and C<qq|@SIG{'CHLD', 'HUP'}|>.  (The special variables
+C<@-> and C<@+> were already exempt from the warning.)
 
 =item *
 
-Setting $/ to a reference to %s as a form of slurp is deprecated,
-treating as undef. This will be fatal in Perl 5.28
+C<gethostent> and similar functions now perform a null check internally, to
+avoid crashing with torsocks.  This was a regression from v5.22.  [perl
+#128740]
 
 =item *
 
-Unescaped left brace in regex is deprecated here (and will be fatal
-in Perl 5.30), passed through in regex; marked by S<< E<lt>-- HERE >> in m/%s/
+C<defined *{'!'}>, C<defined *{'['}>, and C<defined *{'-'}> no longer leak
+memory if the typeglob in question has never been accessed before.
 
 =item *
 
-Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28
+Mentioning the same constant twice in a row (which is a syntax error) no
+longer fails an assertion under debugging builds.  This was a regression
+from v5.20.  [perl #126482]
 
 =item *
 
-Use of bare E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated. Its use will be fatal in Perl 5.28
+Many issues relating to C<printf "%a"> of hexadecimal floating point
+were fixed.  In addition, the "subnormals" (formerly known as "denormals")
+floating point numbers are now supported both with the plain IEEE 754
+floating point numbers (64-bit or 128-bit) and the x86 80-bit
+"extended precision".  Note that subnormal hexadecimal floating
+point literals will give a warning about "exponent underflow".
+[perl #128843, #128889, #128890, #128893, #128909, #128919]
 
 =item *
 
-Use of code point 0x%s is deprecated; the permissible max is 0x%s.
-This will be fatal in Perl 5.28
+A regression in v5.24 with C<tr/\N{U+...}/foo/> when the code point was between
+128 and 255 has been fixed. [perl #128734].
 
 =item *
 
-Use of comma-less variable list is deprecated. Its use will be fatal
-in Perl 5.28
+Use of a string delimiter whose code point is above 2**31 now works
+correctly on platforms that allow this.  Previously, certain characters,
+due to truncation, would be confused with other delimiter characters
+with special meaning (such as C<"?"> in C<m?...?>), resulting
+in inconsistent behaviour.  Note that this is non-portable,
+and is based on Perl's extension to UTF-8, and is probably not
+displayable nor enterable by any editor. [perl #128738]
 
 =item *
 
-Use of inherited AUTOLOAD for non-method %s() is deprecated. This
-will be fatal in Perl 5.28
+C<@{x> followed by a newline where C<"x"> represents a control or non-ASCII
+character no longer produces a garbled syntax error message or a crash.
+[perl #128951]
 
-=item * 
+=item *
 
-Use of strings with code points over 0xFF as arguments to %s operator
-is deprecated. This will be a fatal error in Perl 5.28
+An assertion failure with C<%: = 0> has been fixed.
+L<[perl #128238]|https://rt.perl.org/Public/Bug/Display.html?id=128238>
 
-=back
+=item *
 
-=head1 Utility Changes
+In Perl 5.18, the parsing of C<"$foo::$bar"> was accidentally changed, such
+that it would be treated as C<$foo."::".$bar>.  The previous behavior, which
+was to parse it as C<$foo:: . $bar>, has been restored.
+L<[perl #128478]|https://rt.perl.org/Public/Bug/Display.html?id=128478>
 
-=head2 F<c2ph> and F<pstruct>
+=item *
 
-=over 4
+Since Perl 5.20, line numbers have been off by one when perl is invoked with
+the B<-x> switch.  This has been fixed.
+L<[perl #128508]|https://rt.perl.org/Public/Bug/Display.html?id=128508>
 
 =item *
 
-These old utilities have long since superceded by L<h2xs>, and are
-now gone from the distribution.
+Vivifying a subroutine stub in a deleted stash (I<e.g.>, C<delete $My::{"Foo::"};
+\&My::Foo::foo>) no longer crashes.  It had begun crashing in Perl 5.18.
+L<[perl #128532]|https://rt.perl.org/Public/Bug/Display.html?id=128532>
 
-=back
+=item *
 
-=head2 F<Porting/sync-with-cpan>
+Some obscure cases of subroutines and file handles being freed at the same time
+could result in crashes, but have been fixed.  The crash was introduced in Perl
+5.22.
+L<[perl #128597]|https://rt.perl.org/Public/Bug/Display.html?id=128597>
 
-=over 4
+=item *
+
+Code that looks for a variable name associated with an uninitialized value
+could cause an assertion failure in cases where magic is involved, such as
+C<$ISA[0][0]>.  This has now been fixed.
+L<[perl #128253]|https://rt.perl.org/Public/Bug/Display.html?id=128253>
 
 =item *
 
-Many improvements
+A crash caused by code generating the warning "Subroutine STASH::NAME
+redefined" in cases such as C<sub P::f{} undef *P::; *P::f =sub{};> has been
+fixed.  In these cases, where the STASH is missing, the warning will now appear
+as "Subroutine NAME redefined".
+L<[perl #128257]|https://rt.perl.org/Public/Bug/Display.html?id=128257>
 
-=back
+=item *
 
+Fixed an assertion triggered by some code that handles deprecated behavior in
+formats, I<e.g.>, in cases like this:
 
-=head1 Configuration and Compilation
+    format STDOUT =
+    @
+    0"$x"
 
-=over 4
+L<[perl #128255]|https://rt.perl.org/Public/Bug/Display.html?id=128255>
 
 =item *
 
-The C<dtrace> build process has further changes:
-
-=over
+A possible divide by zero in string transformation code on Windows has been
+avoided, fixing a crash when collating an empty string.
+L<[perl #128618]|https://rt.perl.org/Public/Bug/Display.html?id=128618>
 
 =item *
 
-If the C<-xnolibs> is available, use that so a F<dtrace> perl can be
-built within a FreeBSD jail.
+Some regular expression parsing glitches could lead to assertion failures with
+regular expressions such as C</(?E<lt>=/> and C</(?E<lt>!/>.  This has now been fixed.
+L<[perl #128170]|https://rt.perl.org/Public/Bug/Display.html?id=128170>
 
 =item *
 
-On systems that build a dtrace object file (FreeBSD, Solaris and
-SystemTap's dtrace emulation), copy the input objects to a separate
-directory and process them there, and use those objects in the link,
-since C<dtrace -G> also modifies these objects.
+C< until ($x = 1) { ... } > and C< ... until $x = 1 > now properly
+warn when syntax warnings are enabled.  [perl #127333]
 
 =item *
 
-Add libelf to the build on FreeBSD 10.x, since dtrace adds references
-to libelf symbols.
+socket() now leaves the error code returned by the system in C<$!> on
+failure.  [perl #128316]
 
 =item *
 
-Generate a dummy dtrace_main.o if C<dtrace -G> fails to build it.  A
-default build on Solaris generates probes from the unused inline
-functions, while they don't on FreeBSD, which causes C<dtrace -G> to
-fail.
+Assignment variants of any bitwise ops under the C<bitwise> feature would
+crash if the left-hand side was an array or hash.  [perl #128204]
 
-=back
+=item *
 
-[perl #130108]
+C<require> followed by a single colon (as in C<foo() ? require : ...> is
+now parsed correctly as C<require> with implicit C<$_>, rather than
+C<require "">.  [perl #128307]
 
 =item *
 
-You can now disable perl's use of the PERL_HASH_SEED and
-PERL_PERTURB_KEYS environment variables by configuring perl with
-C<-Accflags=NO_PERL_HASH_ENV>.
+Scalar C<keys %hash> can now be assigned to consistently in all scalar
+lvalue contexts.  Previously it worked for some contexts but not others.
 
 =item *
 
-You can now disable perl's use of the PERL_HASH_SEED_DEBUG environment
-variable by configuring perl with
-C<-Accflags=-DNO_PERL_HASH_SEED_DEBUG>.
-
-=back
+List assignment to C<vec> or C<substr> with an array or hash for its first
+argument used to result in crashes or "Can't coerce" error messages at run
+time, unlike scalar assignment, which would give an error at compile time.
+List assignment now gives a compile-time error, too.  [perl #128260]
 
-=head1 Internal Changes
+=item *
 
-=over 4
+Expressions containing an C<&&> or C<||> operator (or their synonyms C<and>
+and C<or>) were being compiled incorrectly in some cases.  If the left-hand
+side consisted of either a negated bareword constant or a negated C<do {}>
+block containing a constant expression, and the right-hand side consisted of
+a negated non-foldable expression, one of the negations was effectively
+ignored.  The same was true of C<if> and C<unless> statement modifiers,
+though with the left-hand and right-hand sides swapped.  This long-standing
+bug has now been fixed. [perl #127952]
 
 =item *
 
-New versions of macros like C<isALPHA_utf8> and C<toLOWER_utf8>  have
-been added, each with the
-suffix C<_safe>, like C<isSPACE_utf8_safe>.  These take an extra
-parameter, giving an upper limit of how far into the string it is safe
-to read.  Using the old versions could cause attempts to read beyond the
-end of the input buffer if the UTF-8 is not well-formed, and their use
-now raises a deprecation warning.  Details are at
-L<perlapi/Character classification>.
+C<reset> with an argument no longer crashes when encountering stash entries
+other than globs. [perl #128106]
 
 =item *
 
-Calling macros like C<isALPHA_utf8> on malformed UTF-8 have issued a
-deprecation warning since Perl v5.18.  They now die.
-Similarly, macros like C<toLOWER_utf8> on malformed UTF-8 now die.
+Assignment of hashes to, and deletion of, typeglobs named C<*::::::> no
+longer causes crashes. [perl #128086]
 
 =item *
 
-Calling the functions C<utf8n_to_uvchr> and its derivatives, while
-passing a string length of 0 is now asserted against in DEBUGGING
-builds, and otherwise returns the Unicode REPLACEMENT CHARACTER.   If
-you have nothing to decode, you shouldn't call the decode function.
+Handle C<SvIMMORTALs> in LHS of list assign. [perl #129991]
 
 =item *
 
-The functions C<utf8n_to_uvchr> and its derivatives now return the
-Unicode REPLACEMENT CHARACTER if called with UTF-8 that has the overlong
-malformation, and that malformation is allowed by the input parameters.
-This malformation is where the UTF-8 looks valid syntactically, but
-there is a shorter sequence that yields the same code point.  This has
-been forbidden since Unicode version 3.1.
+Assertion failure with user-defined Unicode-like properties. [perl #130010]
 
 =item *
 
-The functions C<utf8n_to_uvchr> and its derivatives now accept an input
-flag to allow the overflow malformation.  This malformation is when the
-UTF-8 may be syntactically valid, but the code point it represents is
-not capable of being represented in the word length on the platform.
-What "allowed" means in this case is that the function doesn't return an
-error, and advances the parse pointer to beyond the UTF-8 in question,
-but it returns the Unicode REPLACEMENT CHARACTER as the value of the
-code point (since the real value is not representable).
+Fix error message for unclosed C<\N{> in regcomp.
 
-=back
+An unclosed C<\N{> could give the wrong error message
+C<"\N{NAME} must be resolved by the lexer">.
 
-=head1 Selected Bug Fixes
+=item *
 
-=over 4
+List assignment in list context where the LHS contained aggregates and
+where there were not enough RHS elements, used to skip scalar lvalues.
+Previously, C<(($a,$b,@c,$d) = (1))> in list context returned C<($a)>; now
+it returns C<($a,$b,$d)>.  C<(($a,$b,$c) = (1))> is unchanged: it still
+returns C<($a,$b,$c)>.  This can be seen in the following:
 
-=item *
+    sub inc { $_++ for @_ }
+    inc(($a,$b,@c,$d) = (10))
 
-Under C<use utf8>, the entire Perl program is now checked that the UTF-8
-is wellformed.  This resolves [perl #126310].
+Formerly, the values of C<($a,$b,$d)> would be left as C<(11,undef,undef)>;
+now they are C<(11,1,1)>.
 
 =item *
 
-The range operator C<..> on strings now handles its arguments correctly when in
-the scope of the L<< C<unicode_strings>|feature/"The 'unicode_strings' feature" >>
-feature. The previous behaviour was sufficiently unexpected that we believe no
-correct program could have made use of it.
+Code like this: C</(?{ s!!! })/> can trigger infinite recursion on the C
+stack (not the normal perl stack) when the last successful pattern in
+scope is itself.  We avoid the segfault by simply forbidding the use of
+the empty pattern when it would resolve to the currently executing
+pattern.  [perl 129903]
 
 =item *
 
-The S<split> operator did not ensure enough space was allocated for
-its return value in scalar context.  It could then write a single
-pointer immediately beyond the end of the memory block allocated for
-the stack.  [perl #130262]
+Avoid reading beyond the end of the line buffer when there's a
+short UTF-8 character at the end.  [perl 128997]
 
 =item *
 
-Using a large code point with the C<W> pack template character with
-the current output position aligned at just the right point could
-cause a write a single zero byte immediately beyond the end of an
-allocated buffer.  [perl #129149]
+Fix firstchar bitmap under utf8 with prefix optimisation. [perl 129950]
 
 =item *
 
-Supplying the form picture argument as part of the form argument list
-where the picture specifies modifying the argument could cause an
-access to the new freed compiled form.  [perl #129125]
+Make F<Carp/t/arg_string.t>: be liberal in C<f>/C<p> formats. [perl 129954]
 
 =item *
 
-Fix a problem with sort's build-in compare, where it would not sort
-correctly with 64-bit integers, and non-long doubles. [perl #130335]
+Make C<do "a\0b"> fail silently instead of throwing an error. [perl 129928]
 
 =item *
 
-Fix issues with /(?{ ... E<lt>E<lt>EOF })/ that broke Method-Signatures. [perl #130398]
-
-=item * 
+Make C<chdir> allocate the stack it needs. [perl 129130]
 
-Fix a macro which caused syntax error on an EBCDIC build.
+=back
 
-=item *
+=head1 Known Problems
 
-Prevent tests from getting hung up on 'NonStop' option. [perl #130445]
+=over 4
 
 =item *
 
-Fixed an assertion failure with C<chop> and C<chomp>, which
-could be triggered by C<chop(@x =~ tr/1/1/)>. [perl #130198].
+Some modules have been broken by the L<context stack rework|/Internal Changes>.
+These modules were relying on non-guaranteed implementation details in
+the perl interpreter.
+Their maintainers have been informed, and should contact perl5-porters for
+advice if needed.  Below is a subset of these modules:
 
-=item *
+=over 4
 
-Fixed a comment skipping error under C</x>; it could stop skipping a
-byte early, which could be in the middle of a UTF-8 character.
-[perl #130495].
+=item * L<Algorithm::Permute>
 
-=item *
+=item * L<Coro>
 
-F<perldb> now ignores F</dev/tty> on non-Unix systems. [perl #113960];
+L<Coro> and Perl 5.22 were already incompatible due to a change in the perl
+interpreter,
+and the reworking on the perl context stack creates a further incompatibility.
+perl5-porters has L<discussed the issue on the mailing
+list|http://www.nntp.perl.org/group/perl.perl5.porters/2016/05/msg236174.html>.
 
-=item *
+=item * L<Data::Alias>
 
-Fix assertion failure for C<{}-E<gt>$x> when C<$x> isn't defined. [perl #130496].
+=item * L<RPerl>
 
-=item *
+=item * L<Scope::Upper>
 
-DragonFly BSD now has support for setproctitle(). [perl #130068].
+=item * L<TryCatch>
+
+=back
 
 =item *
 
-Fix an assertion error which could be triggered when lookahead string
-in patterns exceeded a minimum length. [perl #130522].
+The module L<lexical::underscore> no longer works on Perl 5.24, because perl
+no longer has a lexical C<$_>!
 
 =item *
 
-Only warn once per literal about a misplaced C<_>. [perl #70878].
+C<mod_perl> has been patched for compatibility for v5.22 and later but no
+release has been made.  The relevant patch (and other changes) can be found in
+their source code repository, L<mirrored at
+GitHub|https://github.com/apache/mod_perl/commit/82827132efd3c2e25cc413c85af61bb63375da6e>.
 
-=item *
+=back
 
-Ensure range-start is set after error in C<tr///>. [perl #129342].
+=head1 Errata From Previous Releases
+
+=over 4
 
 =item *
 
-Don't read past start of string for unmatched backref; otherwise,
-we may have heap buffer overflow. [perl #129377].
+Parsing bad POSIX charclasses no longer leaks memory.
+L<[perl #128313]|https://rt.perl.org/Public/Bug/Display.html?id=128313>
 
 =item *
 
-Properly recognize mathematical digit ranges starting at U+1D7E. 
-C<use re 'strict'> is supposed to warn if you use a range whose start
-and end digit aren't from the same group of 10. It didn't do that
-for five groups of mathematical digits starting at U+1D7E.
+Fixed issues with recursive regexes.  The behavior was fixed in Perl 5.24.
+L<[perl #126182]|https://rt.perl.org/Public/Bug/Display.html?id=126182>
 
 =back
 
+=head1 Obituary
 
-=head1 Acknowledgements
+Jon Portnoy (AVENJ), a prolific Perl author and admired Gentoo community
+member, has passed away on August 10, 2016.  He will be remembered and
+missed by all those who he came in contact with, and enriched with his
+intellect, wit, and spirit.
+
+It is with great sadness that we also note Kip Hampton's passing.  Probably
+best known as the author of the Perl & XML column on XML.com, he was a
+core contributor to AxKit, an XML server platform that became an Apache
+Foundation project.  He was a frequent speaker in the early days at
+OSCON, and most recently at YAPC::NA in Madison.  He was frequently on
+irc.perl.org as `ubu`, generally in the #axkit-dahut community, the
+group responsible for YAPC::NA Asheville in 2011.
 
-XXX Generate this with:
+Kip and his constant contributions to the community will be greatly
+missed.
+
+=head1 Acknowledgements
 
-  perl Porting/acknowledgements.pl v5.25.5..HEAD
+Perl 5.26.0 represents approximately 12 months of development since Perl 5.24.0
+and contains approximately 370,000 lines of changes across 2,600 files from 86
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 230,000 lines of changes to 1,800 .pm, .t, .c and .h files.
+
+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.26.0:
+
+Aaron Crane, Abigail, Ævar Arnfjörð Bjarmason, Alex Vandiver, Andreas
+König, Andreas Voegele, Andrew Fresh, Andy Lester, Aristotle Pagaltzis, Chad
+Granum, Chase Whitener, Chris 'BinGOs' Williams, Chris Lamb, Christian Hansen,
+Christian Millour, Colin Newell, Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan
+Collins, Daniel Dragan, Dave Cross, Dave Rolsky, David Golden, David H.
+Gutteridge, David Mitchell, Dominic Hargreaves, Doug Bell, E. Choroba, Ed Avis,
+Father Chrysostomos, François Perrad, Hauke D, H.Merijn Brand, Hugo van der
+Sanden, Ivan Pozdeev, James E Keenan, James Raspass, Jarkko Hietaniemi, Jerry
+D. Hedden, Jim Cromie, J. Nick Koston, John Lightsey, Karen Etheridge, Karl
+Williamson, Leon Timmermans, Lukas Mai, Matthew Horsfall, Maxwell Carey, Misty
+De Meo, Neil Bowers, Nicholas Clark, Nicolas R., Niko Tyni, Pali, Paul
+Marquess, Peter Avalos, Petr Písař, Pino Toscano, Rafael Garcia-Suarez, Reini
+Urban, Renee Baecker, Ricardo Signes, Richard Levitte, Rick Delaney, Salvador
+Fandiño, Samuel Thibault, Sawyer X, Sébastien Aperghis-Tramoni, Sergey
+Aleynikov, Shlomi Fish, Smylers, Stefan Seifert, Steffen Müller, Stevan
+Little, Steve Hay, Steven Humphrey, Sullivan Beck, Theo Buehler, Thomas Sibley,
+Todd Rinaldo, Tomasz Konojacki, Tony Cook, Unicode Consortium, Yaroslav Kuzmin,
+Yves Orton, Zefram.
+
+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 perl bug database
-at L<https://rt.perl.org/> .  There may also be information at
+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
+L<https://rt.perl.org/> .  There may also be information at
 L<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.
+will be sent off to C<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 see