dwww Home | Manual pages | Find package

PERL5200DELTA(1)        Perl Programmers Reference Guide       PERL5200DELTA(1)

NAME
       perl5200delta - what is new for perl v5.20.0

DESCRIPTION
       This document describes differences between the 5.18.0 release and the
       5.20.0 release.

       If you are upgrading from an earlier release such as 5.16.0, first read
       perl5180delta, which describes differences between 5.16.0 and 5.18.0.

Core Enhancements
   Experimental Subroutine signatures
       Declarative syntax to unwrap argument list into lexical variables.  "sub
       foo ($a,$b) {...}" checks the number of arguments and puts the arguments
       into lexical variables.  Signatures are not equivalent to the existing
       idiom of "sub foo { my($a,$b) = @_; ... }".  Signatures are only
       available by enabling a non-default feature, and generate warnings about
       being experimental.  The syntactic clash with prototypes is managed by
       disabling the short prototype syntax when signatures are enabled.

       See "Signatures" in perlsub for details.

   "sub"s now take a "prototype" attribute
       When declaring or defining a "sub", the prototype can now be specified
       inside of a "prototype" attribute instead of in parens following the
       name.

       For example, "sub foo($$){}" could be rewritten as "sub foo :
       prototype($$){}".

   More consistent prototype parsing
       Multiple semicolons in subroutine prototypes have long been tolerated
       and treated as a single semicolon.  There was one case where this did
       not happen.  A subroutine whose prototype begins with "*" or ";*" can
       affect whether a bareword is considered a method name or sub call.  This
       now applies also to ";;;*".

       Whitespace has long been allowed inside subroutine prototypes, so "sub(
       $ $ )" is equivalent to sub($$), but until now it was stripped when the
       subroutine was parsed.  Hence, whitespace was not allowed in prototypes
       set by "Scalar::Util::set_prototype".  Now it is permitted, and the
       parser no longer strips whitespace.  This means "prototype &mysub"
       returns the original prototype, whitespace and all.

   "rand" now uses a consistent random number generator
       Previously perl would use a platform specific random number generator,
       varying between the libc rand(), random() or drand48().

       This meant that the quality of perl's random numbers would vary from
       platform to platform, from the 15 bits of rand() on Windows to 48-bits
       on POSIX platforms such as Linux with drand48().

       Perl now uses its own internal drand48() implementation on all
       platforms.  This does not make perl's "rand" cryptographically secure.
       [perl #115928]

   New slice syntax
       The new %hash{...} and %array[...] syntax returns a list of key/value
       (or index/value) pairs.  See "Key/Value Hash Slices" in perldata.

   Experimental Postfix Dereferencing
       When the "postderef" feature is in effect, the following syntactical
       equivalencies are set up:

         $sref->$*;  # same as ${ $sref }  # interpolates
         $aref->@*;  # same as @{ $aref }  # interpolates
         $href->%*;  # same as %{ $href }
         $cref->&*;  # same as &{ $cref }
         $gref->**;  # same as *{ $gref }

         $aref->$#*; # same as $#{ $aref }

         $gref->*{ $slot }; # same as *{ $gref }{ $slot }

         $aref->@[ ... ];  # same as @$aref[ ... ]  # interpolates
         $href->@{ ... };  # same as @$href{ ... }  # interpolates
         $aref->%[ ... ];  # same as %$aref[ ... ]
         $href->%{ ... };  # same as %$href{ ... }

       Those marked as interpolating only interpolate if the associated
       "postderef_qq" feature is also enabled.  This feature is experimental
       and will trigger "experimental::postderef"-category warnings when used,
       unless they are suppressed.

       For more information, consult the Postfix Dereference Syntax section of
       perlref.

   Unicode 6.3 now supported
       Perl now supports and is shipped with Unicode 6.3 (though Perl may be
       recompiled with any previous Unicode release as well).  A detailed list
       of Unicode 6.3 changes is at
       <http://www.unicode.org/versions/Unicode6.3.0/>.

   New "\p{Unicode}" regular expression pattern property
       This is a synonym for "\p{Any}" and matches the set of Unicode-defined
       code points 0 - 0x10FFFF.

   Better 64-bit support
       On 64-bit platforms, the internal array functions now use 64-bit
       offsets, allowing Perl arrays to hold more than 2**31 elements, if you
       have the memory available.

       The regular expression engine now supports strings longer than 2**31
       characters.  [perl #112790, #116907]

       The functions PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt and
       PerlIO_set_ptrcnt now have SSize_t, rather than int, return values and
       parameters.

   "use locale" now works on UTF-8 locales
       Until this release, only single-byte locales, such as the ISO 8859
       series were supported.  Now, the increasingly common multi-byte UTF-8
       locales are also supported.  A UTF-8 locale is one in which the
       character set is Unicode and the encoding is UTF-8.  The POSIX
       "LC_CTYPE" category operations (case changing (like lc(), "\U"), and
       character classification ("\w", "\D", "qr/[[:punct:]]/")) under such a
       locale work just as if not under locale, but instead as if under
       "use feature 'unicode_strings'", except taint rules are followed.
       Sorting remains by code point order in this release.  [perl #56820].

   "use locale" now compiles on systems without locale ability
       Previously doing this caused the program to not compile.  Within its
       scope the program behaves as if in the "C" locale.  Thus programs
       written for platforms that support locales can run on locale-less
       platforms without change.  Attempts to change the locale away from the
       "C" locale will, of course, fail.

   More locale initialization fallback options
       If there was an error with locales during Perl start-up, it immediately
       gave up and tried to use the "C" locale.  Now it first tries using other
       locales given by the environment variables, as detailed in "ENVIRONMENT"
       in perllocale.  For example, if "LC_ALL" and "LANG" are both set, and
       using the "LC_ALL" locale fails, Perl will now try the "LANG" locale,
       and only if that fails, will it fall back to "C".  On Windows machines,
       Perl will try, ahead of using "C", the system default locale if all the
       locales given by environment variables fail.

   "-DL" runtime option now added for tracing locale setting
       This is designed for Perl core developers to aid in field debugging bugs
       regarding locales.

   -F now implies -a and -a implies -n
       Previously -F without -a was a no-op, and -a without -n or -p was a no-
       op, with this change, if you supply -F then both -a and -n are implied
       and if you supply -a then -n is implied.

       You can still use -p for its extra behaviour. [perl #116190]

   $a and $b warnings exemption
       The special variables $a and $b, used in "sort", are now exempt from
       "used once" warnings, even where "sort" is not used.  This makes it
       easier for CPAN modules to provide functions using $a and $b for similar
       purposes.  [perl #120462]

Security
   Avoid possible read of free()d memory during parsing
       It was possible that free()d memory could be read during parsing in the
       unusual circumstance of the Perl program ending with a heredoc and the
       last line of the file on disk having no terminating newline character.
       This has now been fixed.

Incompatible Changes
   "do" can no longer be used to call subroutines
       The "do SUBROUTINE(LIST)" form has resulted in a deprecation warning
       since Perl v5.0.0, and is now a syntax error.

   Quote-like escape changes
       The character after "\c" in a double-quoted string ("..." or qq(...))
       or regular expression must now be a printable character and may not be
       "{".

       A literal "{" after "\B" or "\b" is now fatal.

       These were deprecated in perl v5.14.0.

   Tainting happens under more circumstances; now conforms to documentation
       This affects regular expression matching and changing the case of a
       string ("lc", "\U", etc.) within the scope of "use locale".  The result
       is now tainted based on the operation, no matter what the contents of
       the string were, as the documentation (perlsec, "SECURITY" in
       perllocale) indicates it should.  Previously, for the case change
       operation, if the string contained no characters whose case change could
       be affected by the locale, the result would not be tainted.  For
       example, the result of uc() on an empty string or one containing only
       above-Latin1 code points is now tainted, and wasn't before.  This leads
       to more consistent tainting results.  Regular expression patterns taint
       their non-binary results (like $&, $2) if and only if the pattern
       contains elements whose matching depends on the current (potentially
       tainted) locale.  Like the case changing functions, the actual contents
       of the string being matched now do not matter, whereas formerly it did.
       For example, if the pattern contains a "\w", the results will be tainted
       even if the match did not have to use that portion of the pattern to
       succeed or fail, because what a "\w" matches depends on locale.
       However, for example, a "." in a pattern will not enable tainting,
       because the dot matches any single character, and what the current
       locale is doesn't change in any way what matches and what doesn't.

   "\p{}", "\P{}" matching has changed for non-Unicode code points.
       "\p{}" and "\P{}" are defined by Unicode only on Unicode-defined code
       points ("U+0000" through "U+10FFFF").  Their behavior on matching these
       legal Unicode code points is unchanged, but there are changes for code
       points 0x110000 and above.  Previously, Perl treated the result of
       matching "\p{}" and "\P{}" against these as "undef", which translates
       into "false".  For "\P{}", this was then complemented into "true".  A
       warning was supposed to be raised when this happened.  However, various
       optimizations could prevent the warning, and the results were often
       counter-intuitive, with both a match and its seeming complement being
       false.  Now all non-Unicode code points are treated as typical
       unassigned Unicode code points.  This generally is more Do-What-I-Mean.
       A warning is raised only if the results are arguably different from a
       strict Unicode approach, and from what Perl used to do.  Code that needs
       to be strictly Unicode compliant can make this warning fatal, and then
       Perl always raises the warning.

       Details are in "Beyond Unicode code points" in perlunicode.

   "\p{All}" has been expanded to match all possible code points
       The Perl-defined regular expression pattern element "\p{All}", unused on
       CPAN, used to match just the Unicode code points; now it matches all
       possible code points; that is, it is equivalent to "qr/./s".  Thus
       "\p{All}" is no longer synonymous with "\p{Any}", which continues to
       match just the Unicode code points, as Unicode says it should.

   Data::Dumper's output may change
       Depending on the data structures dumped and the settings set for
       Data::Dumper, the dumped output may have changed from previous versions.

       If you have tests that depend on the exact output of Data::Dumper, they
       may fail.

       To avoid this problem in your code, test against the data structure from
       evaluating the dumped structure, instead of the dump itself.

   Locale decimal point character no longer leaks outside of "use locale" scope

       This is actually a bug fix, but some code has come to rely on the bug
       being present, so this change is listed here.  The current locale that
       the program is running under is not supposed to be visible to Perl code
       except within the scope of a "use locale".  However, until now under
       certain circumstances, the character used for a decimal point (often a
       comma) leaked outside the scope.  If your code is affected by this
       change, simply add a "use locale".

   Assignments of Windows sockets error codes to $! now prefer errno.h values
       over WSAGetLastError() values
       In previous versions of Perl, Windows sockets error codes as returned by
       WSAGetLastError() were assigned to $!, and some constants such as
       ECONNABORTED, not in errno.h in VC++ (or the various Windows ports of
       gcc) were defined to corresponding WSAE* values to allow $! to be tested
       against the E* constants exported by Errno and POSIX.

       This worked well until VC++ 2010 and later, which introduced new E*
       constants with values > 100 into errno.h, including some being
       (re)defined by perl to WSAE* values.  That caused problems when linking
       XS code against other libraries which used the original definitions of
       errno.h constants.

       To avoid this incompatibility, perl now maps WSAE* error codes to E*
       values where possible, and assigns those values to $!.  The E* constants
       exported by Errno and POSIX are updated to match so that testing $!
       against them, wherever previously possible, will continue to work as
       expected, and all E* constants found in errno.h are now exported from
       those modules with their original errno.h values.

       In order to avoid breakage in existing Perl code which assigns WSAE*
       values to $!, perl now intercepts the assignment and performs the same
       mapping to E* values as it uses internally when assigning to $! itself.

       However, one backwards-incompatibility remains: existing Perl code which
       compares $! against the numeric values of the WSAE* error codes that
       were previously assigned to $! will now be broken in those cases where a
       corresponding E* value has been assigned instead.  This is only an issue
       for those E* values < 100, which were always exported from Errno and
       POSIX with their original errno.h values, and therefore could not be
       used for WSAE* error code tests (e.g. WSAEINVAL is 10022, but the
       corresponding EINVAL is 22).  (E* values > 100, if present, were
       redefined to WSAE* values anyway, so compatibility can be achieved by
       using the E* constants, which will work both before and after this
       change, albeit using different numeric values under the hood.)

   Functions "PerlIO_vsprintf" and "PerlIO_sprintf" have been removed
       These two functions, undocumented, unused in CPAN, and problematic, have
       been removed.

Deprecations
   The "/\C/" character class
       The "/\C/" regular expression character class is deprecated. From perl
       5.22 onwards it will generate a warning, and from perl 5.24 onwards it
       will be a regular expression compiler error. If you need to examine the
       individual bytes that make up a UTF8-encoded character, then use
       utf8::encode() on the string (or a copy) first.

   Literal control characters in variable names
       This deprecation affects things like $\cT, where \cT is a literal
       control (such as a "NAK" or "NEGATIVE ACKNOWLEDGE" character) in the
       source code.  Surprisingly, it appears that originally this was intended
       as the canonical way of accessing variables like $^T, with the caret
       form only being added as an alternative.

       The literal control form is being deprecated for two main reasons.  It
       has what are likely unfixable bugs, such as $\cI not working as an alias
       for $^I, and their usage not being portable to non-ASCII platforms:
       While $^T will work everywhere, \cT is whitespace in EBCDIC.  [perl
       #119123]

   References to non-integers and non-positive integers in $/
       Setting $/ to a reference to zero or a reference to a negative integer
       is now deprecated, and will behave exactly as though it was set to
       "undef".  If you want slurp behavior set $/ to "undef" explicitly.

       Setting $/ to a reference to a non integer is now forbidden and will
       throw an error. Perl has never documented what would happen in this
       context and while it used to behave the same as setting $/ to the
       address of the references in future it may behave differently, so we
       have forbidden this usage.

   Character matching routines in POSIX
       Use of any of these functions in the "POSIX" module is now deprecated:
       "isalnum", "isalpha", "iscntrl", "isdigit", "isgraph", "islower",
       "isprint", "ispunct", "isspace", "isupper", and "isxdigit".  The
       functions are buggy and don't work on UTF-8 encoded strings.  See their
       entries in POSIX for more information.

       A warning is raised on the first call to any of them from each place in
       the code that they are called.  (Hence a repeated statement in a loop
       will raise just the one warning.)

   Interpreter-based threads are now discouraged
       The "interpreter-based threads" provided by Perl are not the fast,
       lightweight system for multitasking that one might expect or hope for.
       Threads are implemented in a way that make them easy to misuse.  Few
       people know how to use them correctly or will be able to provide help.

       The use of interpreter-based threads in perl is officially discouraged.

   Module removals
       The following modules will be removed from the core distribution in a
       future release, and will at that time need to be installed from CPAN.
       Distributions on CPAN which require these modules will need to list them
       as prerequisites.

       The core versions of these modules will now issue "deprecated"-category
       warnings to alert you to this fact.  To silence these deprecation
       warnings, install the modules in question from CPAN.

       Note that the planned removal of these modules from core does not
       reflect a judgement about the quality of the code and should not be
       taken as a suggestion that their use be halted.  Their disinclusion from
       core primarily hinges on their necessity to bootstrapping a fully
       functional, CPAN-capable Perl installation, not on concerns over their
       design.

       CGI and its associated CGI:: packages
       inc::latest
       Package::Constants
       Module::Build and its associated Module::Build:: packages

   Utility removals
       The  following utilities will be removed from the core distribution in a
       future release, and will at that time need to be installed from CPAN.

       find2perl
       s2p
       a2p

Performance Enhancements
       •   Perl has a new copy-on-write mechanism that avoids the need to  copy
           the  internal  string  buffer  when  assigning  from  one  scalar to
           another. This  makes  copying  large  strings  appear  much  faster.
           Modifying  one of the two (or more) strings after an assignment will
           force a copy internally. This makes it unnecessary to  pass  strings
           by reference for efficiency.

           This  feature was already available in 5.18.0, but wasn't enabled by
           default. It is the default now, and so you no longer need build perl
           with the Configure argument:

               -Accflags=-DPERL_NEW_COPY_ON_WRITE

           It can be disabled (for now) in a perl build with:

               -Accflags=-DPERL_NO_COW

           On some operating systems Perl can be compiled in such  a  way  that
           any  attempt  to  modify  string buffers shared by multiple SVs will
           crash.  This way XS authors can test that their modules handle copy-
           on-write scalars correctly.  See "Copy on  Write"  in  perlguts  for
           detail.

       •   Perl  has an optimizer for regular expression patterns.  It analyzes
           the pattern to find things such as the minimum length a  string  has
           to  be  to  match,  etc.  It now better handles code points that are
           above the Latin1 range.

       •   Executing a regex that contains the "^" anchor (or its variant under
           the "/m" flag) has been made much faster in several situations.

       •   Precomputed hash values are now used in more  places  during  method
           lookup.

       •   Constant  hash  key  lookups  ($hash{key} as opposed to $hash{$key})
           have long had the internal hash value computed at compile  time,  to
           speed  up  lookup.   This  optimisation has only now been applied to
           hash slices as well.

       •   Combined "and" and  "or"  operators  in  void  context,  like  those
           generated  for  "unless  ($a  &&  $b)"  and "if ($a || b)" now short
           circuit directly to the end of the statement. [perl #120128]

       •   In certain situations, when "return" is  the  last  statement  in  a
           subroutine's  main  scope, it will be optimized out. This means code
           like:

             sub baz { return $cat; }

           will now behave like:

             sub baz { $cat; }

           which is notably faster.

           [perl #120765]

       •   Code like:

             my $x; # or @x, %x
             my $y;

           is now optimized to:

             my ($x, $y);

           In combination with the padrange optimization introduced in v5.18.0,
           this means longer uninitialized  my  variable  statements  are  also
           optimized, so:

             my $x; my @y; my %z;

           becomes:

             my ($x, @y, %z);

           [perl #121077]

       •   The  creation  of  certain  sorts of lists, including array and hash
           slices, is now faster.

       •   The optimisation for arrays indexed with a small constant integer is
           now applied for integers in the range -128..127, rather than 0..255.
           This should speed up Perl code using expressions like $x[-1], at the
           expense of (presumably  much  rarer)  code  using  expressions  like
           $x[200].

       •   The  first  iteration  over a large hash (using "keys" or "each") is
           now faster. This is achieved by preallocating  the  hash's  internal
           iterator  state,  rather  than  lazily  creating it when the hash is
           first iterated. (For small hashes, the  iterator  is  still  created
           only when first needed. The assumption is that small hashes are more
           likely  to  be  used  as objects, and therefore never allocated. For
           large hashes, that's less  likely  to  be  true,  and  the  cost  of
           allocating  the  iterator is swamped by the cost of allocating space
           for the hash itself.)

       •   When doing a global regex match on  a  string  that  came  from  the
           "readline"   or   "<>"  operator,  the  data  is  no  longer  copied
           unnecessarily.  [perl #121259]

       •   Dereferencing (as in "$obj->[0]" or "$obj->{k}") is now faster  when
           $obj  is  an  instance  of  a class that has overloaded methods, but
           doesn't overload any of the dereferencing methods "@{}", "%{}",  and
           so on.

       •   Perl's  optimiser  no  longer  skips  optimising  code  that follows
           certain "eval {}" expressions  (including  those  with  an  apparent
           infinite loop).

       •   The  implementation  now  does  a better job of avoiding meaningless
           work at runtime. Internal effect-free "null" operations (created  as
           a  side-effect of parsing Perl programs) are normally deleted during
           compilation. That deletion is now applied in  some  situations  that
           weren't previously handled.

       •   Perl  now  does  less  disk I/O when dealing with Unicode properties
           that cover up to three ranges of consecutive code points.

Modules and Pragmata
   New Modules and Pragmata
       •   experimental 0.007 has been added to the Perl core.

       •   IO::Socket::IP 0.29 has been added to the Perl core.

   Updated Modules and Pragmata
       •   Archive::Tar has been upgraded from version 1.90 to 1.96.

       •   arybase has been upgraded from version 0.06 to 0.07.

       •   Attribute::Handlers has been upgraded from version 0.94 to 0.96.

       •   attributes has been upgraded from version 0.21 to 0.22.

       •   autodie has been upgraded from version 2.13 to 2.23.

       •   AutoLoader has been upgraded from version 5.73 to 5.74.

       •   autouse has been upgraded from version 1.07 to 1.08.

       •   B has been upgraded from version 1.42 to 1.48.

       •   B::Concise has been upgraded from version 0.95 to 0.992.

       •   B::Debug has been upgraded from version 1.18 to 1.19.

       •   B::Deparse has been upgraded from version 1.20 to 1.26.

       •   base has been upgraded from version 2.18 to 2.22.

       •   Benchmark has been upgraded from version 1.15 to 1.18.

       •   bignum has been upgraded from version 0.33 to 0.37.

       •   Carp has been upgraded from version 1.29 to 1.3301.

       •   CGI has been upgraded from version  3.63  to  3.65.   NOTE:  CGI  is
           deprecated and may be removed from a future version of Perl.

       •   charnames has been upgraded from version 1.36 to 1.40.

       •   Class::Struct has been upgraded from version 0.64 to 0.65.

       •   Compress::Raw::Bzip2 has been upgraded from version 2.060 to 2.064.

       •   Compress::Raw::Zlib has been upgraded from version 2.060 to 2.065.

       •   Config::Perl::V has been upgraded from version 0.17 to 0.20.

       •   constant has been upgraded from version 1.27 to 1.31.

       •   CPAN has been upgraded from version 2.00 to 2.05.

       •   CPAN::Meta has been upgraded from version 2.120921 to 2.140640.

       •   CPAN::Meta::Requirements  has  been  upgraded  from version 2.122 to
           2.125.

       •   CPAN::Meta::YAML has been upgraded from version 0.008 to 0.012.

       •   Data::Dumper has been upgraded from version 2.145 to 2.151.

       •   DB has been upgraded from version 1.04 to 1.07.

       •   DB_File has been upgraded from version 1.827 to 1.831.

       •   DBM_Filter has been upgraded from version 0.05 to 0.06.

       •   deprecate has been upgraded from version 0.02 to 0.03.

       •   Devel::Peek has been upgraded from version 1.11 to 1.16.

       •   Devel::PPPort has been upgraded from version 3.20 to 3.21.

       •   diagnostics has been upgraded from version 1.31 to 1.34.

       •   Digest::MD5 has been upgraded from version 2.52 to 2.53.

       •   Digest::SHA has been upgraded from version 5.84 to 5.88.

       •   DynaLoader has been upgraded from version 1.18 to 1.25.

       •   Encode has been upgraded from version 2.49 to 2.60.

       •   encoding has been upgraded from version 2.6_01 to 2.12.

       •   English has been upgraded from version 1.06 to 1.09.

           $OLD_PERL_VERSION was added as an alias of $].

       •   Errno has been upgraded from version 1.18 to 1.20_03.

       •   Exporter has been upgraded from version 5.68 to 5.70.

       •   ExtUtils::CBuilder  has  been  upgraded  from  version  0.280210  to
           0.280216.

       •   ExtUtils::Command has been upgraded from version 1.17 to 1.18.

       •   ExtUtils::Embed has been upgraded from version 1.30 to 1.32.

       •   ExtUtils::Install has been upgraded from version 1.59 to 1.67.

       •   ExtUtils::MakeMaker has been upgraded from version 6.66 to 6.98.

       •   ExtUtils::Miniperl has been upgraded from version  to 1.01.

       •   ExtUtils::ParseXS has been upgraded from version 3.18 to 3.24.

       •   ExtUtils::Typemaps has been upgraded from version 3.19 to 3.24.

       •   ExtUtils::XSSymSet has been upgraded from version 1.2 to 1.3.

       •   feature has been upgraded from version 1.32 to 1.36.

       •   fields has been upgraded from version 2.16 to 2.17.

       •   File::Basename has been upgraded from version 2.84 to 2.85.

       •   File::Copy has been upgraded from version 2.26 to 2.29.

       •   File::DosGlob has been upgraded from version 1.10 to 1.12.

       •   File::Fetch has been upgraded from version 0.38 to 0.48.

       •   File::Find has been upgraded from version 1.23 to 1.27.

       •   File::Glob has been upgraded from version 1.20 to 1.23.

       •   File::Spec has been upgraded from version 3.40 to 3.47.

       •   File::Temp has been upgraded from version 0.23 to 0.2304.

       •   FileCache has been upgraded from version 1.08 to 1.09.

       •   Filter::Simple has been upgraded from version 0.89 to 0.91.

       •   Filter::Util::Call has been upgraded from version 1.45 to 1.49.

       •   Getopt::Long has been upgraded from version 2.39 to 2.42.

       •   Getopt::Std has been upgraded from version 1.07 to 1.10.

       •   Hash::Util::FieldHash has been upgraded from version 1.10 to 1.15.

       •   HTTP::Tiny has been upgraded from version 0.025 to 0.043.

       •   I18N::Langinfo has been upgraded from version 0.10 to 0.11.

       •   I18N::LangTags has been upgraded from version 0.39 to 0.40.

       •   if has been upgraded from version 0.0602 to 0.0603.

       •   inc::latest  has been upgraded from version 0.4003 to 0.4205.  NOTE:
           inc::latest is deprecated and may be removed from a  future  version
           of Perl.

       •   integer has been upgraded from version 1.00 to 1.01.

       •   IO has been upgraded from version 1.28 to 1.31.

       •   IO::Compress::Gzip and friends have been upgraded from version 2.060
           to 2.064.

       •   IPC::Cmd has been upgraded from version 0.80 to 0.92.

       •   IPC::Open3 has been upgraded from version 1.13 to 1.16.

       •   IPC::SysV has been upgraded from version 2.03 to 2.04.

       •   JSON::PP has been upgraded from version 2.27202 to 2.27203.

       •   List::Util has been upgraded from version 1.27 to 1.38.

       •   locale has been upgraded from version 1.02 to 1.03.

       •   Locale::Codes has been upgraded from version 3.25 to 3.30.

       •   Locale::Maketext has been upgraded from version 1.23 to 1.25.

       •   Math::BigInt has been upgraded from version 1.9991 to 1.9993.

       •   Math::BigInt::FastCalc has been upgraded from version 0.30 to 0.31.

       •   Math::BigRat has been upgraded from version 0.2604 to 0.2606.

       •   MIME::Base64 has been upgraded from version 3.13 to 3.14.

       •   Module::Build  has  been  upgraded  from  version  0.4003 to 0.4205.
           NOTE: Module::Build is deprecated and may be removed from  a  future
           version of Perl.

       •   Module::CoreList has been upgraded from version 2.89 to 3.10.

       •   Module::Load has been upgraded from version 0.24 to 0.32.

       •   Module::Load::Conditional  has  been  upgraded  from version 0.54 to
           0.62.

       •   Module::Metadata  has  been  upgraded  from  version   1.000011   to
           1.000019.

       •   mro has been upgraded from version 1.11 to 1.16.

       •   Net::Ping has been upgraded from version 2.41 to 2.43.

       •   Opcode has been upgraded from version 1.25 to 1.27.

       •   Package::Constants  has  been  upgraded  from  version 0.02 to 0.04.
           NOTE: Package::Constants is deprecated and may  be  removed  from  a
           future version of Perl.

       •   Params::Check has been upgraded from version 0.36 to 0.38.

       •   parent has been upgraded from version 0.225 to 0.228.

       •   Parse::CPAN::Meta has been upgraded from version 1.4404 to 1.4414.

       •   Perl::OSType has been upgraded from version 1.003 to 1.007.

       •   perlfaq has been upgraded from version 5.0150042 to 5.0150044.

       •   PerlIO has been upgraded from version 1.07 to 1.09.

       •   PerlIO::encoding has been upgraded from version 0.16 to 0.18.

       •   PerlIO::scalar has been upgraded from version 0.16 to 0.18.

       •   PerlIO::via has been upgraded from version 0.12 to 0.14.

       •   Pod::Escapes has been upgraded from version 1.04 to 1.06.

       •   Pod::Functions has been upgraded from version 1.06 to 1.08.

       •   Pod::Html has been upgraded from version 1.18 to 1.21.

       •   Pod::Parser has been upgraded from version 1.60 to 1.62.

       •   Pod::Perldoc has been upgraded from version 3.19 to 3.23.

       •   Pod::Usage has been upgraded from version 1.61 to 1.63.

       •   POSIX has been upgraded from version 1.32 to 1.38_03.

       •   re has been upgraded from version 0.23 to 0.26.

       •   Safe has been upgraded from version 2.35 to 2.37.

       •   Scalar::Util has been upgraded from version 1.27 to 1.38.

       •   SDBM_File has been upgraded from version 1.09 to 1.11.

       •   Socket has been upgraded from version 2.009 to 2.013.

       •   Storable has been upgraded from version 2.41 to 2.49.

       •   strict has been upgraded from version 1.07 to 1.08.

       •   subs has been upgraded from version 1.01 to 1.02.

       •   Sys::Hostname has been upgraded from version 1.17 to 1.18.

       •   Sys::Syslog has been upgraded from version 0.32 to 0.33.

       •   Term::Cap has been upgraded from version 1.13 to 1.15.

       •   Term::ReadLine has been upgraded from version 1.12 to 1.14.

       •   Test::Harness has been upgraded from version 3.26 to 3.30.

       •   Test::Simple has been upgraded from version 0.98 to 1.001002.

       •   Text::ParseWords has been upgraded from version 3.28 to 3.29.

       •   Text::Tabs has been upgraded from version 2012.0818 to 2013.0523.

       •   Text::Wrap has been upgraded from version 2012.0818 to 2013.0523.

       •   Thread has been upgraded from version 3.02 to 3.04.

       •   Thread::Queue has been upgraded from version 3.02 to 3.05.

       •   threads has been upgraded from version 1.86 to 1.93.

       •   threads::shared has been upgraded from version 1.43 to 1.46.

       •   Tie::Array has been upgraded from version 1.05 to 1.06.

       •   Tie::File has been upgraded from version 0.99 to 1.00.

       •   Tie::Hash has been upgraded from version 1.04 to 1.05.

       •   Tie::Scalar has been upgraded from version 1.02 to 1.03.

       •   Tie::StdHandle has been upgraded from version 4.3 to 4.4.

       •   Time::HiRes has been upgraded from version 1.9725 to 1.9726.

       •   Time::Piece has been upgraded from version 1.20_01 to 1.27.

       •   Unicode::Collate has been upgraded from version 0.97 to 1.04.

       •   Unicode::Normalize has been upgraded from version 1.16 to 1.17.

       •   Unicode::UCD has been upgraded from version 0.51 to 0.57.

       •   utf8 has been upgraded from version 1.10 to 1.13.

       •   version has been upgraded from version 0.9902 to 0.9908.

       •   vmsish has been upgraded from version 1.03 to 1.04.

       •   warnings has been upgraded from version 1.18 to 1.23.

       •   Win32 has been upgraded from version 0.47 to 0.49.

       •   XS::Typemap has been upgraded from version 0.10 to 0.13.

       •   XSLoader has been upgraded from version 0.16 to 0.17.

Documentation
   New Documentation
       perlrepository

       This  document  was removed (actually, renamed perlgit and given a major
       overhaul) in Perl v5.14, causing Perl documentation websites to show the
       now out of date version in Perl v5.12 as the latest version.  It has now
       been restored in stub form, directing readers to current information.

   Changes to Existing Documentation
       perldata

       •   New sections have been added to document the new  index/value  array
           slice and key/value hash slice syntax.

       perldebguts

       •   The   "DB::goto"   and   "DB::lsub"  debugger  subroutines  are  now
           documented.  [perl #77680]

       perlexperiment

       •   "\s" matching "\cK" is marked experimental.

       •   ithreads  were  accepted  in  v5.8.0  (but  are  discouraged  as  of
           v5.20.0).

       •   Long doubles are not considered experimental.

       •   Code  in regular expressions, regular expression backtracking verbs,
           and lvalue subroutines are no longer listed as experimental.   (This
           also affects perlre and perlsub.)

       perlfunc

       •   "chop" and "chomp" now note that they can reset the hash iterator.

       •   "exec"'s handling of arguments is now more clearly documented.

       •   "eval  EXPR"  now has caveats about expanding floating point numbers
           in some locales.

       •   "goto EXPR" is now documented to handle an expression that evaluates
           to a code reference as if it was "goto &$coderef".  This behavior is
           at least ten years old.

       •   Since Perl v5.10, it has been possible for subroutines  in  @INC  to
           return  a  reference  to  a  scalar  holding  initial source code to
           prepend to the file.  This is now documented.

       •   The documentation of "ref" has been updated to recommend the use  of
           "blessed",  "isa"  and  "reftype"  when  dealing  with references to
           blessed objects.

       perlguts

       •   Numerous minor changes have been made to reflect changes made to the
           perl internals in this release.

       •   New sections on Read-Only Values and Copy on Write have been added.

       perlhack

       •   The Super Quick Patch Guide section has been updated.

       perlhacktips

       •   The documentation has been updated to include some more examples  of
           "gdb" usage.

       perllexwarn

       •   The  perllexwarn  documentation  used  to  describe the hierarchy of
           warning  categories  understood  by  the   warnings   pragma.   That
           description has now been moved to the warnings documentation itself,
           leaving  perllexwarn  as  a  stub  that  points  to  it. This change
           consolidates all documentation for  lexical  warnings  in  a  single
           place.

       perllocale

       •   The  documentation  now  mentions  fc()  and "\F", and includes many
           clarifications and corrections in general.

       perlop

       •   The language design  of  Perl  has  always  called  for  monomorphic
           operators.  This is now mentioned explicitly.

       perlopentut

       •   The   "open"   tutorial   has   been  completely  rewritten  by  Tom
           Christiansen, and now focuses on covering only  the  basics,  rather
           than  providing  a  comprehensive  reference to all things openable.
           This rewrite  came  as  the  result  of  a  vigorous  discussion  on
           perl5-porters  kicked  off  by  a  set  of  improvements  written by
           Alexander Hartmaier to the existing perlopentut.  A "more  than  you
           ever  wanted to know about "open"" document may follow in subsequent
           versions of perl.

       perlre

       •   The fact that the regexp engine makes no effort to  call  (?{})  and
           (??{})  constructs  any  specified number of times (although it will
           basically DWIM in case of a successful match) has been documented.

       •   The  "/r"  modifier  (for  non-destructive  substitution)   is   now
           documented. [perl #119151]

       •   The  documentation for "/x" and "(?# comment)" has been expanded and
           clarified.

       perlreguts

       •   The documentation has been updated in the light of recent changes to
           regcomp.c.

       perlsub

       •   The need to predeclare recursive functions with prototypes in  order
           for  the  prototype  to  be  honoured  in  the recursive call is now
           documented. [perl #2726]

       •   A list of subroutine names used by the perl  implementation  is  now
           included.  [perl #77680]

       perltrap

       •   There is now a JavaScript section.

       perlunicode

       •   The  documentation  has been updated to reflect "Bidi_Class" changes
           in Unicode 6.3.

       perlvar

       •   A new section explaining the performance issues of $`,  $&  and  $',
           including workarounds and changes in different versions of Perl, has
           been added.

       •   Three  English variable names which have long been documented but do
           not actually exist have been removed from the documentation.   These
           were $OLD_PERL_VERSION, $OFMT, and $ARRAY_BASE.

           (Actually,   "OLD_PERL_VERSION"   does  exist,  starting  with  this
           revision, but remained undocumented until perl 5.22.0.)

       perlxs

       •   Several problems in the "MY_CXT" example have been fixed.

Diagnostics
       The following additions or changes have been made to diagnostic  output,
       including  warnings  and fatal error messages.  For the complete list of
       diagnostic messages, see perldiag.

   New Diagnostics
       New Errors

       •   delete argument is index/value array slice, use array slice

           (F) You used index/value array slice  syntax  (%array[...])  as  the
           argument  to  "delete".   You  probably  meant @array[...] with an @
           symbol instead.

       •   delete argument is key/value hash slice, use hash slice

           (F) You  used  key/value  hash  slice  syntax  (%hash{...})  as  the
           argument  to  "delete".   You  probably  meant  @hash{...} with an @
           symbol instead.

       •   Magical list constants are not supported

           (F) You assigned a magical array to a stash element, and then  tried
           to use the subroutine from the same slot.  You are asking Perl to do
           something  it  cannot  do,  details  subject  to change between Perl
           versions.

       •   Added Setting $/ to a %s reference is forbidden

       New Warnings

       •   %s on reference is experimental:

           The "auto-deref" feature is experimental.

           Starting in v5.14.0, it was possible to use  push,  pop,  keys,  and
           other  built-in  functions  not  only  on  aggregate  types,  but on
           references to them.  The feature was not deployed  to  its  original
           intended  specification,  and  now  may  become redundant to postfix
           dereferencing.  It has always been categorized  as  an  experimental
           feature, and in v5.20.0 is carries a warning as such.

           Warnings  will  now  be issued at compile time when these operations
           are detected.

             no if $] >= 5.01908, warnings => "experimental::autoderef";

           Consider, though, replacing the use of these features, as  they  may
           change behavior again before becoming stable.

       •   A  sequence  of  multiple  spaces in a charnames alias definition is
           deprecated

           Trailing white-space in a charnames alias definition is deprecated

           These two deprecation warnings involving "\N{...}" were  incorrectly
           implemented.   They  did not warn by default (now they do) and could
           not be made fatal via "use warnings FATAL => 'deprecated'" (now they
           can).

       •   Attribute prototype(%s) discards earlier prototype attribute in same
           sub

           (W  misc)  A  sub  was  declared  as  "sub  foo  :  prototype(A)   :
           prototype(B)  {}",  for  example.   Since each sub can only have one
           prototype, the earlier declaration(s) are discarded while  the  last
           one is applied.

       •   Invalid \0 character in %s for %s: %s\0%s

           (W  syscalls)  Embedded  \0  characters in pathnames or other system
           call arguments produce a warning as of 5.20.  The parts after the \0
           were formerly ignored by system calls.

       •   Matched non-Unicode code point 0x%X against  Unicode  property;  may
           not be portable.

           This  replaces the message "Code point 0x%X is not Unicode, all \p{}
           matches fail; all \P{} matches succeed".

       •   Missing ']' in prototype for %s : %s

           (W illegalproto) A grouping was started with "["  but  never  closed
           with "]".

       •   Possible precedence issue with control flow operator

           (W  syntax) There is a possible problem with the mixing of a control
           flow operator (e.g. "return") and  a  low-precedence  operator  like
           "or".  Consider:

               sub { return $a or $b; }

           This is parsed as:

               sub { (return $a) or $b; }

           Which is effectively just:

               sub { return $a; }

           Either  use  parentheses  or  the  high-precedence  variant  of  the
           operator.

           Note this may be also triggered for constructs like:

               sub { 1 if die; }

       •   Postfix dereference is experimental

           (S experimental::postderef) This warning is emitted if you  use  the
           experimental   postfix  dereference  syntax.   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::postderef";
               use feature "postderef", "postderef_qq";
               $ref->$*;
               $aref->@*;
               $aref->@[@indices];
               ... etc ...

       •   Prototype '%s' overridden by attribute 'prototype(%s)' in %s

           (W prototype) A prototype was declared in both the parentheses after
           the sub name and via the  prototype  attribute.   The  prototype  in
           parentheses  is  useless, since it will be replaced by the prototype
           from the attribute before it's ever used.

       •   Scalar value @%s[%s] better written as $%s[%s]

           (W syntax) In scalar context, you've used an array index/value slice
           (indicated by %) to select a single element of an array.   Generally
           it's  better  to  ask  for  a  scalar  value  (indicated by $).  The
           difference is that $foo[&bar] always behaves like a scalar, both  in
           the  value  it  returns  and  when  evaluating  its  argument, while
           %foo[&bar] provides a list context to its subscript,  which  can  do
           weird things if you're expecting only one subscript.  When called in
           list  context,  it  also  returns  the  index (what &bar returns) in
           addition to the value.

       •   Scalar value @%s{%s} better written as $%s{%s}

           (W syntax) In scalar context, you've used  a  hash  key/value  slice
           (indicated  by  %)  to select a single element of a hash.  Generally
           it's better to ask  for  a  scalar  value  (indicated  by  $).   The
           difference  is that $foo{&bar} always behaves like a scalar, both in
           the value  it  returns  and  when  evaluating  its  argument,  while
           @foo{&bar}  and  provides a list context to its subscript, which can
           do weird things if you're expecting only one subscript.  When called
           in list context, it also returns the key in addition to the value.

       •   Setting $/ to a reference to %s as a form of  slurp  is  deprecated,
           treating as undef

       •   Unexpected exit %u

           (S)  exit()  was  called or the script otherwise finished gracefully
           when "PERL_EXIT_WARN" was set in "PL_exit_flags".

       •   Unexpected exit failure %d

           (S) An uncaught die() was called when "PERL_EXIT_WARN"  was  set  in
           "PL_exit_flags".

       •   Use of literal control characters in variable names is deprecated

           (D  deprecated)  Using  literal  control characters in the source to
           refer to the ^FOO variables, like $^X and  ${^GLOBAL_PHASE}  is  now
           deprecated.   This  only  affects  code  like  $\cT,  where \cT is a
           control (like a "SOH") in the source code: ${"\cT"} and  $^T  remain
           valid.

       •   Useless use of greediness modifier

           This fixes [Perl #42957].

   Changes to Existing Diagnostics
       •   Warnings and errors from the regexp engine are now UTF-8 clean.

       •   The  "Unknown  switch  condition"  error  message  has  some  slight
           changes.  This error triggers when there is an unknown condition  in
           a "(?(foo))" conditional.  The error message used to read:

               Unknown switch condition (?(%s in regex;

           But  what %s could be was mostly up to luck.  For "(?(foobar))", you
           might have seen "fo" or "f".   For  Unicode  characters,  you  would
           generally  get  a corrupted string.  The message has been changed to
           read:

               Unknown switch condition (?(...)) in regex;

           Additionally, the '<-- HERE' marker in the error will now  point  to
           the correct spot in the regex.

       •   The  "%s  "\x%X"  does  not map to Unicode" warning is now correctly
           listed as a severe warning rather than as a fatal error.

       •   Under rare circumstances, one could get a "Can't coerce readonly REF
           to string" instead of the customary  "Modification  of  a  read-only
           value".  This alternate error message has been removed.

       •   "Ambiguous  use  of  *  resolved  as  operator  *": This and similar
           warnings about "%" and "&" used to occur in some circumstances where
           there was no  operator  of  the  type  cited,  so  the  warning  was
           completely wrong.  This has been fixed [perl #117535, #76910].

       •   Warnings   about   malformed  subroutine  prototypes  are  now  more
           consistent in how  the  prototypes  are  rendered.   Some  of  these
           warnings would truncate prototypes containing nulls.  In other cases
           one  warning  would  suppress  another.   The  warning about illegal
           characters in prototypes no longer  says  "after  '_'"  if  the  bad
           character came before the underscore.

       •   Perl  folding  rules  are  not  up-to-date  for 0x%X; please use the
           perlbug utility to report; in regex; marked by <-- HERE in m/%s/

           This message is now only in the regexp  category,  and  not  in  the
           deprecated  category.   It is still a default (i.e., severe) warning
           [perl #89648].

       •   %%s[%s] in scalar context better written as $%s[%s]

           This warning now occurs for any %array[$index] or  %hash{key}  known
           to  be  in scalar context at compile time.  Previously it was worded
           "Scalar value %%s[%s] better written as $%s[%s]".

       •   Switch condition not recognized in regex;  marked  by  <--  HERE  in
           m/%s/:

           The  description  for this diagnostic has been extended to cover all
           cases where the warning may occur.  Issues with the  positioning  of
           the arrow indicator have also been resolved.

       •   The   error  messages  for  my($a?$b$c)  and  my(do{})  now  mention
           "conditional expression" and "do block",  respectively,  instead  of
           reading 'Can't declare null operation in "my"'.

       •   When  "use  re "debug"" executes a regex containing a backreference,
           the debugging output now shows what string is being matched.

       •   The now fatal error message "Character following "\c" must be ASCII"
           has been reworded as "Character following  "\c"  must  be  printable
           ASCII"  to  emphasize  that  in  "\cX",  X must be a printable (non-
           control) ASCII character.

Utility Changes
       a2p

       •   A possible crash from an off-by-one  error  when  trying  to  access
           before the beginning of a buffer has been fixed.  [perl #120244]

       bisect.pl

       The git bisection tool Porting/bisect.pl has had many enhancements.

       It  is  provided  as  part  of the source distribution but not installed
       because it is not self-contained as it relies on being run from within a
       git checkout. Note also that it makes no attempt to fix  tests,  correct
       runtime  bugs  or  make  something useful to install - its purpose is to
       make minimal changes to get any historical revision of interest to build
       and run as close as possible to "as-was", and thereby make "git  bisect"
       easy to use.

       •   Can optionally run the test case with a timeout.

       •   Can now run in-place in a clean git checkout.

       •   Can run the test case under "valgrind".

       •   Can  apply  user  supplied  patches and fixes to the source checkout
           before building.

       •   Now has fixups to enable building several more historical ranges  of
           bleadperl,  which  can be useful for pinpointing the origins of bugs
           or behaviour changes.

       find2perl

       •   find2perl now handles "?" wildcards correctly.  [perl #113054]

       perlbug

       •   perlbug now has a "-p" option  for  attaching  patches  with  a  bug
           report.

       •   perlbug  has  been  modified to supply the report template with CRLF
           line       endings       on       Windows.        [GH        #13612]
           <https://github.com/Perl/perl5/issues/13612>

       •   perlbug  now makes as few assumptions as possible about the encoding
           of the report.  This will likely change  in  the  future  to  assume
           UTF-8 by default but allow a user override.

Configuration and Compilation
       •   The Makefile.PL for SDBM_File now generates a better Makefile, which
           avoids a race condition during parallel makes, which could cause the
           build  to  fail.   This  is the last known parallel make problem (on
           *nix platforms), and therefore  we  believe  that  a  parallel  make
           should now always be error free.

       •   installperl  and installman's option handling has been refactored to
           use Getopt::Long. Both are used by the Makefile  "install"  targets,
           and  are  not  installed, so these changes are only likely to affect
           custom installation scripts.

           •   Single letter options now also have long names.

           •   Invalid options are now rejected.

           •   Command line arguments that are not options are now rejected.

           •   Each now has a "--help" option to display the usage message.

           The behaviour for all valid documented invocations is unchanged.

       •   Where possible, the build now avoids recursive invocations  of  make
           when building pure-Perl extensions, without removing any parallelism
           from  the  build.  Currently  around  80 extensions can be processed
           directly by the make_ext.pl tool, meaning  that  80  invocations  of
           make and 160 invocations of miniperl are no longer made.

       •   The  build  system  now  works correctly when compiling under GCC or
           Clang with link-time  optimization  enabled  (the  "-flto"  option).
           [perl #113022]

       •   Distinct library basenames with "d_libname_unique".

           When  compiling  perl  with  this  option,  the library files for XS
           modules   are   named   something   "unique"   --    for    example,
           Hash/Util/Util.so becomes Hash/Util/PL_Hash__Util.so.  This behavior
           is  similar  to  what  currently  happens  on  VMS,  and  serves  as
           groundwork for the Android port.

       •   "sysroot" option to indicate the logical root  directory  under  gcc
           and clang.

           When building with this option set, both Configure and the compilers
           search for all headers and libraries under this new sysroot, instead
           of /.

           This  is  a huge time saver if cross-compiling, but can also help on
           native builds if your toolchain's files have non-standard locations.

       •   The cross-compilation model has been renovated.  There's several new
           options, and some backwards-incompatible changes:

           We now build binaries for miniperl and generate_uudmap to be used on
           the host, rather than running every miniperl  call  on  the  target;
           this  means  that, short of 'make test', we no longer need access to
           the target system once Configure is done.  You can provide  already-
           built  binaries through the "hostperl" and "hostgenerate" options to
           Configure.

           Additionally, if targeting an EBCDIC platform from an ASCII host, or
           viceversa, you'll need to run Configure  with  "-Uhostgenerate",  to
           indicate that generate_uudmap should be run on the target.

           Finally,  there's  also  a  way of having Configure end early, right
           after  building  the  host  binaries,  by  cross-compiling   without
           specifying a "targethost".

           The incompatible changes include no longer using xconfig.h, xlib, or
           Cross.pm,  so  canned  config  files  and  Makefiles will have to be
           updated.

       •   Related to the above, there is now a way of specifying the  location
           of sh (or equivalent) on the target system: "targetsh".

           For  example,  Android  has  its  sh in /system/bin/sh, so if cross-
           compiling from a more  normal  Unixy  system  with  sh  in  /bin/sh,
           "targetsh" would end up as /system/bin/sh, and "sh" as /bin/sh.

       •   By  default,  gcc  4.9 does some optimizations that break perl.  The
           -fwrapv option disables those optimizations (and  probably  others),
           so  for gcc 4.3 and later (since the there might be similar problems
           lurking on older versions too, but -fwrapv was  broken  before  4.3,
           and  the  optimizations  probably won't go away), Configure now adds
           -fwrapv unless the user requests -fno-wrapv, which disables -fwrapv,
           or -fsanitize=undefined, which turns the overflows  -fwrapv  ignores
           into          runtime          errors.           [GH         #13690]
           <https://github.com/Perl/perl5/issues/13690>

Testing
       •   The "test.valgrind" make target  now  allows  tests  to  be  run  in
           parallel.   This  target  allows  Perl's  test suite to be run under
           Valgrind, which detects  certain  sorts  of  C  programming  errors,
           though  at  significant  cost in running time. On suitable hardware,
           allowing parallel execution claws back  a  lot  of  that  additional
           cost. [perl #121431]

       •   Various tests in t/porting/ are no longer skipped when the perl .git
           directory is outside the perl tree and pointed to by $GIT_DIR. [perl
           #120505]

       •   The  test  suite  no  longer fails when the user's interactive shell
           maintains a $PWD environment variable,  but  the  /bin/sh  used  for
           running tests doesn't.

Platform Support
   New Platforms
       Android
           Perl can now be built for Android, either natively or through cross-
           compilation,  for  all three currently available architectures (ARM,
           MIPS, and x86), on a wide range of versions.

       Bitrig
           Compile support has been added for Bitrig, a fork of OpenBSD.

       FreeMiNT
           Support has been added for FreeMiNT, a free open-source OS  for  the
           Atari  ST system and its successors, based on the original MiNT that
           was officially adopted by Atari.

       Synology
           Synology ships its NAS boxes with a lean Linux distribution (DSM) on
           relative cheap CPU's (like the Marvell Kirkwood mv6282 - ARMv5tel or
           Freescale QorIQ P1022 ppc - e500v2) not meant  for  workstations  or
           development.  These  boxes  should build now. The basic problems are
           the non-standard location for tools.

   Discontinued Platforms
       "sfio"
           Code related to supporting the "sfio" I/O system has been removed.

           Perl 5.004 added support to use the native  API  of  "sfio",  AT&T's
           Safe/Fast  I/O  library.  This  code still built with v5.8.0, albeit
           with many regression tests failing,  but  was  inadvertently  broken
           before  the  v5.8.1  release,  meaning that it has not worked on any
           version of Perl released since then.   In  over  a  decade  we  have
           received no bug reports about this, hence it is clear that no-one is
           using  this  functionality  on  any  version  of  Perl that is still
           supported to any degree.

       AT&T 3b1
           Configure support for the 3b1, also known as the AT&T Unix  PC  (and
           the similar AT&T 7300), has been removed.

       DG/UX
           DG/UX was a Unix sold by Data General. The last release was in April
           2001.  It only runs on Data General's own hardware.

       EBCDIC
           In  the  absence of a regular source of smoke reports, code intended
           to support native EBCDIC platforms will be removed from perl  before
           5.22.0.

   Platform-Specific Notes
       Cygwin
           •   recv()  on a connected handle would populate the returned sender
               address with whatever happened to  be  in  the  working  buffer.
               recv() now uses a workaround similar to the Win32 recv() wrapper
               and  returns an empty string when recvfrom(2) doesn't modify the
               supplied address length. [perl #118843]

           •   Fixed a build error in cygwin.c on Cygwin 1.7.28.

               Tests now handle the errors that occur  when  "cygserver"  isn't
               running.

       GNU/Hurd
           The  BSD  compatibility  library  "libbsd" is no longer required for
           builds.

       Linux
           The hints file now looks  for  "libgdbm_compat"  only  if  "libgdbm"
           itself  is  also  wanted.  The  former  is  never useful without the
           latter, and in  some  circumstances,  including  it  could  actually
           prevent building.

       Mac OS
           The  build  system  now  honors an "ld" setting supplied by the user
           running Configure.

       MidnightBSD
           "objformat" was removed from version 0.4-RELEASE of MidnightBSD  and
           had  been  deprecated  on  earlier  versions.  This caused the build
           environment to be erroneously configured  for  "a.out"  rather  than
           "elf".  This has been now been corrected.

       Mixed-endian platforms
           The  code  supporting "pack" and "unpack" operations on mixed endian
           platforms has been removed. We  believe  that  Perl  has  long  been
           unable  to build on mixed endian architectures (such as PDP-11s), so
           we don't think that this change will affect any platforms which were
           able to build v5.18.0.

       VMS
           •   The "PERL_ENV_TABLES" feature to control the population of  %ENV
               at  perl  start-up  was  broken  in Perl 5.16.0 but has now been
               fixed.

           •   Skip access checks on remotes in opendir().  [perl #121002]

           •   A check for glob metacharacters in a path returned by the glob()
               operator has  been  replaced  with  a  check  for  VMS  wildcard
               characters.   This  saves  a  significant  number of unnecessary
               lstat() calls such  that  some  simple  glob  operations  become
               60-80% faster.

       Win32
           •   "rename"  and  "link"  on  Win32 now set $! to ENOSPC and EDQUOT
               when appropriate.  [perl #119857]

           •   The BUILD_STATIC and ALL_STATIC  makefile  options  for  linking
               some  or  (nearly)  all extensions statically (into perl520.dll,
               and into a separate perl-static.exe too) were broken  for  MinGW
               builds. This has now been fixed.

               The  ALL_STATIC  option  has  also  been improved to include the
               Encode and Win32 extensions (for both VC++ and MinGW builds).

           •   Support for building with Visual C++ 2013 has been added.  There
               are currently two possible test failures (see "Testing  Perl  on
               Windows" in perlwin32) which will hopefully be resolved soon.

           •   Experimental  support  for  building with Intel C++ Compiler has
               been added.  The nmake makefile (win32/Makefile) and  the  dmake
               makefile  (win32/makefile.mk)  can be used.  A "nmake test" will
               not pass at this time due to cpan/CGI/t/url.t.

           •   Killing a process tree with "kill" in perlfunc  and  a  negative
               signal,  was  broken  starting  in  5.18.0.  In this bug, "kill"
               always returned 0 for a negative signal even for valid PIDs, and
               no  processes  were  terminated.  This  has  been  fixed   [perl
               #121230].

           •   The  time  taken to build perl on Windows has been reduced quite
               significantly  (time  savings  in  the  region  of  30-40%   are
               typically  seen) by reducing the number of, usually failing, I/O
               calls for each require() (for miniperl.exe only).   [GH  #13566]
               <https://github.com/Perl/perl5/issues/13566>

           •   About 15 minutes of idle sleeping was removed from running "make
               test"  due  to a bug in which the timeout monitor used for tests
               could not be cancelled once the test  completes,  and  the  full
               timeout  period  elapsed before running the next test file.  [GH
               #13647] <https://github.com/Perl/perl5/issues/13647>

           •   On a perl built without pseudo-fork (pseudo-fork builds were not
               affected by this bug), killing a process tree with kill() and  a
               negative signal resulted in kill() inverting the returned value.
               For  example,  if  kill()  killed  1  process  tree  PID then it
               returned 0 instead of 1, and if kill() was passed 2 invalid PIDs
               then it returned 2 instead of 0.  This  has  probably  been  the
               case  since  the  process  tree  kill feature was implemented on
               Win32.  It has now  been  corrected  to  follow  the  documented
               behaviour.                       [GH                     #13595]
               <https://github.com/Perl/perl5/issues/13595>

           •   When building a 64-bit perl, an  uninitialized  memory  read  in
               miniperl.exe, used during the build process, could lead to a 4GB
               wperl.exe  being  created.  This has now been fixed.  (Note that
               perl.exe itself was unaffected, but  obviously  wperl.exe  would
               have      been      completely     broken.)      [GH     #13677]
               <https://github.com/Perl/perl5/issues/13677>

           •   Perl  can  now  be   built   with   gcc   version   4.8.1   from
               <http://www.mingw.org>.   This  was  previously broken due to an
               incorrect definition of DllMain() in one of perl's source files.
               Earlier gcc versions were also affected when using version 4  of
               the   w32api   package.    Versions   of   gcc   available  from
               <http://mingw-w64.sourceforge.net/>  were  not  affected.    [GH
               #13733] <https://github.com/Perl/perl5/issues/13733>

           •   The test harness now has no failures when perl is built on a FAT
               drive  with  the  Windows  OS  on  an  NTFS  drive.   [GH #6348]
               <https://github.com/Perl/perl5/issues/6348>

           •   When  cloning   the   context   stack   in   fork()   emulation,
               Perl_cx_dup()  would  crash  accessing parameter information for
               context stack entries  that  included  no  parameters,  as  with
               "&foo;".                        [GH                      #13763]
               <https://github.com/Perl/perl5/issues/13763>

           •   Introduced              by              [GH              #12161]
               <https://github.com/Perl/perl5/issues/12161>,  a  memory leak on
               every call to "system" and backticks ( `` ), on most Win32 Perls
               starting from 5.18.0 has  been  fixed.   The  memory  leak  only
               occurred if you enabled pseudo-fork in your build of Win32 Perl,
               and  were running that build on Server 2003 R2 or newer OS.  The
               leak   does   not   appear   on   WinXP   SP3.    [GH    #13741]
               <https://github.com/Perl/perl5/issues/13741>

       WinCE
           •   The  building  of XS modules has largely been restored.  Several
               still cannot (yet) be built but it is now possible to build Perl
               on WinCE with only a couple of further patches  (to  Socket  and
               ExtUtils::MakeMaker), hopefully to be incorporated soon.

           •   Perl  can  now be built in one shot with no user intervention on
               WinCE by running "nmake -f Makefile.ce all".

               Support for building with EVC (Embedded Visual C++) 4  has  been
               restored.  Perl can also be built using Smart Devices for Visual
               C++ 2005 or 2008.

Internal Changes
       •   The  internal representation has changed for the match variables $1,
           $2 etc., $`, $&, $', ${^PREMATCH}, ${^MATCH} and ${^POSTMATCH}.   It
           uses  slightly  less  memory,  avoids string comparisons and numeric
           conversions during lookup, and uses  23  fewer  lines  of  C.   This
           change should not affect any external code.

       •   Arrays now use NULL internally to represent unused slots, instead of
           &PL_sv_undef.  &PL_sv_undef is no longer treated as a special value,
           so  av_store(av, 0, &PL_sv_undef) will cause element 0 of that array
           to hold a read-only undefined scalar.  "$array[0] =  anything"  will
           croak and "\$array[0]" will compare equal to "\undef".

       •   The  SV  returned  by  HeSVKEY_force()  now  correctly  reflects the
           UTF8ness of the underlying hash key when that key is not stored as a
           SV.  [perl #79074]

       •   Certain rarely used functions and macros available to  XS  code  are
           now     deprecated.     These    are:    "utf8_to_uvuni_buf"    (use
           "utf8_to_uvchr_buf"     instead),     "valid_utf8_to_uvuni"     (use
           "utf8_to_uvchr_buf"  instead),  "NATIVE_TO_NEED"  (this did not work
           properly anyway), and "ASCII_TO_NEED" (this did  not  work  properly
           anyway).

           Starting in this release, almost never does application code need to
           distinguish  between  the  platform's  character  set and Latin1, on
           which the lowest 256 characters of  Unicode  are  based.   New  code
           should  not  use "utf8n_to_uvuni" (use "utf8_to_uvchr_buf" instead),
           nor "uvuni_to_utf8" (use "uvchr_to_utf8" instead),

       •   The Makefile shortcut  targets  for  many  rarely  (or  never)  used
           testing  and profiling targets have been removed, or merged into the
           only other Makefile target  that  uses  them.   Specifically,  these
           targets  are  gone, along with documentation that referenced them or
           explained how to use them:

               check.third check.utf16 check.utf8 coretest minitest.prep
               minitest.utf16 perl.config.dashg perl.config.dashpg
               perl.config.gcov perl.gcov perl.gprof perl.gprof.config
               perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
               perl.third perl.third.config perl.valgrind.config purecovperl
               pureperl quantperl test.deparse test.taintwarn test.third
               test.torture test.utf16 test.utf8 test_notty.deparse
               test_notty.third test_notty.valgrind test_prep.third
               test_prep.valgrind torturetest ucheck ucheck.third ucheck.utf16
               ucheck.valgrind utest utest.third utest.utf16 utest.valgrind

           It's still possible to run the relevant  commands  by  "hand"  -  no
           underlying functionality has been removed.

       •   It  is  now possible to keep Perl from initializing locale handling.
           For the most part, Perl  doesn't  pay  attention  to  locale.   (See
           perllocale.)   Nonetheless,  until  now,  on  startup, it has always
           initialized locale handling to the system default, just in case  the
           program  being  executed ends up using locales.  (This is one of the
           first things a locale-aware program  should  do,  long  before  Perl
           knows if it will actually be needed or not.)  This works well except
           when  Perl  is  embedded in another application which wants a locale
           that isn't the system default.  Now,  if  the  environment  variable
           "PERL_SKIP_LOCALE_INIT"  is  set  at  the time Perl is started, this
           initialization  step  is  skipped.   Prior  to  this,   on   Windows
           platforms,  the  only  workaround  for  this deficiency was to use a
           hacked-up copy of internal Perl code.  Applications that need to use
           older Perls can discover if the embedded Perl they are  using  needs
           the   workaround   by   testing   that  the  C  preprocessor  symbol
           "HAS_SKIP_LOCALE_INIT" is not defined.  [RT #38193]

       •   "BmRARE" and "BmPREVIOUS" have been removed.   They  were  not  used
           anywhere  and are not part of the API.  For XS modules, they are now
           #defined as 0.

       •   "sv_force_normal", which usually croaks on read-only values, used to
           allow read-only values to be modified at  compile  time.   This  has
           been  changed  to croak on read-only values regardless.  This change
           uncovered several core bugs.

       •   Perl's  new  copy-on-write  mechanism   (which  is  now  enabled  by
           default),  allows any "SvPOK" scalar to be automatically upgraded to
           a copy-on-write scalar when copied. A reference count on the  string
           buffer is stored in the string buffer itself.

           For example:

               $ perl -MDevel::Peek -e'$a="abc"; $b = $a; Dump $a; Dump $b'
               SV = PV(0x260cd80) at 0x2620ad8
                 REFCNT = 1
                 FLAGS = (POK,IsCOW,pPOK)
                 PV = 0x2619bc0 "abc"\0
                 CUR = 3
                 LEN = 16
                 COW_REFCNT = 1
               SV = PV(0x260ce30) at 0x2620b20
                 REFCNT = 1
                 FLAGS = (POK,IsCOW,pPOK)
                 PV = 0x2619bc0 "abc"\0
                 CUR = 3
                 LEN = 16
                 COW_REFCNT = 1

           Note  that  both  scalars  share  the  same  PV  buffer  and  have a
           COW_REFCNT greater than zero.

           This means that XS code which wishes to modify the SvPVX() buffer of
           an SV should call SvPV_force() or similar first, to ensure  a  valid
           (and  unshared) buffer, and to call SvSETMAGIC() afterwards. This in
           fact has always been the case (for example hash  keys  were  already
           copy-on-write);  this  change  just  spreads  the COW behaviour to a
           wider variety of SVs.

           One important difference is  that  before  5.18.0,  shared  hash-key
           scalars  used  to  have the "SvREADONLY" flag set; this is no longer
           the case.

           This new behaviour can still be disabled by running  Configure  with
           -Accflags=-DPERL_NO_COW.   This  option  will probably be removed in
           Perl 5.22.

       •   "PL_sawampersand" is now  a  constant.   The  switch  this  variable
           provided  (to enable/disable the pre-match copy depending on whether
           $& had been seen) has been removed and replaced with  copy-on-write,
           eliminating a few bugs.

           The  previous  behaviour  can  still be enabled by running Configure
           with -Accflags=-DPERL_SAWAMPERSAND.

       •   The  functions  "my_swap",  "my_htonl"  and  "my_ntohl"  have   been
           removed.   It  is unclear why these functions were ever marked as A,
           part of the API. XS code can't call them directly, as it can't  rely
           on  them  being compiled. Unsurprisingly, no code on CPAN references
           them.

       •   The signature  of  the  Perl_re_intuit_start()  regex  function  has
           changed;  the  function  pointer "intuit" in the regex engine plugin
           structure has also changed accordingly. A  new  parameter,  "strbeg"
           has  been  added;  this  has  the  same  meaning  as  the same-named
           parameter in "Perl_regexec_flags". Previously intuit  would  try  to
           guess the start of the string from the passed SV (if any), and would
           sometimes get it wrong (e.g. with an overloaded SV).

       •   The   signature  of  the  Perl_regexec_flags()  regex  function  has
           changed; the function pointer "exec"  in  the  regex  engine  plugin
           structure has also changed to match.  The "minend" parameter now has
           type "SSize_t" to better support 64-bit systems.

       •   XS  code may use various macros to change the case of a character or
           code point (for example toLOWER_utf8()).  Only  a  couple  of  these
           were documented until now; and now they should be used in preference
           to  calling the underlying functions.  See "Character case changing"
           in perlapi.

       •   The code dealt rather inconsistently with uids and gids. Some places
           assumed that they could be safely stored  in  UVs,  others  in  IVs,
           others   in   ints.   Four   new  macros  are  introduced:  SvUID(),
           sv_setuid(), SvGID(), and sv_setgid()

       •   "sv_pos_b2u_flags" has been added to the  API.   It  is  similar  to
           "sv_pos_b2u", but supports long strings on 64-bit platforms.

       •   "PL_exit_flags"  can  now be used by perl embedders or other XS code
           to have perl "warn" or "abort" on an attempted exit. [perl #52000]

       •   Compiling with "-Accflags=-PERL_BOOL_AS_CHAR" now allows C99 and C++
           compilers to emulate the aliasing of "bool" to "char" that perl does
           for C89 compilers.  [perl #120314]

       •   The "sv" argument in "sv_2pv_flags" in  perlapi,  "sv_2iv_flags"  in
           perlapi,  "sv_2uv_flags"  in  perlapi, and "sv_2nv_flags" in perlapi
           and their older wrappers sv_2pv, sv_2iv, sv_2uv, sv_2nv, is now non-
           NULL. Passing NULL now will crash.  When  the  non-NULL  marker  was
           introduced en masse in 5.9.3 the functions were marked non-NULL, but
           since the creation of the SV API in 5.0 alpha 2, if NULL was passed,
           the  functions  returned  0  or  false-type  values.  The  code that
           supports "sv" argument being non-NULL dates to 5.0 alpha 2 directly,
           and indirectly to Perl 1.0 (pre 5.0 api). The lack of  documentation
           that  the functions accepted a NULL "sv" was corrected in 5.11.0 and
           between 5.11.0 and 5.19.5 the functions were marked  NULLOK.  As  an
           optimization the NULLOK code has now been removed, and the functions
           became  non-NULL marked again, because core getter-type macros never
           pass NULL to these functions and would  crash  before  ever  passing
           NULL.

           The only way a NULL "sv" can be passed to sv_2*v* functions is if XS
           code  directly calls sv_2*v*. This is unlikely as XS code uses Sv*V*
           macros to get the underlying value  out  of  the  SV.  One  possible
           situation  which  leads  to  a  NULL  "sv"  being  passed to sv_2*v*
           functions, is if XS code defines its own getter type  Sv*V*  macros,
           which  check  for  NULL  before  dereferencing and checking the SV's
           flags through public API Sv*OK* macros or directly using private API
           "SvFLAGS", and if "sv" is NULL, then calling  the  sv_2*v  functions
           with a NULL literal or passing the "sv" containing a NULL value.

       •   newATTRSUB is now a macro

           The  public  API  newATTRSUB  was  previously a macro to the private
           function Perl_newATTRSUB. Function Perl_newATTRSUB has been removed.
           newATTRSUB is now macro to a different internal function.

       •   Changes in warnings raised by utf8n_to_uvchr()

           This bottom level function decodes the first character  of  a  UTF-8
           string  into a code point.  It is accessible to "XS" level code, but
           it's discouraged from using it directly.   There  are  higher  level
           functions  that  call  this  that  should  be  used instead, such as
           "utf8_to_uvchr_buf"  in  perlapi.   For  completeness  though,  this
           documents some changes to it.  Now, tests for malformations are done
           before  any  tests  for other potential issues.  One of those issues
           involves code points so large that they have never appeared  in  any
           official  standard (the current standard has scaled back the highest
           acceptable code  point  from  earlier  versions).   It  is  possible
           (though  not  done in CPAN) to warn and/or forbid these code points,
           while accepting smaller code points that are still above  the  legal
           Unicode maximum.  The warning message for this now includes the code
           point  if  representable  on  the  machine.   Previously  it  always
           displayed  raw  bytes,  which  is  what  it  still  does  for   non-
           representable code points.

       •   Regexp  engine  changes  that  affect  the  pluggable  regex  engine
           interface

           Many flags that used to be exposed via regexp.h and used to populate
           the extflags member of struct regexp have been removed. These fields
           were technically private to Perl's own regexp engine and should  not
           have been exposed there in the first place.

           The affected flags are:

               RXf_NOSCAN
               RXf_CANY_SEEN
               RXf_GPOS_SEEN
               RXf_GPOS_FLOAT
               RXf_ANCH_BOL
               RXf_ANCH_MBOL
               RXf_ANCH_SBOL
               RXf_ANCH_GPOS

           As well as the follow flag masks:

               RXf_ANCH_SINGLE
               RXf_ANCH

           All have been renamed to PREGf_ equivalents and moved to regcomp.h.

           The  behavior  previously  achieved  by  setting  one or more of the
           RXf_ANCH_ flags (via the RXf_ANCH mask) have now been replaced by  a
           *single* flag bit in extflags:

               RXf_IS_ANCHORED

           pluggable  regex  engines  which  previously used to set these flags
           should now set this flag ALONE.

       •   The Perl core now consistently uses av_tindex() ("the top  index  of
           an array") as a more clearly-named synonym for av_len().

       •   The  obscure  interpreter  variable  "PL_timesbuf" is expected to be
           removed early in the 5.21.x development series, so that Perl  5.22.0
           will  not provide it to XS authors.  While the variable still exists
           in 5.20.0, we hope that this advance warning of the deprecation will
           help anyone who is using that variable.

Selected Bug Fixes
   Regular Expressions
       •   Fixed a small number of regexp constructions that could either  fail
           to  match  or  crash  perl when the string being matched against was
           allocated above the 2GB line on 32-bit systems. [RT #118175]

       •   Various memory leaks involving the parsing of the "(?[...])" regular
           expression construct have been fixed.

       •   "(?[...])"  now  allows  interpolation   of   precompiled   patterns
           consisting  of  "(?[...])"  with  bracketed character classes inside
           ("$pat = qr/(?[ [a] ])/; /(?[ $pat ])/").   Formerly,  the  brackets
           would confuse the regular expression parser.

       •   The   "Quantifier  unexpected  on  zero-length  expression"  warning
           message could appear twice starting in  Perl  v5.10  for  a  regular
           expression also containing alternations (e.g., "a|b") triggering the
           trie optimisation.

       •   Perl  v5.18  inadvertently  introduced  a  bug whereby interpolating
           mixed up- and down-graded UTF-8 strings in a regex could  result  in
           malformed  UTF-8  in  the  pattern:  specifically  if  a  downgraded
           character in the range "\x80..\xff" followed a UTF-8 string, e.g.

               utf8::upgrade(  my $u = "\x{e5}");
               utf8::downgrade(my $d = "\x{e5}");
               /$u$d/

           [RT #118297]

       •   In regular expressions containing multiple code blocks,  the  values
           of  $1,  $2, etc., set by nested regular expression calls would leak
           from one block to the next.  Now these variables always refer to the
           outer regular expression at the start of  an  embedded  block  [perl
           #117917].

       •   "/$qr/p" was broken in Perl 5.18.0; the "/p" flag was ignored.  This
           has been fixed. [perl #118213]

       •   Starting  in  Perl 5.18.0, a construct like "/[#](?{})/x" would have
           its "#" incorrectly interpreted as a comment.  The code block  would
           be skipped, unparsed.  This has been corrected.

       •   Starting  in  Perl  5.001,  a  regular expression like "/[#$a]/x" or
           "/[#]$a/x" would have its "#" incorrectly interpreted as a  comment,
           so  the  variable  would  not interpolate.  This has been corrected.
           [perl #45667]

       •   Perl 5.18.0  inadvertently  made  dereferenced  regular  expressions
           ("${ qr// }") false as booleans.  This has been fixed.

       •   The  use of "\G" in regular expressions, where it's not at the start
           of the pattern, is now slightly less buggy  (although  it  is  still
           somewhat problematic).

       •   Where  a regular expression included code blocks ("/(?{...})/"), and
           where the use of constant overloading triggered a re-compilation  of
           the  code block, the second compilation didn't see its outer lexical
           scope.  This was a regression in Perl 5.18.0.

       •   The string position set by "pos" could shift if the  string  changed
           representation internally to or from utf8.  This could happen, e.g.,
           with references to objects with string overloading.

       •   Taking  references  to the return values of two "pos" calls with the
           same argument, and then assigning a reference to one and "undef"  to
           the other, could result in assertion failures or memory leaks.

       •   Elements  of  @- and @+ now update correctly when they refer to non-
           existent  captures.   Previously,  a  referenced  element  ("$ref  =
           \$-[1]") could refer to the wrong match after subsequent matches.

       •   The  code  that  parses regex backrefs (or ambiguous backref/octals)
           such as \123 did a simple atoi(), which could wrap round to negative
           values on long digit strings and cause  segmentation  faults.   This
           has now been fixed.  [perl #119505]

       •   Assigning  another  typeglob  to  "*^R"  no longer makes the regular
           expression engine crash.

       •   The "\N" regular expression escape,  when  used  without  the  curly
           braces  (to  mean "[^\n]"), was ignoring a following "*" if followed
           by whitespace under /x.  It had been this way  since  "\N"  to  mean
           "[^\n]" was introduced in 5.12.0.

       •   "s///", "tr///" and "y///" now work when a wide character is used as
           the delimiter.  [perl #120463]

       •   Some  cases  of unterminated (?...) sequences in regular expressions
           (e.g., "/(?</") have been fixed to produce the proper error  message
           instead  of  "panic: memory wrap".  Other cases (e.g., "/(?(/") have
           yet to be fixed.

       •   When a reference to a reference to an overloaded object was returned
           from a regular  expression  "(??{...})"  code  block,  an  incorrect
           implicit  dereference  could  take  place if the inner reference had
           been returned by a code block previously.

       •   A tied variable returned from "(??{...})" sees the inner  values  of
           match  variables  (i.e.,  the  $1  etc.  from any matches inside the
           block) in its FETCH method.  This was not the case if a reference to
           an overloaded object  was  the  last  thing  assigned  to  the  tied
           variable.   Instead,  the  match  variables  referred  to  the outer
           pattern during the FETCH call.

       •   Fix unexpected tainting via regexp using locale.  Previously,  under
           certain  conditions,  the  use  of  character  classes  could  cause
           tainting when it  shouldn't.  Some  character  classes  are  locale-
           dependent,  but  before this patch, sometimes tainting was happening
           even for character classes that don't depend on  the  locale.  [perl
           #120675]

       •   Under  certain  conditions,  Perl  would  throw  an  error  if  in a
           lookbehind assertion in a regexp, the assertion referred to a  named
           subpattern,  complaining the lookbehind was variable when it wasn't.
           This has been fixed. [perl #120600], [perl #120618]. The current fix
           may be improved on in the future.

       •   $^R  wasn't  available  outside  of  the  regular  expression   that
           initialized it.  [perl #121070]

       •   A  large  set  of  fixes  and  refactoring for re_intuit_start() was
           merged, the highlights are:

           •   Fixed  a   panic   when   compiling   the   regular   expression
               "/\x{100}[xy]\x{100}{2}/".

           •   Fixed  a performance regression when performing a global pattern
               match against a UTF-8 string.  [perl #120692]

           •   Fixed  another  performance  issue  where  matching  a   regular
               expression  like "/ab.{1,2}x/" against a long UTF-8 string would
               unnecessarily calculate byte offsets for a large portion of  the
               string. [perl #120692]

       •   Fixed  an  alignment  error  when compiling regular expressions when
           built with GCC on HP-UX 64-bit.

       •   On 64-bit platforms "pos" can now be set  to  a  value  higher  than
           2**31-1.  [perl #72766]

   Perl 5 Debugger and -d
       •   The  debugger's  "man"  command  been  fixed.  It  was broken in the
           v5.18.0 release. The "man" command is aliased to the names "doc" and
           "perldoc" - all now work again.

       •   @_ is now correctly visible in the  debugger,  fixing  a  regression
           introduced in v5.18.0's debugger. [RT #118169]

       •   Under copy-on-write builds (the default as of 5.20.0) "${'_<-e'}[0]"
           no  longer  gets mangled.  This is the first line of input saved for
           the debugger's use for one-liners [perl #118627].

       •   On non-threaded builds, setting "${"_<filename"}" to a reference  or
           typeglob  no  longer  causes  "__FILE__"  and some error messages to
           produce a corrupt string, and no longer prevents "#line"  directives
           in  string  evals  from  providing the source lines to the debugger.
           Threaded builds were unaffected.

       •   Starting with Perl 5.12, line numbers were off  by  one  if  the  -d
           switch was used on the #! line.  Now they are correct.

       •   "*DB::DB  =  sub {} if 0" no longer stops Perl's debugging mode from
           finding "DB::DB" subs declared thereafter.

       •   "%{'_<...'}"  hashes  now  set  breakpoints  on  the   corresponding
           "@{'_<...'}"  rather than whichever array @DB::dbline is aliased to.
           [perl #119799]

       •   Call set-magic when setting $DB::sub.  [perl #121255]

       •   The debugger's "n" command now respects lvalue subroutines and steps
           over them [perl #118839].

   Lexical Subroutines
       •   Lexical constants ("my sub  a()  {  42  }")  no  longer  crash  when
           inlined.

       •   Parameter   prototypes  attached  to  lexical  subroutines  are  now
           respected when compiling sub calls without parentheses.  Previously,
           the prototypes were honoured only for calls  with  parentheses.  [RT
           #116735]

       •   Syntax  errors  in  lexical subroutines in combination with calls to
           the same subroutines no longer cause crashes at compile time.

       •   Deep recursion warnings no longer  crash  lexical  subroutines.  [RT
           #118521]

       •   The  dtrace  sub-entry probe now works with lexical subs, instead of
           crashing [perl #118305].

       •   Undefining an inlinable lexical subroutine (my  sub  foo()  {  42  }
           undef &foo) would result in a crash if warnings were turned on.

       •   An  undefined  lexical  sub  used  as  an inherited method no longer
           crashes.

       •   The presence of a lexical sub  named  "CORE"  no  longer  stops  the
           CORE:: prefix from working.

   Everything Else
       •   The  OP  allocation code now returns correctly aligned memory in all
           cases for "struct pmop". Previously  it  could  return  memory  only
           aligned  to  a 4-byte boundary, which is not correct for an ithreads
           build with 64 bit IVs on some 32 bit platforms. Notably, this caused
           the build to fail completely on sparc GNU/Linux. [RT #118055]

       •   Evaluating large hashes in scalar context is now much faster, as the
           number of used chains in the hash is now cached for  larger  hashes.
           Smaller  hashes  continue  not  to  store  it  and calculate it when
           needed, as this saves one IV.  That would be 1 IV overhead for every
           object built from a hash. [RT #114576]

       •   Perl v5.16 inadvertently introduced a bug  whereby  calls  to  XSUBs
           that  were  not  visible at compile time were treated as lvalues and
           could be assigned to, even when the subroutine  was  not  an  lvalue
           sub.  This has been fixed.  [RT #117947]

       •   In  Perl  v5.18.0  dualvars  that had an empty string for the string
           part but a non-zero  number  for  the  number  part  starting  being
           treated  as  true.  In previous versions they were treated as false,
           the string representation taking precedence.  The old behaviour  has
           been restored. [RT #118159]

       •   Since  Perl  v5.12,  inlining  of  constants  that override built-in
           keywords of the same name  had  countermanded  "use  subs",  causing
           subsequent  mentions  of  the  constant  to use the built-in keyword
           instead.  This has been fixed.

       •   The warning produced by "-l $handle" now  applies  to  IO  refs  and
           globs,  not just to glob refs.  That warning is also now UTF8-clean.
           [RT #117595]

       •   "delete local $ENV{nonexistent_env_var}" no longer leaks memory.

       •   "sort" and "require" followed by a keyword  prefixed  with  "CORE::"
           now  treat  it as a keyword, and not as a subroutine or module name.
           [RT #24482]

       •   Through certain conundrums, it is  possible  to  cause  the  current
           package  to  be freed.  Certain operators ("bless", "reset", "open",
           "eval") could not cope and would crash.  They have  been  made  more
           resilient. [RT #117941]

       •   Aliasing  filehandles  through  glob-to-glob  assignment  would  not
           update internal method caches properly if a package of the same name
           as the filehandle existed,  resulting  in  filehandle  method  calls
           going to the package instead.  This has been fixed.

       •   "./Configure -de -Dusevendorprefix" didn't default. [RT #64126]

       •   The  "Statement  unlikely  to  be  reached"  warning  was  listed in
           perldiag as an "exec"-category warning, but was enabled and disabled
           by the "syntax" category.  On the other hand,  the  "exec"  category
           controlled its fatal-ness.  It is now entirely handled by the "exec"
           category.

       •   The  "Replacement  list  is  longer  that  search  list" warning for
           "tr///" and "y///" no longer occurs in  the  presence  of  the  "/c"
           flag. [RT #118047]

       •   Stringification  of  NVs  are  not cached so that the lexical locale
           controls stringification of the decimal point. [perl #108378]  [perl
           #115800]

       •   There have been several fixes related to Perl's handling of locales.
           perl  #38193  was described above in "Internal Changes".  Also fixed
           is #118197, where the radix (decimal point) character had to  be  an
           ASCII character (which doesn't work for some non-Western languages);
           and  #115808,  in  which  POSIX::setlocale()  on failure returned an
           "undef" which didn't warn about not  being  defined  even  if  those
           warnings were enabled.

       •   Compiling  a  "split"  operator  whose  third  argument  is  a named
           constant evaluating to 0 no longer causes the  constant's  value  to
           change.

       •   A  named  constant  used as the second argument to "index" no longer
           gets coerced to a string if it is a reference,  regular  expression,
           dualvar, etc.

       •   A  named  constant  evaluating  to  the  undefined value used as the
           second  argument  to  "index"  no  longer  produces  "uninitialized"
           warnings at compile time.  It will still produce them at run time.

       •   When a scalar was returned from a subroutine in @INC, the referenced
           scalar was magically converted into an IO thingy, possibly resulting
           in  "Bizarre  copy"  errors  if  that  scalar  continued  to be used
           elsewhere.  Now Perl uses an internal copy of the scalar instead.

       •   Certain uses of the "sort" operator are optimised to modify an array
           in place, such as "@a = sort @a".  During the sorting, the array  is
           made  read-only.   If  a  sort  block should happen to die, then the
           array remained read-only even outside the  "sort".   This  has  been
           fixed.

       •   $a and $b inside a sort block are aliased to the actual arguments to
           "sort",  so  they can be modified through those two variables.  This
           did not always work, e.g., for lvalue subs and $#ary,  and  probably
           many other operators.  It works now.

       •   The  arguments to "sort" are now all in list context.  If the "sort"
           itself were called in void or scalar context,  then  some,  but  not
           all, of the arguments used to be in void or scalar context.

       •   Subroutine  prototypes  with  Unicode  characters  above U+00FF were
           getting mangled during closure  cloning.   This  would  happen  with
           subroutines  closing  over  lexical  variables declared outside, and
           with lexical subs.

       •   "UNIVERSAL::can" now treats its first argument  the  same  way  that
           method  calls  do:  Typeglobs  and glob references with non-empty IO
           slots  are  treated  as  handles,  and  strings   are   treated   as
           filehandles, rather than packages, if a handle with that name exists
           [perl #113932].

       •   Method calls on typeglobs (e.g., "*ARGV->getline") used to stringify
           the  typeglob  and  then look it up again.  Combined with changes in
           Perl 5.18.0, this allowed "*foo->bar" to call methods on  the  "foo"
           package  (like "foo->bar").  In some cases it could cause the method
           to be called on the  wrong  handle.   Now  a  typeglob  argument  is
           treated  as  a handle (just like "(\*foo)->bar"), or, if its IO slot
           is empty, an error is raised.

       •   Assigning a vstring to a tied variable or to a  subroutine  argument
           aliased  to  a  nonexistent hash or array element now works, without
           flattening the vstring into a regular string.

       •   "pos", "tie", "tied" and "untie" did not work properly on subroutine
           arguments aliased to  nonexistent  hash  and  array  elements  [perl
           #77814, #27010].

       •   The  "=>" fat arrow operator can now quote built-in keywords even if
           it occurs on the next line, making it consistent with how it  treats
           other barewords.

       •   Autovivifying  a  subroutine  stub  via  "\&$glob"  started  causing
           crashes in Perl 5.18.0 if the $glob was merely  a  copy  of  a  real
           glob,  i.e.,  a scalar that had had a glob assigned to it.  This has
           been fixed. [perl #119051]

       •   Perl  used  to  leak  an  implementation  detail  when  it  came  to
           referencing  the return values of certain operators.  "for ($a+$b) {
           warn  \$_;  warn  \$_  }"  used  to  display  two  different  memory
           addresses, because the "\" operator was copying the variable.  Under
           threaded  builds,  it would also happen for constants ("for(1) { ...
           }").  This has been fixed. [perl #21979,  #78194,  #89188,  #109746,
           #114838, #115388]

       •   The  range  operator  ".." was returning the same modifiable scalars
           with each call, unless it was the only thing  in  a  "foreach"  loop
           header.   This meant that changes to values within the list returned
           would be visible the next time  the  operator  was  executed.  [perl
           #3105]

       •   Constant  folding and subroutine inlining no longer cause operations
           that would normally return new modifiable scalars  to  return  read-
           only values instead.

       •   Closures  of  the  form  "sub  ()  { $some_variable }" are no longer
           inlined, causing changes to the variable to be ignored by callers of
           the subroutine.  [perl #79908]

       •   Return values of certain operators such as "ref" would sometimes  be
           shared  between  recursive calls to the same subroutine, causing the
           inner call to modify the value returned by "ref" in the outer  call.
           This has been fixed.

       •   "__PACKAGE__" and constants returning a package name or hash key are
           now consistently read-only.  In various previous Perl releases, they
           have become mutable under certain circumstances.

       •   Enabling  "used  once"  warnings  no  longer causes crashes on stash
           circularities created at compile time ("*Foo::Bar::Foo:: = *Foo::").

       •   Undef constants used  in  hash  keys  ("use  constant  u  =>  undef;
           $h{+u}") no longer produce "uninitialized" warnings at compile time.

       •   Modifying  a substitution target inside the substitution replacement
           no longer causes crashes.

       •   The first statement inside a string  eval  used  to  use  the  wrong
           pragma  setting  sometimes  during  constant folding.  "eval 'uc chr
           0xe0'" would randomly  choose  between  Unicode,  byte,  and  locale
           semantics.  This has been fixed.

       •   The  handling of return values of @INC filters (subroutines returned
           by subroutines in @INC) has been fixed in various ways.   Previously
           tied  variables  were  mishandled,  and setting $_ to a reference or
           typeglob could result in crashes.

       •   The "SvPVbyte" XS function has been fixed to work with tied  scalars
           returning  something other than a string.  It used to return utf8 in
           those cases where "SvPV" would.

       •   Perl 5.18.0 inadvertently made "--" and "++" crash  on  dereferenced
           regular expressions, and stopped "++" from flattening vstrings.

       •   "bless" no longer dies with "Can't bless non-reference value" if its
           first argument is a tied reference.

       •   "reset"  with  an  argument  no  longer skips copy-on-write scalars,
           regular expressions, typeglob  copies,  and  vstrings.   Also,  when
           encountering those or read-only values, it no longer skips any array
           or hash with the same name.

       •   "reset"  with  an  argument  now  skips scalars aliased to typeglobs
           ("for $z (*foo) { reset "z" }").  Previously it would corrupt memory
           or crash.

       •   "ucfirst" and "lcfirst" were not respecting the bytes pragma.   This
           was a regression from Perl 5.12. [perl #117355]

       •   Changes  to  "UNIVERSAL::DESTROY"  now  update DESTROY caches in all
           classes, instead of causing classes that have  already  had  objects
           destroyed  to  continue using the old sub.  This was a regression in
           Perl 5.18. [perl #114864]

       •   All known false-positive  occurrences  of  the  deprecation  warning
           "Useless  use  of  '\'; doesn't escape metacharacter '%c'", added in
           Perl 5.18.0, have been removed. [perl #119101]

       •   The value of $^E is now saved across  signal  handlers  on  Windows.
           [perl #85104]

       •   A  lexical  filehandle  (as  in "open my $fh...") is usually given a
           name based on the current package and the name of the variable, e.g.
           "main::$fh".  Under recursion, the filehandle was losing  the  "$fh"
           part of the name.  This has been fixed.

       •   Uninitialized  values  returned  by  XSUBs are no longer exempt from
           uninitialized warnings.  [perl #118693]

       •   "elsif ("")" no longer erroneously produces  a  warning  about  void
           context.  [perl #118753]

       •   Passing  "undef"  to  a subroutine now causes @_ to contain the same
           read-only  undefined  scalar  that  "undef"  returns.   Furthermore,
           "exists  $_[0]"  will  now  return  true  if  "undef"  was the first
           argument.  [perl #7508, #109726]

       •   Passing a non-existent  array  element  to  a  subroutine  does  not
           usually  autovivify  it unless the subroutine modifies its argument.
           This did not work correctly with  negative  indices  and  with  non-
           existent  elements  within the array.  The element would be vivified
           immediately.  The delayed vivification has  been  extended  to  work
           with those.  [perl #118691]

       •   Assigning  references or globs to the scalar returned by $#foo after
           the @foo array has been freed no longer causes assertion failures on
           debugging builds and memory leaks on regular builds.

       •   On 64-bit platforms, large ranges like  1..1000000000000  no  longer
           crash, but eat up all your memory instead.  [perl #119161]

       •   "__DATA__"  now puts the "DATA" handle in the right package, even if
           the current package has been renamed through glob assignment.

       •   When "die", "last", "next", "redo", "goto"  and  "exit"  unwind  the
           scope, it is possible for "DESTROY" recursively to call a subroutine
           or  format  that is currently being exited.  It that case, sometimes
           the lexical variables inside the sub would start out  having  values
           from  the  outer  call,  instead  of being undefined as they should.
           This has been fixed.  [perl #119311]

       •   ${^MPEN} is no longer treated as a synonym for ${^MATCH}.

       •   Perl now tries a little harder to return the correct line number  in
           "(caller)[2]".  [perl #115768]

       •   Line  numbers inside multiline quote-like operators are now reported
           correctly.  [perl #3643]

       •   "#line" directives inside code embedded in quote-like operators  are
           now respected.

       •   Line  numbers  are  now  correct inside the second here-doc when two
           here-doc markers occur on the same line.

       •   An optimization in Perl 5.18 made incorrect  assumptions  causing  a
           bad  interaction  with  the  Devel::CallParser  CPAN module.  If the
           module was  loaded  then  lexical  variables  declared  in  separate
           statements  following  a  my(...)  list  might fail to be cleared on
           scope exit.

       •   &xsub and "goto &xsub" calls now  allow  the  called  subroutine  to
           autovivify elements of @_.

       •   &xsub  and "goto &xsub" no longer crash if *_ has been undefined and
           has no ARRAY entry (i.e. @_ does not exist).

       •   &xsub and "goto &xsub" now work with tied @_.

       •   Overlong identifiers no  longer  cause  a  buffer  overflow  (and  a
           crash).  They started doing so in Perl 5.18.

       •   The  warning  "Scalar value @hash{foo} better written as $hash{foo}"
           now  produces   far   fewer   false   positives.    In   particular,
           @hash{+function_returning_a_list}  and  @hash{ qw "foo bar baz" } no
           longer warn.  The same  applies  to  array  slices.   [perl  #28380,
           #114024]

       •   "$!  = EINVAL; waitpid(0, WNOHANG);" no longer goes into an internal
           infinite loop.  [perl #85228]

       •   A possible segmentation fault in  filehandle  duplication  has  been
           fixed.

       •   A  subroutine  in @INC can return a reference to a scalar containing
           the initial contents of the file.  However, that  scalar  was  freed
           prematurely if not referenced elsewhere, giving random results.

       •   "last"  no  longer  returns  values  that  the  same  statement  has
           accumulated so far, fixing amongst other  things  the  long-standing
           bug that "push @a, last" would try to return the @a, copying it like
           a scalar in the process and resulting in the error, "Bizarre copy of
           ARRAY in last."  [perl #3112]

       •   In  some  cases,  closing  file  handles opened to pipe to or from a
           process, which had been duplicated into  a  standard  handle,  would
           call  perl's  internal waitpid wrapper with a pid of zero.  With the
           fix for [perl  #85228]  this  zero  pid  was  passed  to  "waitpid",
           possibly blocking the process.  This wait for process zero no longer
           occurs.  [perl #119893]

       •   "select"  used  to  ignore  magic  on the fourth (timeout) argument,
           leading to effects such as  "select"  blocking  indefinitely  rather
           than  the  expected  sleep  time.   This  has now been fixed.  [perl
           #120102]

       •   The class name in "for my class $foo" is now parsed  correctly.   In
           the case of the second character of the class name being followed by
           a  digit (e.g. 'a1b') this used to give the error "Missing $ on loop
           variable".  [perl #120112]

       •   Perl 5.18.0 accidentally disallowed "-bareword" under  "use  strict"
           and "use integer".  This has been fixed.  [perl #120288]

       •   "-a" at the start of a line (or a hyphen with any single letter that
           is  not a filetest operator) no longer produces an erroneous 'Use of
           "-a" without parentheses is ambiguous' warning.  [perl #120288]

       •   Lvalue context is now properly propagated into bare blocks and  "if"
           and  "else"  blocks  in  lvalue subroutines.  Previously, arrays and
           hashes would sometimes incorrectly be  flattened  when  returned  in
           lvalue  list  context,  or "Bizarre copy" errors could occur.  [perl
           #119797]

       •   Lvalue context is now propagated to the branches of  "||"  and  "&&"
           (and  their  alphabetic  equivalents,  "or"  and "and").  This means
           "foreach (pos $x || pos $y) {...}" now allows "pos" to  be  modified
           through $_.

       •   "stat"  and "readline" remember the last handle used; the former for
           the special "_" filehandle, the  latter  for  "${^LAST_FH}".   "eval
           "*foo  if  0""  where  *foo  was the last handle passed to "stat" or
           "readline" could cause that handle to be  forgotten  if  the  handle
           were not opened yet.  This has been fixed.

       •   Various  cases  of "delete $::{a}", "delete $::{ENV}" etc. causing a
           crash have been fixed.  [perl #54044]

       •   Setting  $!  to  EACCESS  before  calling  "require"  could   affect
           "require"'s behaviour.  This has been fixed.

       •   The "Can't use \1 to mean $1 in expression" warning message now only
           occurs  on  the  right-hand  (replacement)  part  of a substitution.
           Formerly it could happen in code embedded in the left-hand side,  or
           in any other quote-like operator.

       •   Blessing into a reference ("bless $thisref, $thatref") has long been
           disallowed,  but  magical  scalars  for the second like $/ and those
           tied were exempt.  They no longer are.  [perl #119809]

       •   Blessing into a reference was accidentally allowed in  5.18  if  the
           class  argument  were  a  blessed reference with stale method caches
           (i.e., whose class had had subs defined since the last method call).
           They are disallowed once more, as in 5.16.

       •   "$x->{key}" where $x was declared as "my Class $x" no longer crashes
           if a Class::FIELDS subroutine stub has been declared.

       •   @$obj{'key'} and "${$obj}{key}" used to be exempt from  compile-time
           field  checking  ("No  such  class field"; see fields) but no longer
           are.

       •   A  nonexistent  array  element  with  a  large  index  passed  to  a
           subroutine  that ties the array and then tries to access the element
           no longer results in a crash.

       •   Declaring a subroutine stub named NEGATIVE_INDICES no  longer  makes
           negative  array  indices  crash  when  the current package is a tied
           array class.

       •   Declaring a "require",  "glob",  or  "do"  subroutine  stub  in  the
           CORE::GLOBAL::  package  no longer makes compilation of calls to the
           corresponding functions crash.

       •   Aliasing CORE::GLOBAL:: functions to constants  stopped  working  in
           Perl 5.10 but has now been fixed.

       •   When  `...` or "qx/.../" calls a "readpipe" override, double-quotish
           interpolation now happens, as is the case when there is no override.
           Previously, the presence of an override would make these  quote-like
           operators act like "q{}", suppressing interpolation.  [perl #115330]

       •   "<<<`...`"  here-docs  (with  backticks  as the delimiters) now call
           "readpipe" overrides.  [perl #119827]

       •   &CORE::exit() and &CORE::die() now respect vmsish hints.

       •   Undefining a glob that triggers a DESTROY method that undefines  the
           same  glob  is  now  safe.   It  used  to  produce  "Attempt to free
           unreferenced glob pointer" warnings and leak memory.

       •   If subroutine redefinition ("eval 'sub foo{}'"  or  "newXS"  for  XS
           code)  triggers a DESTROY method on the sub that is being redefined,
           and that method assigns a subroutine to the same slot ("*foo  =  sub
           {}"),  $_[0]  is  no  longer  left  pointing to a freed scalar.  Now
           DESTROY is delayed until the new subroutine has been installed.

       •   On Windows, perl no longer calls CloseHandle() on a  socket  handle.
           This   makes   debugging  easier  on  Windows  by  removing  certain
           irrelevant bad handle exceptions.  It also fixes  a  race  condition
           that  made  socket  functions  randomly  fail in a Perl process with
           multiple   OS   threads,   and    possible    test    failures    in
           dist/IO/t/cachepropagate-tcp.t.  [perl #120091/118059]

       •   Formats  involving UTF-8 encoded strings, or strange vars like ties,
           overloads, or stringified refs (and in recent perls, pure NOK  vars)
           would  generally  do  the  wrong  thing  in  formats when the var is
           treated as a string and  repeatedly  chopped,  as  in  "^<<<~~"  and
           similar.      This     has     now     been     resolved.      [perl
           #33832/45325/113868/119847/119849/119851]

       •   "semctl(..., SETVAL, ...)"  would  set  the  semaphore  to  the  top
           32-bits  of  the  supplied  integer instead of the bottom 32-bits on
           64-bit big-endian systems. [perl #120635]

       •   readdir() now only sets $! on error.  $! is no longer set to "EBADF"
           when then terminating "undef" is read from the directory unless  the
           system call sets $!. [perl #118651]

       •   &CORE::glob  no  longer  causes  an intermittent crash due to perl's
           stack getting corrupted. [perl #119993]

       •   "open" with layers that load modules (e.g.,  "<:encoding(utf8)")  no
           longer runs the risk of crashing due to stack corruption.

       •   Perl  5.18  broke  autoloading  via  "->SUPER::foo"  method calls by
           looking up AUTOLOAD from the current package rather than the current
           package's superclass.  This has been fixed. [perl #120694]

       •   A longstanding  bug  causing  "do  {}  until  CONSTANT",  where  the
           constant  holds  a  true  value, to read unallocated memory has been
           resolved.  This would usually happen after a syntax error.  In  past
           versions of Perl it has crashed intermittently. [perl #72406]

       •   Fix  HP-UX  $! failure. HP-UX strerror() returns an empty string for
           an unknown error code.  This  caused  an  assertion  to  fail  under
           DEBUGGING  builds.   Now  instead,  the  returned  string  for  "$!"
           contains text indicating the code is for an unknown error.

       •   Individually-tied elements of @INC (as in "tie $INC[0]...") are  now
           handled  correctly.  Formerly, whether a sub returned by such a tied
           element would be treated as a sub depended on whether  a  FETCH  had
           occurred previously.

       •   "getc"  on  a  byte-sized  handle after the same "getc" operator had
           been used on a  utf8  handle  used  to  treat  the  bytes  as  utf8,
           resulting in erratic behavior (e.g., malformed UTF-8 warnings).

       •   An initial "{" at the beginning of a format argument line was always
           interpreted  as  the  beginning  of a block prior to v5.18.  In Perl
           v5.18, it started being treated as an ambiguous token.   The  parser
           would  guess  whether  it  was  supposed  to  be  an  anonymous hash
           constructor or a block based on  the  contents.   Now  the  previous
           behaviour has been restored.  [perl #119973]

       •   In  Perl  v5.18  "undef  *_;  goto  &sub"  and "local *_; goto &sub"
           started crashing.  This has been fixed. [perl #119949]

       •   Backticks ( ``  or " qx// ") combined with multiple threads on Win32
           could result in output sent to stdout on one thread  being  captured
           by backticks of an external command in another thread.

           This could occur for pseudo-forked processes too, as Win32's pseudo-
           fork is implemented in terms of threads.  [perl #77672]

       •   "open  $fh,  ">+",  undef" no longer leaks memory when TMPDIR is set
           but points to a directory a temporary file  cannot  be  created  in.
           [perl #120951]

       •   "  for  (  $h{k}  ||  ''  )  " no longer auto-vivifies $h{k}.  [perl
           #120374]

       •   On Windows  machines,  Perl  now  emulates  the  POSIX  use  of  the
           environment  for locale initialization.  Previously, the environment
           was ignored.  See "ENVIRONMENT" in perllocale.

       •   Fixed a  crash  when  destroying  a  self-referencing  GLOB.   [perl
           #121242]

Known Problems
       •   IO::Socket  is  known  to  fail  tests on AIX 5.3.  There is a patch
           <https://github.com/Perl/perl5/issues/13484> in the request tracker,
           #120835, which may be applied to future releases.

       •   The following modules are known to  have  test  failures  with  this
           version  of  Perl.   Patches  have  been  submitted,  so  there will
           hopefully be new releases soon:

           •   Data::Structure::Util version 0.15

           •   HTML::StripScripts version 1.05

           •   List::Gather version 0.08.

Obituary
       Diana Rosa, 27, of Rio de Janeiro, went to her  long  rest  on  May  10,
       2014, along with the plush camel she kept hanging on her computer screen
       all  the  time.  She was a passionate Perl hacker who loved the language
       and its community, and who never missed a Rio.pm event. She was  a  true
       artist,  an  enthusiast about writing code, singing arias and graffiting
       walls. We'll never forget you.

       Greg McCarroll died on August 28, 2013.

       Greg was well known for many good reasons. He was one of the  organisers
       of  the  first YAPC::Europe, which concluded with an unscheduled auction
       where he frantically tried to raise extra money to avoid the  conference
       making  a  loss.  It  was  Greg  who  mistakenly arrived for a london.pm
       meeting a week late; some years later he was the one who sold the choice
       of official meeting date at a YAPC::Europe auction,  and  eventually  as
       glorious  leader of london.pm he got to inherit the irreverent confusion
       that he had created.

       Always helpful, friendly and cheerfully optimistic, you will be  missed,
       but never forgotten.

Acknowledgements
       Perl 5.20.0 represents approximately 12 months of development since Perl
       5.18.0  and contains approximately 470,000 lines of changes across 2,900
       files from 124 authors.

       Excluding auto-generated files, documentation and release  tools,  there
       were  approximately 280,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.20.0:

       Aaron Crane, Abhijit Menon-Sen, Abigail, Abir Viqar, Alan Haggai  Alavi,
       Alan  Hourihane,  Alexander  Voronov,  Alexandr Ciornii, Andy Dougherty,
       Anno Siegel, Aristotle  Pagaltzis,  Arthur  Axel  'fREW'  Schmidt,  Brad
       Gilbert,  Brendan Byrd, Brian Childs, Brian Fraser, Brian Gottreu, Chris
       'BinGOs' Williams, Christian Millour,  Colin  Kuskie,  Craig  A.  Berry,
       Dabrien  'Dabe'  Murphy,  Dagfinn Ilmari Mannsåker, Daniel Dragan, Darin
       McBride, David Golden, David Leadbeater, David  Mitchell,  David  Nicol,
       David  Steinbrunner,  Dennis  Kaarsemaker,  Dominic Hargreaves, Ed Avis,
       Eric Brine, Evan Zacks, Father Chrysostomos, Florian  Ragwitz,  François
       Perrad,  Gavin  Shelley,  Gideon  Israel Dsouza, Gisle Aas, Graham Knop,
       H.Merijn Brand, Hauke D, Heiko Eissfeldt, Hiroo  Hayashi,  Hojung  Youn,
       James E Keenan, Jarkko Hietaniemi, Jerry D. Hedden, Jess Robinson, Jesse
       Luehrs,  Johan  Vromans,  John  Gardiner  Myers,  John Goodyear, John P.
       Linderman, John Peacock, kafka,  Kang-min  Liu,  Karen  Etheridge,  Karl
       Williamson,  Keedi Kim, Kent Fredric, kevin dawson, Kevin Falcone, Kevin
       Ryde, Leon Timmermans, Lukas Mai, Marc Simpson, Marcel  Grünauer,  Marco
       Peereboom,  Marcus  Holland-Moritz,  Mark Jason Dominus, Martin McGrath,
       Matthew Horsfall, Max  Maischein,  Mike  Doherty,  Moritz  Lenz,  Nathan
       Glenn,  Nathan  Trapuzzano,  Neil Bowers, Neil Williams, Nicholas Clark,
       Niels Thykier, Niko Tyni, Olivier  Mengué,  Owain  G.   Ainsworth,  Paul
       Green,  Paul Johnson, Peter John Acklam, Peter Martini, Peter Rabbitson,
       Petr Písař, Philip Boulain, Philip Guenther,  Piotr  Roszatycki,  Rafael
       Garcia-Suarez,  Reini  Urban,  Reuben  Thomas,  Ricardo  Signes,  Ruslan
       Zakirov, Sergey Alekseev, Shirakata Kentaro, Shlomi Fish, Slaven  Rezic,
       Smylers, Steffen Müller, Steve Hay, Sullivan Beck, Thomas Sibley, Tobias
       Leich,  Toby  Inkster,  Tokuhiro  Matsuno, Tom Christiansen, Tom Hukins,
       Tony Cook, Victor Efimov, Viktor Turskyi, Vladimir  Timofeev,  YAMASHINA
       Hio, Yves Orton, Zefram, Zsbán Ambrus, Ævar Arnfjörð Bjarmason.

       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 AUTHORS file in the Perl source distribution.

Reporting Bugs
       If  you  find  what  you  think  is  a bug, you might check the articles
       recently posted to the comp.lang.perl.misc newsgroup and  the  perl  bug
       database at http://rt.perl.org/perlbug/ .  There may also be information
       at http://www.perl.org/ , the Perl Home Page.

       If  you  believe  you  have  an  unreported  bug, please run the 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 "perl -V", will be sent off to perlbug@perl.org to be analysed by the
       Perl porting team.

       If the bug you are reporting has security implications,  which  make  it
       inappropriate  to  send to a publicly archived mailing list, then please
       send it to perl5-security-report@perl.org.   This  points  to  a  closed
       subscription  unarchived  mailing  list,  which  includes  all  the core
       committers, who will be able to help assess the impact of issues, figure
       out a resolution,  and  help  co-ordinate  the  release  of  patches  to
       mitigate  or  fix  the  problem  across  all  platforms on which Perl is
       supported.  Please only use this address for security issues in the Perl
       core, not for modules independently distributed on CPAN.

SEE ALSO
       The Changes file for an explanation of how to view exhaustive details on
       what changed.

       The INSTALL file for how to build Perl.

       The README file for general stuff.

       The Artistic and Copying files for copyright information.

perl v5.40.1                       2026-08-30                  PERL5200DELTA(1)

Generated by dwww version 1.16 on Sat Oct 3 06:51:02 CEST 2026.