-=head1 DESCRIPTION
-
-This document describes the differences between the 5.24.0 release and the
-5.26.0 release.
-
-=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 '~' to here-docs that tells the parser
-that it should look for /^\s*$DELIM\n/ as the closing delimiter.
-
-These syntaxes are all supported:
-
- <<~EOF;
- <<~\EOF;
- <<~'EOF';
- <<~"EOF";
- <<~`EOF`;
- <<~ 'EOF';
- <<~ "EOF";
- <<~ `EOF`;
-
-The '~' 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
-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 @{^CAPTURE}, %{^CAPTURE}, and %{^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, 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 the 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 the 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 C<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 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 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 Removed Deprecations
-
-The C<\cI<X>> construct is intended to be a way to specify non-printable
-characters. Previously it was deprecated to use it for a printable one,
-which is better written as simply itself, perhaps preceded by a
-backslash for non-word characters. Now this raises a warning, but not a
-deprecation. 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 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 sv_catpvn() in 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
-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<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>
-regarding that positions are in bytes vs. 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 5.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
-
-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 @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.
-
-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 m/%s/>
-
-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 my() in false conditional. This will be a fatal error
-in Perl 5.30
-
-=item *
-
-dump() better written as CORE::dump(). 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 $/ 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 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 sysread()/syswrite/() etc :utf8 handle warnings default. These
-warnings were under 'deprecated' previously.
-
-=item *
-
-'do' errors now refer to 'do' (not '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 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:
-
-=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
-
-[perl #130108]
-
-=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>.
-
-=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>.
-
-=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 5.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
-*will* have a /usr/bin/perl or similar provided by the OS.
-
-=item *
-
-Reduce verbosity of "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 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 gai_strerror() routine is available and can be used to
-translate error codes returned by getaddrinfo() into human
-readable strings.
-
-=item *
-
-F<Configure> now aborts if both "-Duselongdouble" and "-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 "-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 "-DPERL_GLOBAL_STRUCT" or "-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
-
-=over 4
-
-=item *
-
-F<XS-APItest/t/utf8.t>: Several small fixes and enhancements.
-
-=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/anyof.t>, has been added to test that the ANYOF nodes
-generated by bracketed character classes are as expected.
-
-=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 -Dprefix=/usr as special, instead require an extra option
--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 clock_gettime() or clock_getres() APIs;
-emulate them as necessary.
-
-=item macOS
-
-Deprecated 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 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
-
-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 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:
-
-C<L<perlapi/UTF8_GOT_ABOVE_31_BIT>>
-C<L<perlapi/UTF8_GOT_CONTINUATION>>
-C<L<perlapi/UTF8_GOT_EMPTY>>
-C<L<perlapi/UTF8_GOT_LONG>>
-C<L<perlapi/UTF8_GOT_NONCHAR>>
-C<L<perlapi/UTF8_GOT_NON_CONTINUATION>>
-C<L<perlapi/UTF8_GOT_OVERFLOW>>
-C<L<perlapi/UTF8_GOT_SHORT>>
-C<L<perlapi/UTF8_GOT_SUPER>>
-C<L<perlapi/UTF8_GOT_SURROGATE>>
-C<L<perlapi/UTF8_IS_INVARIANT>>
-C<L<perlapi/UTF8_IS_NONCHAR>>
-C<L<perlapi/UTF8_IS_SUPER>>
-C<L<perlapi/UTF8_IS_SURROGATE>>
-C<L<perlapi/UVCHR_IS_INVARIANT>>
-C<L<perlapi/isUTF8_CHAR_flags>>
-C<L<perlapi/isSTRICT_UTF8_CHAR>>
-C<L<perlapi/isC9_STRICT_UTF8_CHAR>>
-
-=item *
-
-Functions that are all extensions of the C<is_utf8_string_*()> functions,
-that apply various restrictions to the UTF-8 recognized as valid:
-
-C<L<perlapi/is_strict_utf8_string>>,
-C<L<perlapi/is_strict_utf8_string_loc>>,
-C<L<perlapi/is_strict_utf8_string_loclen>>,