{
    "mode": "man",
    "parameter": "perl5200delta",
    "section": "1",
    "url": "https://www.chedong.com/phpMan.php/man/perl5200delta/1/json",
    "generated": "2026-10-10T17:50:54Z",
    "sections": {
        "NAME": {
            "content": "perl5200delta - what is new for perl v5.20.0\n",
            "subsections": []
        },
        "DESCRIPTION": {
            "content": "This document describes differences between the 5.18.0 release and the 5.20.0 release.\n\nIf you are upgrading from an earlier release such as 5.16.0, first read perl5180delta, which\ndescribes differences between 5.16.0 and 5.18.0.\n",
            "subsections": []
        },
        "Core Enhancements": {
            "content": "",
            "subsections": [
                {
                    "name": "Experimental Subroutine signatures",
                    "content": "Declarative syntax to unwrap argument list into lexical variables.  \"sub foo ($a,$b) {...}\"\nchecks the number of arguments and puts the arguments into lexical variables.  Signatures are\nnot equivalent to the existing idiom of \"sub foo { my($a,$b) = @; ... }\".  Signatures are\nonly available by enabling a non-default feature, and generate warnings about being\nexperimental.  The syntactic clash with prototypes is managed by disabling the short\nprototype syntax when signatures are enabled.\n\nSee \"Signatures\" in perlsub for details.\n"
                },
                {
                    "name": "\"sub\"s now take a \"prototype\" attribute",
                    "content": "When declaring or defining a \"sub\", the prototype can now be specified inside of a\n\"prototype\" attribute instead of in parens following the name.\n\nFor example, \"sub foo($$){}\" could be rewritten as \"sub foo : prototype($$){}\".\n"
                },
                {
                    "name": "More consistent prototype parsing",
                    "content": "Multiple semicolons in subroutine prototypes have long been tolerated and treated as a single\nsemicolon.  There was one case where this did not happen.  A subroutine whose prototype\nbegins with \"*\" or \";*\" can affect whether a bareword is considered a method name or sub\ncall.  This now applies also to \";;;*\".\n\nWhitespace has long been allowed inside subroutine prototypes, so \"sub( $ $ )\" is equivalent\nto sub($$), but until now it was stripped when the subroutine was parsed.  Hence, whitespace\nwas not allowed in prototypes set by \"Scalar::Util::setprototype\".  Now it is permitted, and\nthe parser no longer strips whitespace.  This means \"prototype &mysub\" returns the original\nprototype, whitespace and all.\n"
                },
                {
                    "name": "\"rand\" now uses a consistent random number generator",
                    "content": "Previously perl would use a platform specific random number generator, varying between the\nlibc rand(), random() or drand48().\n\nThis meant that the quality of perl's random numbers would vary from platform to platform,\nfrom the 15 bits of rand() on Windows to 48-bits on POSIX platforms such as Linux with\ndrand48().\n\nPerl now uses its own internal drand48() implementation on all platforms.  This does not make\nperl's \"rand\" cryptographically secure.  [perl #115928]\n"
                },
                {
                    "name": "New slice syntax",
                    "content": "The new %hash{...} and %array[...] syntax returns a list of key/value (or index/value) pairs.\nSee \"Key/Value Hash Slices\" in perldata.\n"
                },
                {
                    "name": "Experimental Postfix Dereferencing",
                    "content": "When the \"postderef\" feature is in effect, the following syntactical equivalencies are set\nup:\n\n$sref->$*;  # same as ${ $sref }  # interpolates\n$aref->@*;  # same as @{ $aref }  # interpolates\n$href->%*;  # same as %{ $href }\n$cref->&*;  # same as &{ $cref }\n$gref->;  # same as *{ $gref }\n\n$aref->$#*; # same as $#{ $aref }\n\n$gref->*{ $slot }; # same as *{ $gref }{ $slot }\n\n$aref->@[ ... ];  # same as @$aref[ ... ]  # interpolates\n$href->@{ ... };  # same as @$href{ ... }  # interpolates\n$aref->%[ ... ];  # same as %$aref[ ... ]\n$href->%{ ... };  # same as %$href{ ... }\n\nThose marked as interpolating only interpolate if the associated \"postderefqq\" feature is\nalso enabled.  This feature is experimental and will trigger\n\"experimental::postderef\"-category warnings when used, unless they are suppressed.\n\nFor more information, consult the Postfix Dereference Syntax section of perlref.\n"
                },
                {
                    "name": "Unicode 6.3 now supported",
                    "content": "Perl now supports and is shipped with Unicode 6.3 (though Perl may be recompiled with any\nprevious Unicode release as well).  A detailed list of Unicode 6.3 changes is at\n<http://www.unicode.org/versions/Unicode6.3.0/>.\n"
                },
                {
                    "name": "New \"\\p{Unicode}\" regular expression pattern property",
                    "content": "This is a synonym for \"\\p{Any}\" and matches the set of Unicode-defined code points 0 -\n0x10FFFF.\n"
                },
                {
                    "name": "Better 64-bit support",
                    "content": "On 64-bit platforms, the internal array functions now use 64-bit offsets, allowing Perl\narrays to hold more than 231 elements, if you have the memory available.\n\nThe regular expression engine now supports strings longer than 231 characters.  [perl\n#112790, #116907]\n\nThe functions PerlIOgetbufsiz, PerlIOgetcnt, PerlIOsetcnt and PerlIOsetptrcnt now\nhave SSizet, rather than int, return values and parameters.\n"
                },
                {
                    "name": "\"use locale\" now works on UTF-8 locales",
                    "content": "Until this release, only single-byte locales, such as the ISO 8859 series were supported.\nNow, the increasingly common multi-byte UTF-8 locales are also supported.  A UTF-8 locale is\none in which the character set is Unicode and the encoding is UTF-8.  The POSIX \"LCCTYPE\"\ncategory operations (case changing (like lc(), \"\\U\"), and character classification (\"\\w\",\n\"\\D\", \"qr/[[:punct:]]/\")) under such a locale work just as if not under locale, but instead\nas if under \"use feature 'unicodestrings'\", except taint rules are followed.  Sorting\nremains by code point order in this release.  [perl #56820].\n"
                },
                {
                    "name": "\"use locale\" now compiles on systems without locale ability",
                    "content": "Previously doing this caused the program to not compile.  Within its scope the program\nbehaves as if in the \"C\" locale.  Thus programs written for platforms that support locales\ncan run on locale-less platforms without change.  Attempts to change the locale away from the\n\"C\" locale will, of course, fail.\n"
                },
                {
                    "name": "More locale initialization fallback options",
                    "content": "If there was an error with locales during Perl start-up, it immediately gave up and tried to\nuse the \"C\" locale.  Now it first tries using other locales given by the environment\nvariables, as detailed in \"ENVIRONMENT\" in perllocale.  For example, if \"LCALL\" and \"LANG\"\nare both set, and using the \"LCALL\" locale fails, Perl will now try the \"LANG\" locale, and\nonly if that fails, will it fall back to \"C\".  On Windows machines, Perl will try, ahead of\nusing \"C\", the system default locale if all the locales given by environment variables fail.\n"
                },
                {
                    "name": "\"-DL\" runtime option now added for tracing locale setting",
                    "content": "This is designed for Perl core developers to aid in field debugging bugs regarding locales.\n"
                },
                {
                    "name": "-F now implies -a and -a implies -n",
                    "content": "Previously -F without -a was a no-op, and -a without -n or -p was a no-op, with this change,\nif you supply -F then both -a and -n are implied and if you supply -a then -n is implied.\n\nYou can still use -p for its extra behaviour. [perl #116190]\n",
                    "flag": "-n"
                },
                {
                    "name": "$a and $b warnings exemption",
                    "content": "The special variables $a and $b, used in \"sort\", are now exempt from \"used once\" warnings,\neven where \"sort\" is not used.  This makes it easier for CPAN modules to provide functions\nusing $a and $b for similar purposes.  [perl #120462]\n"
                }
            ]
        },
        "Security": {
            "content": "",
            "subsections": [
                {
                    "name": "Avoid possible read of free()d memory during parsing",
                    "content": "It was possible that free()d memory could be read during parsing in the unusual circumstance\nof the Perl program ending with a heredoc and the last line of the file on disk having no\nterminating newline character.  This has now been fixed.\n"
                }
            ]
        },
        "Incompatible Changes": {
            "content": "",
            "subsections": [
                {
                    "name": "\"do\" can no longer be used to call subroutines",
                    "content": "The \"do SUBROUTINE(LIST)\" form has resulted in a deprecation warning since Perl v5.0.0, and\nis now a syntax error.\n"
                },
                {
                    "name": "Quote-like escape changes",
                    "content": "The character after \"\\c\" in a double-quoted string (\"...\" or qq(...))  or regular expression\nmust now be a printable character and may not be \"{\".\n\nA literal \"{\" after \"\\B\" or \"\\b\" is now fatal.\n\nThese were deprecated in perl v5.14.0.\n"
                },
                {
                    "name": "Tainting happens under more circumstances; now conforms to documentation",
                    "content": "This affects regular expression matching and changing the case of a string (\"lc\", \"\\U\", etc.)\nwithin the scope of \"use locale\".  The result is now tainted based on the operation, no\nmatter what the contents of the string were, as the documentation (perlsec, \"SECURITY\" in\nperllocale) indicates it should.  Previously, for the case change operation, if the string\ncontained no characters whose case change could be affected by the locale, the result would\nnot be tainted.  For example, the result of uc() on an empty string or one containing only\nabove-Latin1 code points is now tainted, and wasn't before.  This leads to more consistent\ntainting results.  Regular expression patterns taint their non-binary results (like $&, $2)\nif and only if the pattern contains elements whose matching depends on the current\n(potentially tainted) locale.  Like the case changing functions, the actual contents of the\nstring being matched now do not matter, whereas formerly it did.  For example, if the pattern\ncontains a \"\\w\", the results will be tainted even if the match did not have to use that\nportion of the pattern to succeed or fail, because what a \"\\w\" matches depends on locale.\nHowever, for example, a \".\" in a pattern will not enable tainting, because the dot matches\nany single character, and what the current locale is doesn't change in any way what matches\nand what doesn't.\n"
                },
                {
                    "name": "\"\\p{}\", \"\\P{}\" matching has changed for non-Unicode code points.",
                    "content": "\"\\p{}\" and \"\\P{}\" are defined by Unicode only on Unicode-defined code points (\"U+0000\"\nthrough \"U+10FFFF\").  Their behavior on matching these legal Unicode code points is\nunchanged, but there are changes for code points 0x110000 and above.  Previously, Perl\ntreated the result of matching \"\\p{}\" and \"\\P{}\" against these as \"undef\", which translates\ninto \"false\".  For \"\\P{}\", this was then complemented into \"true\".  A warning was supposed to\nbe raised when this happened.  However, various optimizations could prevent the warning, and\nthe results were often counter-intuitive, with both a match and its seeming complement being\nfalse.  Now all non-Unicode code points are treated as typical unassigned Unicode code\npoints.  This generally is more Do-What-I-Mean.  A warning is raised only if the results are\narguably different from a strict Unicode approach, and from what Perl used to do.  Code that\nneeds to be strictly Unicode compliant can make this warning fatal, and then Perl always\nraises the warning.\n\nDetails are in \"Beyond Unicode code points\" in perlunicode.\n"
                },
                {
                    "name": "\"\\p{All}\" has been expanded to match all possible code points",
                    "content": "The Perl-defined regular expression pattern element \"\\p{All}\", unused on CPAN, used to match\njust the Unicode code points; now it matches all possible code points; that is, it is\nequivalent to \"qr/./s\".  Thus \"\\p{All}\" is no longer synonymous with \"\\p{Any}\", which\ncontinues to match just the Unicode code points, as Unicode says it should.\n"
                },
                {
                    "name": "Data::Dumper's output may change",
                    "content": "Depending on the data structures dumped and the settings set for Data::Dumper, the dumped\noutput may have changed from previous versions.\n\nIf you have tests that depend on the exact output of Data::Dumper, they may fail.\n\nTo avoid this problem in your code, test against the data structure from evaluating the\ndumped structure, instead of the dump itself.\n"
                },
                {
                    "name": "Locale decimal point character no longer leaks outside of \"use locale\" scope",
                    "content": "This is actually a bug fix, but some code has come to rely on the bug being present, so this\nchange is listed here.  The current locale that the program is running under is not supposed\nto be visible to Perl code except within the scope of a \"use locale\".  However, until now\nunder certain circumstances, the character used for a decimal point (often a comma) leaked\noutside the scope.  If your code is affected by this change, simply add a \"use locale\".\n"
                },
                {
                    "name": "Assignments of Windows sockets error codes to $! now prefer _errno.h_ values over WSAGetLastError()",
                    "content": ""
                },
                {
                    "name": "values",
                    "content": "In previous versions of Perl, Windows sockets error codes as returned by WSAGetLastError()\nwere assigned to $!, and some constants such as ECONNABORTED, not in errno.h in VC++ (or the\nvarious Windows ports of gcc) were defined to corresponding WSAE* values to allow $! to be\ntested against the E* constants exported by Errno and POSIX.\n\nThis worked well until VC++ 2010 and later, which introduced new E* constants with values >\n100 into errno.h, including some being (re)defined by perl to WSAE* values.  That caused\nproblems when linking XS code against other libraries which used the original definitions of\nerrno.h constants.\n\nTo avoid this incompatibility, perl now maps WSAE* error codes to E* values where possible,\nand assigns those values to $!.  The E* constants exported by Errno and POSIX are updated to\nmatch so that testing $! against them, wherever previously possible, will continue to work as\nexpected, and all E* constants found in errno.h are now exported from those modules with\ntheir original errno.h values.\n\nIn order to avoid breakage in existing Perl code which assigns WSAE* values to $!, perl now\nintercepts the assignment and performs the same mapping to E* values as it uses internally\nwhen assigning to $! itself.\n\nHowever, one backwards-incompatibility remains: existing Perl code which compares $! against\nthe numeric values of the WSAE* error codes that were previously assigned to $! will now be\nbroken in those cases where a corresponding E* value has been assigned instead.  This is only\nan issue for those E* values < 100, which were always exported from Errno and POSIX with\ntheir original errno.h values, and therefore could not be used for WSAE* error code tests\n(e.g. WSAEINVAL is 10022, but the corresponding EINVAL is 22).  (E* values > 100, if present,\nwere redefined to WSAE* values anyway, so compatibility can be achieved by using the E*\nconstants, which will work both before and after this change, albeit using different numeric\nvalues under the hood.)\n"
                },
                {
                    "name": "Functions \"PerlIO_vsprintf\" and \"PerlIO_sprintf\" have been removed",
                    "content": "These two functions, undocumented, unused in CPAN, and problematic, have been removed.\n"
                }
            ]
        },
        "Deprecations": {
            "content": "",
            "subsections": [
                {
                    "name": "The \"/\\C/\" character class",
                    "content": "The \"/\\C/\" regular expression character class is deprecated. From perl 5.22 onwards it will\ngenerate a warning, and from perl 5.24 onwards it will be a regular expression compiler\nerror. If you need to examine the individual bytes that make up a UTF8-encoded character,\nthen use utf8::encode() on the string (or a copy) first.\n"
                },
                {
                    "name": "Literal control characters in variable names",
                    "content": "This deprecation affects things like $\\cT, where \\cT is a literal control (such as a \"NAK\" or\n\"NEGATIVE ACKNOWLEDGE\" character) in the source code.  Surprisingly, it appears that\noriginally this was intended as the canonical way of accessing variables like $^T, with the\ncaret form only being added as an alternative.\n\nThe literal control form is being deprecated for two main reasons.  It has what are likely\nunfixable bugs, such as $\\cI not working as an alias for $^I, and their usage not being\nportable to non-ASCII platforms: While $^T will work everywhere, \\cT is whitespace in EBCDIC.\n[perl #119123]\n"
                },
                {
                    "name": "References to non-integers and non-positive integers in $/",
                    "content": "Setting $/ to a reference to zero or a reference to a negative integer is now deprecated, and\nwill behave exactly as though it was set to \"undef\".  If you want slurp behavior set $/ to\n\"undef\" explicitly.\n\nSetting $/ to a reference to a non integer is now forbidden and will throw an error. Perl has\nnever documented what would happen in this context and while it used to behave the same as\nsetting $/ to the address of the references in future it may behave differently, so we have\nforbidden this usage.\n"
                },
                {
                    "name": "Character matching routines in POSIX",
                    "content": "Use of any of these functions in the \"POSIX\" module is now deprecated: \"isalnum\", \"isalpha\",\n\"iscntrl\", \"isdigit\", \"isgraph\", \"islower\", \"isprint\", \"ispunct\", \"isspace\", \"isupper\", and\n\"isxdigit\".  The functions are buggy and don't work on UTF-8 encoded strings.  See their\nentries in POSIX for more information.\n\nA warning is raised on the first call to any of them from each place in the code that they\nare called.  (Hence a repeated statement in a loop will raise just the one warning.)\n"
                },
                {
                    "name": "Interpreter-based threads are now discouraged",
                    "content": "The \"interpreter-based threads\" provided by Perl are not the fast, lightweight system for\nmultitasking that one might expect or hope for.  Threads are implemented in a way that make\nthem easy to misuse.  Few people know how to use them correctly or will be able to provide\nhelp.\n\nThe use of interpreter-based threads in perl is officially discouraged.\n"
                },
                {
                    "name": "Module removals",
                    "content": "The following modules will be removed from the core distribution in a future release, and\nwill at that time need to be installed from CPAN.  Distributions on CPAN which require these\nmodules will need to list them as prerequisites.\n\nThe core versions of these modules will now issue \"deprecated\"-category warnings to alert you\nto this fact.  To silence these deprecation warnings, install the modules in question from\nCPAN.\n\nNote that the planned removal of these modules from core does not reflect a judgement about\nthe quality of the code and should not be taken as a suggestion that their use be halted.\nTheir disinclusion from core primarily hinges on their necessity to bootstrapping a fully\nfunctional, CPAN-capable Perl installation, not on concerns over their design.\n\nCGI and its associated CGI:: packages\ninc::latest\nPackage::Constants\nModule::Build and its associated Module::Build:: packages\n"
                },
                {
                    "name": "Utility removals",
                    "content": "The  following  utilities will be removed from the core distribution in a future release, and\nwill at that time need to be installed from CPAN.\n\nfind2perl\ns2p\na2p\n"
                }
            ]
        },
        "Performance Enhancements": {
            "content": "•   Perl has a new copy-on-write mechanism that avoids the need to copy the  internal  string\nbuffer when assigning from one scalar to another. This makes copying large strings appear\nmuch faster.  Modifying one of the two (or more) strings after an assignment will force a\ncopy internally. This makes it unnecessary to pass strings by reference for efficiency.\n\nThis  feature  was  already available in 5.18.0, but wasn't enabled by default. It is the\ndefault now, and so you no longer need build perl with the Configure argument:\n\n-Accflags=-DPERLNEWCOPYONWRITE\n\nIt can be disabled (for now) in a perl build with:\n\n-Accflags=-DPERLNOCOW\n\nOn some operating systems Perl can be compiled in such a way that any attempt  to  modify\nstring  buffers  shared  by  multiple  SVs will crash.  This way XS authors can test that\ntheir modules handle copy-on-write scalars correctly.  See \"Copy on  Write\"  in  perlguts\nfor detail.\n\n•   Perl  has  an optimizer for regular expression patterns.  It analyzes the pattern to find\nthings such as the minimum length a string has to  be  to  match,  etc.   It  now  better\nhandles code points that are above the Latin1 range.\n\n•   Executing  a  regex that contains the \"^\" anchor (or its variant under the \"/m\" flag) has\nbeen made much faster in several situations.\n\n•   Precomputed hash values are now used in more places during method lookup.\n\n•   Constant hash key lookups ($hash{key} as  opposed  to  $hash{$key})  have  long  had  the\ninternal  hash value computed at compile time, to speed up lookup.  This optimisation has\nonly now been applied to hash slices as well.\n\n•   Combined \"and\" and \"or\" operators in void context, like those generated for  \"unless  ($a\n&&  $b)\" and \"if ($a || b)\" now short circuit directly to the end of the statement. [perl\n#120128]\n\n•   In certain situations, when \"return\" is the last statement in a subroutine's main  scope,\nit will be optimized out. This means code like:\n\nsub baz { return $cat; }\n\nwill now behave like:\n\nsub baz { $cat; }\n\nwhich is notably faster.\n\n[perl #120765]\n\n•   Code like:\n\nmy $x; # or @x, %x\nmy $y;\n\nis now optimized to:\n\nmy ($x, $y);\n\nIn  combination  with  the padrange optimization introduced in v5.18.0, this means longer\nuninitialized my variable statements are also optimized, so:\n\nmy $x; my @y; my %z;\n\nbecomes:\n\nmy ($x, @y, %z);\n\n[perl #121077]\n\n•   The creation of certain sorts of lists, including array and hash slices, is now faster.\n\n•   The optimisation for arrays indexed with a small constant  integer  is  now  applied  for\nintegers in the range -128..127, rather than 0..255. This should speed up Perl code using\nexpressions like $x[-1], at the expense of (presumably much rarer) code using expressions\nlike $x[200].\n\n•   The  first  iteration  over  a large hash (using \"keys\" or \"each\") is now faster. This is\nachieved by preallocating the hash's internal iterator state, rather than lazily creating\nit when the hash is first iterated. (For small hashes, the iterator is still created only\nwhen first needed. The assumption is that small hashes are more  likely  to  be  used  as\nobjects,  and therefore never allocated. For large hashes, that's less likely to be true,\nand the cost of allocating the iterator is swamped by the cost of  allocating  space  for\nthe hash itself.)\n\n•   When  doing  a  global  regex  match  on  a  string that came from the \"readline\" or \"<>\"\noperator, the data is no longer copied unnecessarily.  [perl #121259]\n\n•   Dereferencing (as in \"$obj->[0]\" or \"$obj->{k}\") is now faster when $obj is  an  instance\nof  a  class  that  has overloaded methods, but doesn't overload any of the dereferencing\nmethods \"@{}\", \"%{}\", and so on.\n\n•   Perl's optimiser  no  longer  skips  optimising  code  that  follows  certain  \"eval  {}\"\nexpressions (including those with an apparent infinite loop).\n\n•   The  implementation  now  does  a  better  job  of  avoiding meaningless work at runtime.\nInternal effect-free  \"null\"  operations  (created  as  a  side-effect  of  parsing  Perl\nprograms)  are  normally deleted during compilation. That deletion is now applied in some\nsituations that weren't previously handled.\n\n•   Perl now does less disk I/O when dealing with Unicode properties that cover up  to  three\nranges of consecutive code points.\n",
            "subsections": []
        },
        "Modules and Pragmata": {
            "content": "",
            "subsections": [
                {
                    "name": "New Modules and Pragmata",
                    "content": "•   experimental 0.007 has been added to the Perl core.\n\n•   IO::Socket::IP 0.29 has been added to the Perl core.\n"
                },
                {
                    "name": "Updated Modules and Pragmata",
                    "content": "•   Archive::Tar has been upgraded from version 1.90 to 1.96.\n\n•   arybase has been upgraded from version 0.06 to 0.07.\n\n•   Attribute::Handlers has been upgraded from version 0.94 to 0.96.\n\n•   attributes has been upgraded from version 0.21 to 0.22.\n\n•   autodie has been upgraded from version 2.13 to 2.23.\n\n•   AutoLoader has been upgraded from version 5.73 to 5.74.\n\n•   autouse has been upgraded from version 1.07 to 1.08.\n\n•   B has been upgraded from version 1.42 to 1.48.\n\n•   B::Concise has been upgraded from version 0.95 to 0.992.\n\n•   B::Debug has been upgraded from version 1.18 to 1.19.\n\n•   B::Deparse has been upgraded from version 1.20 to 1.26.\n\n•   base has been upgraded from version 2.18 to 2.22.\n\n•   Benchmark has been upgraded from version 1.15 to 1.18.\n\n•   bignum has been upgraded from version 0.33 to 0.37.\n\n•   Carp has been upgraded from version 1.29 to 1.3301.\n\n•   CGI  has  been  upgraded  from  version 3.63 to 3.65.  NOTE: CGI is deprecated and may be\nremoved from a future version of Perl.\n\n•   charnames has been upgraded from version 1.36 to 1.40.\n\n•   Class::Struct has been upgraded from version 0.64 to 0.65.\n\n•   Compress::Raw::Bzip2 has been upgraded from version 2.060 to 2.064.\n\n•   Compress::Raw::Zlib has been upgraded from version 2.060 to 2.065.\n\n•   Config::Perl::V has been upgraded from version 0.17 to 0.20.\n\n•   constant has been upgraded from version 1.27 to 1.31.\n\n•   CPAN has been upgraded from version 2.00 to 2.05.\n\n•   CPAN::Meta has been upgraded from version 2.120921 to 2.140640.\n\n•   CPAN::Meta::Requirements has been upgraded from version 2.122 to 2.125.\n\n•   CPAN::Meta::YAML has been upgraded from version 0.008 to 0.012.\n\n•   Data::Dumper has been upgraded from version 2.145 to 2.151.\n\n•   DB has been upgraded from version 1.04 to 1.07.\n\n•   DBFile has been upgraded from version 1.827 to 1.831.\n\n•   DBMFilter has been upgraded from version 0.05 to 0.06.\n\n•   deprecate has been upgraded from version 0.02 to 0.03.\n\n•   Devel::Peek has been upgraded from version 1.11 to 1.16.\n\n•   Devel::PPPort has been upgraded from version 3.20 to 3.21.\n\n•   diagnostics has been upgraded from version 1.31 to 1.34.\n\n•   Digest::MD5 has been upgraded from version 2.52 to 2.53.\n\n•   Digest::SHA has been upgraded from version 5.84 to 5.88.\n\n•   DynaLoader has been upgraded from version 1.18 to 1.25.\n\n•   Encode has been upgraded from version 2.49 to 2.60.\n\n•   encoding has been upgraded from version 2.601 to 2.12.\n\n•   English has been upgraded from version 1.06 to 1.09.\n\n$OLDPERLVERSION was added as an alias of $].\n\n•   Errno has been upgraded from version 1.18 to 1.2003.\n\n•   Exporter has been upgraded from version 5.68 to 5.70.\n\n•   ExtUtils::CBuilder has been upgraded from version 0.280210 to 0.280216.\n\n•   ExtUtils::Command has been upgraded from version 1.17 to 1.18.\n\n•   ExtUtils::Embed has been upgraded from version 1.30 to 1.32.\n\n•   ExtUtils::Install has been upgraded from version 1.59 to 1.67.\n\n•   ExtUtils::MakeMaker has been upgraded from version 6.66 to 6.98.\n\n•   ExtUtils::Miniperl has been upgraded from version  to 1.01.\n\n•   ExtUtils::ParseXS has been upgraded from version 3.18 to 3.24.\n\n•   ExtUtils::Typemaps has been upgraded from version 3.19 to 3.24.\n\n•   ExtUtils::XSSymSet has been upgraded from version 1.2 to 1.3.\n\n•   feature has been upgraded from version 1.32 to 1.36.\n\n•   fields has been upgraded from version 2.16 to 2.17.\n\n•   File::Basename has been upgraded from version 2.84 to 2.85.\n\n•   File::Copy has been upgraded from version 2.26 to 2.29.\n\n•   File::DosGlob has been upgraded from version 1.10 to 1.12.\n\n•   File::Fetch has been upgraded from version 0.38 to 0.48.\n\n•   File::Find has been upgraded from version 1.23 to 1.27.\n\n•   File::Glob has been upgraded from version 1.20 to 1.23.\n\n•   File::Spec has been upgraded from version 3.40 to 3.47.\n\n•   File::Temp has been upgraded from version 0.23 to 0.2304.\n\n•   FileCache has been upgraded from version 1.08 to 1.09.\n\n•   Filter::Simple has been upgraded from version 0.89 to 0.91.\n\n•   Filter::Util::Call has been upgraded from version 1.45 to 1.49.\n\n•   Getopt::Long has been upgraded from version 2.39 to 2.42.\n\n•   Getopt::Std has been upgraded from version 1.07 to 1.10.\n\n•   Hash::Util::FieldHash has been upgraded from version 1.10 to 1.15.\n\n•   HTTP::Tiny has been upgraded from version 0.025 to 0.043.\n\n•   I18N::Langinfo has been upgraded from version 0.10 to 0.11.\n\n•   I18N::LangTags has been upgraded from version 0.39 to 0.40.\n\n•   if has been upgraded from version 0.0602 to 0.0603.\n\n•   inc::latest has been upgraded from  version  0.4003  to  0.4205.   NOTE:  inc::latest  is\ndeprecated and may be removed from a future version of Perl.\n\n•   integer has been upgraded from version 1.00 to 1.01.\n\n•   IO has been upgraded from version 1.28 to 1.31.\n\n•   IO::Compress::Gzip and friends have been upgraded from version 2.060 to 2.064.\n\n•   IPC::Cmd has been upgraded from version 0.80 to 0.92.\n\n•   IPC::Open3 has been upgraded from version 1.13 to 1.16.\n\n•   IPC::SysV has been upgraded from version 2.03 to 2.04.\n\n•   JSON::PP has been upgraded from version 2.27202 to 2.27203.\n\n•   List::Util has been upgraded from version 1.27 to 1.38.\n\n•   locale has been upgraded from version 1.02 to 1.03.\n\n•   Locale::Codes has been upgraded from version 3.25 to 3.30.\n\n•   Locale::Maketext has been upgraded from version 1.23 to 1.25.\n\n•   Math::BigInt has been upgraded from version 1.9991 to 1.9993.\n\n•   Math::BigInt::FastCalc has been upgraded from version 0.30 to 0.31.\n\n•   Math::BigRat has been upgraded from version 0.2604 to 0.2606.\n\n•   MIME::Base64 has been upgraded from version 3.13 to 3.14.\n\n•   Module::Build  has  been  upgraded from version 0.4003 to 0.4205.  NOTE: Module::Build is\ndeprecated and may be removed from a future version of Perl.\n\n•   Module::CoreList has been upgraded from version 2.89 to 3.10.\n\n•   Module::Load has been upgraded from version 0.24 to 0.32.\n\n•   Module::Load::Conditional has been upgraded from version 0.54 to 0.62.\n\n•   Module::Metadata has been upgraded from version 1.000011 to 1.000019.\n\n•   mro has been upgraded from version 1.11 to 1.16.\n\n•   Net::Ping has been upgraded from version 2.41 to 2.43.\n\n•   Opcode has been upgraded from version 1.25 to 1.27.\n\n•   Package::Constants has been upgraded from version 0.02 to 0.04.  NOTE: Package::Constants\nis deprecated and may be removed from a future version of Perl.\n\n•   Params::Check has been upgraded from version 0.36 to 0.38.\n\n•   parent has been upgraded from version 0.225 to 0.228.\n\n•   Parse::CPAN::Meta has been upgraded from version 1.4404 to 1.4414.\n\n•   Perl::OSType has been upgraded from version 1.003 to 1.007.\n\n•   perlfaq has been upgraded from version 5.0150042 to 5.0150044.\n\n•   PerlIO has been upgraded from version 1.07 to 1.09.\n\n•   PerlIO::encoding has been upgraded from version 0.16 to 0.18.\n\n•   PerlIO::scalar has been upgraded from version 0.16 to 0.18.\n\n•   PerlIO::via has been upgraded from version 0.12 to 0.14.\n\n•   Pod::Escapes has been upgraded from version 1.04 to 1.06.\n\n•   Pod::Functions has been upgraded from version 1.06 to 1.08.\n\n•   Pod::Html has been upgraded from version 1.18 to 1.21.\n\n•   Pod::Parser has been upgraded from version 1.60 to 1.62.\n\n•   Pod::Perldoc has been upgraded from version 3.19 to 3.23.\n\n•   Pod::Usage has been upgraded from version 1.61 to 1.63.\n\n•   POSIX has been upgraded from version 1.32 to 1.3803.\n\n•   re has been upgraded from version 0.23 to 0.26.\n\n•   Safe has been upgraded from version 2.35 to 2.37.\n\n•   Scalar::Util has been upgraded from version 1.27 to 1.38.\n\n•   SDBMFile has been upgraded from version 1.09 to 1.11.\n\n•   Socket has been upgraded from version 2.009 to 2.013.\n\n•   Storable has been upgraded from version 2.41 to 2.49.\n\n•   strict has been upgraded from version 1.07 to 1.08.\n\n•   subs has been upgraded from version 1.01 to 1.02.\n\n•   Sys::Hostname has been upgraded from version 1.17 to 1.18.\n\n•   Sys::Syslog has been upgraded from version 0.32 to 0.33.\n\n•   Term::Cap has been upgraded from version 1.13 to 1.15.\n\n•   Term::ReadLine has been upgraded from version 1.12 to 1.14.\n\n•   Test::Harness has been upgraded from version 3.26 to 3.30.\n\n•   Test::Simple has been upgraded from version 0.98 to 1.001002.\n\n•   Text::ParseWords has been upgraded from version 3.28 to 3.29.\n\n•   Text::Tabs has been upgraded from version 2012.0818 to 2013.0523.\n\n•   Text::Wrap has been upgraded from version 2012.0818 to 2013.0523.\n\n•   Thread has been upgraded from version 3.02 to 3.04.\n\n•   Thread::Queue has been upgraded from version 3.02 to 3.05.\n\n•   threads has been upgraded from version 1.86 to 1.93.\n\n•   threads::shared has been upgraded from version 1.43 to 1.46.\n\n•   Tie::Array has been upgraded from version 1.05 to 1.06.\n\n•   Tie::File has been upgraded from version 0.99 to 1.00.\n\n•   Tie::Hash has been upgraded from version 1.04 to 1.05.\n\n•   Tie::Scalar has been upgraded from version 1.02 to 1.03.\n\n•   Tie::StdHandle has been upgraded from version 4.3 to 4.4.\n\n•   Time::HiRes has been upgraded from version 1.9725 to 1.9726.\n\n•   Time::Piece has been upgraded from version 1.2001 to 1.27.\n\n•   Unicode::Collate has been upgraded from version 0.97 to 1.04.\n\n•   Unicode::Normalize has been upgraded from version 1.16 to 1.17.\n\n•   Unicode::UCD has been upgraded from version 0.51 to 0.57.\n\n•   utf8 has been upgraded from version 1.10 to 1.13.\n\n•   version has been upgraded from version 0.9902 to 0.9908.\n\n•   vmsish has been upgraded from version 1.03 to 1.04.\n\n•   warnings has been upgraded from version 1.18 to 1.23.\n\n•   Win32 has been upgraded from version 0.47 to 0.49.\n\n•   XS::Typemap has been upgraded from version 0.10 to 0.13.\n\n•   XSLoader has been upgraded from version 0.16 to 0.17.\n"
                }
            ]
        },
        "Documentation": {
            "content": "",
            "subsections": [
                {
                    "name": "New Documentation",
                    "content": "perlrepository\n\nThis document was removed (actually, renamed perlgit and given  a  major  overhaul)  in  Perl\nv5.14,  causing Perl documentation websites to show the now out of date version in Perl v5.12\nas the latest version.  It has now been restored in stub form, directing readers  to  current\ninformation.\n"
                },
                {
                    "name": "Changes to Existing Documentation",
                    "content": "perldata\n\n•   New  sections  have  been added to document the new index/value array slice and key/value\nhash slice syntax.\n\nperldebguts\n\n•   The \"DB::goto\" and \"DB::lsub\" debugger subroutines are now documented.  [perl #77680]\n\nperlexperiment\n\n•   \"\\s\" matching \"\\cK\" is marked experimental.\n\n•   ithreads were accepted in v5.8.0 (but are discouraged as of v5.20.0).\n\n•   Long doubles are not considered experimental.\n\n•   Code  in  regular  expressions,  regular  expression  backtracking  verbs,   and   lvalue\nsubroutines  are  no  longer  listed  as  experimental.   (This  also  affects perlre and\nperlsub.)\n\nperlfunc\n\n•   \"chop\" and \"chomp\" now note that they can reset the hash iterator.\n\n•   \"exec\"'s handling of arguments is now more clearly documented.\n\n•   \"eval EXPR\" now has caveats about expanding floating point numbers in some locales.\n\n•   \"goto EXPR\" is now documented to handle an expression that evaluates to a code  reference\nas if it was \"goto &$coderef\".  This behavior is at least ten years old.\n\n•   Since Perl v5.10, it has been possible for subroutines in @INC to return a reference to a\nscalar holding initial source code to prepend to the file.  This is now documented.\n\n•   The  documentation of \"ref\" has been updated to recommend the use of \"blessed\", \"isa\" and\n\"reftype\" when dealing with references to blessed objects.\n\nperlguts\n\n•   Numerous minor changes have been made to reflect changes made to the  perl  internals  in\nthis release.\n\n•   New sections on Read-Only Values and Copy on Write have been added.\n\nperlhack\n\n•   The Super Quick Patch Guide section has been updated.\n\nperlhacktips\n\n•   The documentation has been updated to include some more examples of \"gdb\" usage.\n\nperllexwarn\n\n•   The  perllexwarn  documentation  used  to  describe  the  hierarchy of warning categories\nunderstood by the warnings pragma. That description has now been moved  to  the  warnings\ndocumentation  itself,  leaving  perllexwarn  as  a  stub  that points to it. This change\nconsolidates all documentation for lexical warnings in a single place.\n\nperllocale\n\n•   The documentation now mentions fc()  and  \"\\F\",  and  includes  many  clarifications  and\ncorrections in general.\n\nperlop\n\n•   The  language  design  of  Perl has always called for monomorphic operators.  This is now\nmentioned explicitly.\n\nperlopentut\n\n•   The \"open\" tutorial has been completely rewritten by Tom Christiansen, and now focuses on\ncovering only the basics, rather than providing a comprehensive reference to  all  things\nopenable.   This  rewrite  came  as  the result of a vigorous discussion on perl5-porters\nkicked off by a set of improvements  written  by  Alexander  Hartmaier  to  the  existing\nperlopentut.   A  \"more than you ever wanted to know about \"open\"\" document may follow in\nsubsequent versions of perl.\n\nperlre\n\n•   The fact that the regexp engine makes no effort to call (?{}) and (??{})  constructs  any\nspecified number of times (although it will basically DWIM in case of a successful match)\nhas been documented.\n\n•   The \"/r\" modifier (for non-destructive substitution) is now documented. [perl #119151]\n\n•   The documentation for \"/x\" and \"(?# comment)\" has been expanded and clarified.\n\nperlreguts\n\n•   The documentation has been updated in the light of recent changes to regcomp.c.\n\nperlsub\n\n•   The  need to predeclare recursive functions with prototypes in order for the prototype to\nbe honoured in the recursive call is now documented. [perl #2726]\n\n•   A list of subroutine names used by  the  perl  implementation  is  now  included.   [perl\n#77680]\n\nperltrap\n\n•   There is now a JavaScript section.\n\nperlunicode\n\n•   The documentation has been updated to reflect \"BidiClass\" changes in Unicode 6.3.\n\nperlvar\n\n•   A  new  section explaining the performance issues of $`, $& and $', including workarounds\nand changes in different versions of Perl, has been added.\n\n•   Three English variable names which have long been documented but do  not  actually  exist\nhave  been  removed  from  the  documentation.   These were $OLDPERLVERSION, $OFMT, and\n$ARRAYBASE.\n\n(Actually, \"OLDPERLVERSION\" does exist,  starting  with  this  revision,  but  remained\nundocumented until perl 5.22.0.)\n\nperlxs\n\n•   Several problems in the \"MYCXT\" example have been fixed.\n"
                }
            ]
        },
        "Diagnostics": {
            "content": "The  following  additions  or changes have been made to diagnostic output, including warnings\nand fatal error messages.  For the complete list of diagnostic messages, see perldiag.\n",
            "subsections": [
                {
                    "name": "New Diagnostics",
                    "content": "New Errors\n\n•   delete argument is index/value array slice, use array slice\n\n(F) You used index/value array slice syntax (%array[...]) as the  argument  to  \"delete\".\nYou probably meant @array[...] with an @ symbol instead.\n\n•   delete argument is key/value hash slice, use hash slice\n\n(F)  You  used key/value hash slice syntax (%hash{...}) as the argument to \"delete\".  You\nprobably meant @hash{...} with an @ symbol instead.\n\n•   Magical list constants are not supported\n\n(F) You assigned a magical array to a stash element, and then tried to use the subroutine\nfrom the same slot.  You are asking Perl to do something it cannot do, details subject to\nchange between Perl versions.\n\n•   Added Setting $/ to a %s reference is forbidden\n\nNew Warnings\n\n•   %s on reference is experimental:\n\nThe \"auto-deref\" feature is experimental.\n\nStarting in v5.14.0, it was possible to use push, pop, keys, and other built-in functions\nnot only on aggregate types, but on references to them.  The feature was not deployed  to\nits   original   intended   specification,  and  now  may  become  redundant  to  postfix\ndereferencing.  It has always been categorized as an experimental feature, and in v5.20.0\nis carries a warning as such.\n\nWarnings will now be issued at compile time when these operations are detected.\n\nno if $] >= 5.01908, warnings => \"experimental::autoderef\";\n\nConsider, though, replacing the use of these features, as they may change behavior  again\nbefore becoming stable.\n\n•   A sequence of multiple spaces in a charnames alias definition is deprecated\n\nTrailing white-space in a charnames alias definition is deprecated\n\nThese  two  deprecation  warnings involving \"\\N{...}\" were incorrectly implemented.  They\ndid not warn by default (now they do) and could not be made fatal via \"use warnings FATAL\n=> 'deprecated'\" (now they can).\n\n•   Attribute prototype(%s) discards earlier prototype attribute in same sub\n\n(W misc) A sub was declared as \"sub foo : prototype(A) : prototype(B) {}\",  for  example.\nSince  each  sub  can  only  have one prototype, the earlier declaration(s) are discarded\nwhile the last one is applied.\n\n•   Invalid \\0 character in %s for %s: %s\\0%s\n\n(W syscalls) Embedded \\0 characters in pathnames or other system call arguments produce a\nwarning as of 5.20.  The parts after the \\0 were formerly ignored by system calls.\n\n•   Matched non-Unicode code point 0x%X against Unicode property; may not be portable.\n\nThis replaces the message \"Code point 0x%X is not Unicode, all  \\p{}  matches  fail;  all\n\\P{} matches succeed\".\n\n•   Missing ']' in prototype for %s : %s\n\n(W illegalproto) A grouping was started with \"[\" but never closed with \"]\".\n\n•   Possible precedence issue with control flow operator\n\n(W  syntax)  There is a possible problem with the mixing of a control flow operator (e.g.\n\"return\") and a low-precedence operator like \"or\".  Consider:\n\nsub { return $a or $b; }\n\nThis is parsed as:\n\nsub { (return $a) or $b; }\n\nWhich is effectively just:\n\nsub { return $a; }\n\nEither use parentheses or the high-precedence variant of the operator.\n\nNote this may be also triggered for constructs like:\n\nsub { 1 if die; }\n\n•   Postfix dereference is experimental\n\n(S experimental::postderef) This warning is emitted if you use the  experimental  postfix\ndereference syntax.  Simply suppress the warning if you want to use the feature, but know\nthat  in  doing  so  you  are  taking the risk of using an experimental feature which may\nchange or be removed in a future Perl version:\n\nno warnings \"experimental::postderef\";\nuse feature \"postderef\", \"postderefqq\";\n$ref->$*;\n$aref->@*;\n$aref->@[@indices];\n... etc ...\n\n•   Prototype '%s' overridden by attribute 'prototype(%s)' in %s\n\n(W prototype) A prototype was declared in both the parentheses after the sub name and via\nthe prototype attribute.  The prototype in parentheses  is  useless,  since  it  will  be\nreplaced by the prototype from the attribute before it's ever used.\n\n•   Scalar value @%s[%s] better written as $%s[%s]\n\n(W  syntax) In scalar context, you've used an array index/value slice (indicated by %) to\nselect a single element of an array.  Generally it's better to ask  for  a  scalar  value\n(indicated  by  $).  The difference is that $foo[&bar] always behaves like a scalar, both\nin the value it returns and when evaluating its argument,  while  %foo[&bar]  provides  a\nlist  context  to  its  subscript, which can do weird things if you're expecting only one\nsubscript.  When called in list context, it also returns the index (what &bar returns) in\naddition to the value.\n\n•   Scalar value @%s{%s} better written as $%s{%s}\n\n(W syntax) In scalar context, you've used a hash key/value  slice  (indicated  by  %)  to\nselect  a  single  element  of  a  hash.  Generally it's better to ask for a scalar value\n(indicated by $).  The difference is that $foo{&bar} always behaves like a  scalar,  both\nin the value it returns and when evaluating its argument, while @foo{&bar} and provides a\nlist  context  to  its  subscript, which can do weird things if you're expecting only one\nsubscript.  When called in list context, it also returns  the  key  in  addition  to  the\nvalue.\n\n•   Setting $/ to a reference to %s as a form of slurp is deprecated, treating as undef\n\n•   Unexpected exit %u\n\n(S)  exit()  was called or the script otherwise finished gracefully when \"PERLEXITWARN\"\nwas set in \"PLexitflags\".\n\n•   Unexpected exit failure %d\n\n(S) An uncaught die() was called when \"PERLEXITWARN\" was set in \"PLexitflags\".\n\n•   Use of literal control characters in variable names is deprecated\n\n(D deprecated) Using literal control characters in  the  source  to  refer  to  the  ^FOO\nvariables,  like $^X and ${^GLOBALPHASE} is now deprecated.  This only affects code like\n$\\cT, where \\cT is a control (like a \"SOH\") in the source code: ${\"\\cT\"} and  $^T  remain\nvalid.\n\n•   Useless use of greediness modifier\n\nThis fixes [Perl #42957].\n"
                },
                {
                    "name": "Changes to Existing Diagnostics",
                    "content": "•   Warnings and errors from the regexp engine are now UTF-8 clean.\n\n•   The  \"Unknown  switch  condition\"  error  message  has  some  slight changes.  This error\ntriggers when there is an unknown condition  in  a  \"(?(foo))\"  conditional.   The  error\nmessage used to read:\n\nUnknown switch condition (?(%s in regex;\n\nBut  what %s could be was mostly up to luck.  For \"(?(foobar))\", you might have seen \"fo\"\nor \"f\".  For Unicode characters, you would generally get a corrupted string.  The message\nhas been changed to read:\n\nUnknown switch condition (?(...)) in regex;\n\nAdditionally, the '<-- HERE' marker in the error will now point to the  correct  spot  in\nthe regex.\n\n•   The  \"%s  \"\\x%X\"  does  not  map  to Unicode\" warning is now correctly listed as a severe\nwarning rather than as a fatal error.\n\n•   Under rare circumstances, one could get a \"Can't coerce readonly REF to  string\"  instead\nof  the  customary \"Modification of a read-only value\".  This alternate error message has\nbeen removed.\n\n•   \"Ambiguous use of * resolved as operator *\": This and similar warnings about \"%\" and  \"&\"\nused to occur in some circumstances where there was no operator of the type cited, so the\nwarning was completely wrong.  This has been fixed [perl #117535, #76910].\n\n•   Warnings  about  malformed  subroutine  prototypes  are  now  more  consistent in how the\nprototypes are rendered.  Some of these warnings  would  truncate  prototypes  containing\nnulls.   In  other  cases  one warning would suppress another.  The warning about illegal\ncharacters in prototypes no longer says \"after ''\" if the bad character came before  the\nunderscore.\n\n•   Perl folding rules are not up-to-date for 0x%X; please use the perlbug utility to report;\nin regex; marked by <-- HERE in m/%s/\n\nThis  message is now only in the regexp category, and not in the deprecated category.  It\nis still a default (i.e., severe) warning [perl #89648].\n\n•   %%s[%s] in scalar context better written as $%s[%s]\n\nThis warning now occurs for any %array[$index]  or  %hash{key}  known  to  be  in  scalar\ncontext  at  compile time.  Previously it was worded \"Scalar value %%s[%s] better written\nas $%s[%s]\".\n\n•   Switch condition not recognized in regex; marked by <-- HERE in m/%s/:\n\nThe description for this diagnostic has been  extended  to  cover  all  cases  where  the\nwarning  may  occur.   Issues  with the positioning of the arrow indicator have also been\nresolved.\n\n•   The error messages for my($a?$b$c) and my(do{}) now mention \"conditional expression\"  and\n\"do block\", respectively, instead of reading 'Can't declare null operation in \"my\"'.\n\n•   When  \"use  re \"debug\"\" executes a regex containing a backreference, the debugging output\nnow shows what string is being matched.\n\n•   The now fatal error message \"Character following \"\\c\" must be ASCII\" has been reworded as\n\"Character following \"\\c\" must be printable ASCII\" to emphasize that in \"\\cX\", X must  be\na printable (non-control) ASCII character.\n"
                }
            ]
        },
        "Utility Changes": {
            "content": "a2p\n\n•   A possible crash from an off-by-one error when trying to access before the beginning of a\nbuffer has been fixed.  [perl #120244]\n\nbisect.pl\n\nThe git bisection tool Porting/bisect.pl has had many enhancements.\n\nIt  is  provided as part of the source distribution but not installed because it is not self-\ncontained as it relies on being run from within a git checkout. Note also that  it  makes  no\nattempt  to fix tests, correct runtime bugs or make something useful to install - its purpose\nis to make minimal changes to get any historical revision of interest to  build  and  run  as\nclose as possible to \"as-was\", and thereby make \"git bisect\" easy to use.\n\n•   Can optionally run the test case with a timeout.\n\n•   Can now run in-place in a clean git checkout.\n\n•   Can run the test case under \"valgrind\".\n\n•   Can apply user supplied patches and fixes to the source checkout before building.\n\n•   Now  has fixups to enable building several more historical ranges of bleadperl, which can\nbe useful for pinpointing the origins of bugs or behaviour changes.\n\nfind2perl\n\n•   find2perl now handles \"?\" wildcards correctly.  [perl #113054]\n\nperlbug\n\n•   perlbug now has a \"-p\" option for attaching patches with a bug report.\n\n•   perlbug has been modified to supply  the  report  template  with  CRLF  line  endings  on\nWindows.  [GH #13612] <https://github.com/Perl/perl5/issues/13612>\n\n•   perlbug  now makes as few assumptions as possible about the encoding of the report.  This\nwill likely change in the future to assume UTF-8 by default but allow a user override.\n",
            "subsections": []
        },
        "Configuration and Compilation": {
            "content": "•   The Makefile.PL for SDBMFile now generates  a  better  Makefile,  which  avoids  a  race\ncondition  during  parallel makes, which could cause the build to fail.  This is the last\nknown parallel make problem (on *nix platforms), and therefore we believe that a parallel\nmake should now always be error free.\n\n•   installperl and installman's option handling has been  refactored  to  use  Getopt::Long.\nBoth  are used by the Makefile \"install\" targets, and are not installed, so these changes\nare only likely to affect custom installation scripts.\n\n•   Single letter options now also have long names.\n\n•   Invalid options are now rejected.\n\n•   Command line arguments that are not options are now rejected.\n\n•   Each now has a \"--help\" option to display the usage message.\n\nThe behaviour for all valid documented invocations is unchanged.\n\n•   Where possible, the build now avoids recursive invocations of make  when  building  pure-\nPerl  extensions,  without  removing  any parallelism from the build. Currently around 80\nextensions can be processed directly by the makeext.pl tool, meaning that 80 invocations\nof make and 160 invocations of miniperl are no longer made.\n\n•   The build system now works correctly when compiling under GCC  or  Clang  with  link-time\noptimization enabled (the \"-flto\" option). [perl #113022]\n\n•   Distinct library basenames with \"dlibnameunique\".\n\nWhen  compiling  perl  with  this  option,  the  library  files  for XS modules are named\nsomething \"unique\" -- for example, Hash/Util/Util.so becomes  Hash/Util/PLHashUtil.so.\nThis  behavior  is similar to what currently happens on VMS, and serves as groundwork for\nthe Android port.\n\n•   \"sysroot\" option to indicate the logical root directory under gcc and clang.\n\nWhen building with this option set, both Configure  and  the  compilers  search  for  all\nheaders and libraries under this new sysroot, instead of /.\n\nThis  is a huge time saver if cross-compiling, but can also help on native builds if your\ntoolchain's files have non-standard locations.\n\n•   The cross-compilation model has been renovated.  There's several new  options,  and  some\nbackwards-incompatible changes:\n\nWe  now  build  binaries  for miniperl and generateuudmap to be used on the host, rather\nthan running every miniperl call on the target; this means that, short of 'make test', we\nno longer need access to the target system once  Configure  is  done.   You  can  provide\nalready-built binaries through the \"hostperl\" and \"hostgenerate\" options to Configure.\n\nAdditionally,  if  targeting  an EBCDIC platform from an ASCII host, or viceversa, you'll\nneed to run Configure with \"-Uhostgenerate\", to indicate that generateuudmap  should  be\nrun on the target.\n\nFinally,  there's also a way of having Configure end early, right after building the host\nbinaries, by cross-compiling without specifying a \"targethost\".\n\nThe incompatible changes include no longer using xconfig.h, xlib, or Cross.pm, so  canned\nconfig files and Makefiles will have to be updated.\n\n•   Related to the above, there is now a way of specifying the location of sh (or equivalent)\non the target system: \"targetsh\".\n\nFor  example,  Android  has  its  sh in /system/bin/sh, so if cross-compiling from a more\nnormal Unixy system with sh in /bin/sh, \"targetsh\" would end up  as  /system/bin/sh,  and\n\"sh\" as /bin/sh.\n\n•   By default, gcc 4.9 does some optimizations that break perl.  The -fwrapv option disables\nthose  optimizations  (and  probably  others),  so for gcc 4.3 and later (since the there\nmight be similar problems lurking on older versions too, but -fwrapv  was  broken  before\n4.3, and the optimizations probably won't go away), Configure now adds -fwrapv unless the\nuser  requests  -fno-wrapv,  which disables -fwrapv, or -fsanitize=undefined, which turns\nthe    overflows    -fwrapv    ignores    into    runtime    errors.      [GH     #13690]\n<https://github.com/Perl/perl5/issues/13690>\n",
            "subsections": []
        },
        "Testing": {
            "content": "•   The  \"test.valgrind\"  make  target  now  allows tests to be run in parallel.  This target\nallows Perl's test suite to be run under Valgrind,  which  detects  certain  sorts  of  C\nprogramming  errors,  though  at  significant cost in running time. On suitable hardware,\nallowing parallel execution claws back a lot of that additional cost. [perl #121431]\n\n•   Various tests in t/porting/ are no longer skipped when the perl .git directory is outside\nthe perl tree and pointed to by $GITDIR. [perl #120505]\n\n•   The test suite no longer fails  when  the  user's  interactive  shell  maintains  a  $PWD\nenvironment variable, but the /bin/sh used for running tests doesn't.\n",
            "subsections": []
        },
        "Platform Support": {
            "content": "",
            "subsections": [
                {
                    "name": "New Platforms",
                    "content": "Android\nPerl  can now be built for Android, either natively or through cross-compilation, for all\nthree currently available architectures  (ARM,  MIPS,  and  x86),  on  a  wide  range  of\nversions.\n\nBitrig\nCompile support has been added for Bitrig, a fork of OpenBSD.\n\nFreeMiNT\nSupport  has  been  added for FreeMiNT, a free open-source OS for the Atari ST system and\nits successors, based on the original MiNT that was officially adopted by Atari.\n\nSynology\nSynology ships its NAS boxes with a lean Linux distribution (DSM) on relative cheap CPU's\n(like the Marvell Kirkwood mv6282 - ARMv5tel or Freescale QorIQ P1022 ppc -  e500v2)  not\nmeant  for  workstations or development. These boxes should build now. The basic problems\nare the non-standard location for tools.\n"
                },
                {
                    "name": "Discontinued Platforms",
                    "content": "\"sfio\"\nCode related to supporting the \"sfio\" I/O system has been removed.\n\nPerl 5.004 added support to use the native API of \"sfio\", AT&T's Safe/Fast  I/O  library.\nThis  code  still  built  with v5.8.0, albeit with many regression tests failing, but was\ninadvertently broken before the v5.8.1 release, meaning that it has  not  worked  on  any\nversion  of  Perl  released since then.  In over a decade we have received no bug reports\nabout this, hence it is clear that no-one is using this functionality on any  version  of\nPerl that is still supported to any degree.\n\nAT&T 3b1\nConfigure  support  for  the  3b1,  also  known as the AT&T Unix PC (and the similar AT&T\n7300), has been removed.\n\nDG/UX\nDG/UX was a Unix sold by Data General. The last release was in April 2001.  It only  runs\non Data General's own hardware.\n\nEBCDIC\nIn  the  absence  of  a  regular source of smoke reports, code intended to support native\nEBCDIC platforms will be removed from perl before 5.22.0.\n"
                },
                {
                    "name": "Platform-Specific Notes",
                    "content": "Cygwin\n•   recv() on a connected handle would populate the returned sender address with whatever\nhappened to be in the working buffer.  recv() now uses a workaround  similar  to  the\nWin32  recv() wrapper and returns an empty string when recvfrom(2) doesn't modify the\nsupplied address length. [perl #118843]\n\n•   Fixed a build error in cygwin.c on Cygwin 1.7.28.\n\nTests now handle the errors that occur when \"cygserver\" isn't running.\n\nGNU/Hurd\nThe BSD compatibility library \"libbsd\" is no longer required for builds.\n\nLinux\nThe hints file now looks for \"libgdbmcompat\" only if \"libgdbm\" itself  is  also  wanted.\nThe  former  is  never useful without the latter, and in some circumstances, including it\ncould actually prevent building.\n\nMac OS\nThe build system now honors an \"ld\" setting supplied by the user running Configure.\n\nMidnightBSD\n\"objformat\" was removed from version 0.4-RELEASE of MidnightBSD and had  been  deprecated\non  earlier versions.  This caused the build environment to be erroneously configured for\n\"a.out\" rather than \"elf\".  This has been now been corrected.\n\nMixed-endian platforms\nThe code supporting \"pack\" and \"unpack\" operations on mixed  endian  platforms  has  been\nremoved. We believe that Perl has long been unable to build on mixed endian architectures\n(such  as  PDP-11s),  so  we don't think that this change will affect any platforms which\nwere able to build v5.18.0.\n\nVMS\n•   The \"PERLENVTABLES\" feature to control the population of %ENV at perl start-up  was\nbroken in Perl 5.16.0 but has now been fixed.\n\n•   Skip access checks on remotes in opendir().  [perl #121002]\n\n•   A  check  for  glob metacharacters in a path returned by the glob() operator has been\nreplaced with a check for VMS wildcard characters.  This saves a  significant  number\nof  unnecessary  lstat()  calls  such  that some simple glob operations become 60-80%\nfaster.\n\nWin32\n•   \"rename\" and \"link\" on Win32 now set $! to ENOSPC and EDQUOT when appropriate.  [perl\n#119857]\n\n•   The BUILDSTATIC and ALLSTATIC makefile options for linking  some  or  (nearly)  all\nextensions  statically  (into  perl520.dll,  and into a separate perl-static.exe too)\nwere broken for MinGW builds. This has now been fixed.\n\nThe ALLSTATIC option has  also  been  improved  to  include  the  Encode  and  Win32\nextensions (for both VC++ and MinGW builds).\n\n•   Support  for  building  with Visual C++ 2013 has been added.  There are currently two\npossible test failures (see \"Testing  Perl  on  Windows\"  in  perlwin32)  which  will\nhopefully be resolved soon.\n\n•   Experimental  support for building with Intel C++ Compiler has been added.  The nmake\nmakefile (win32/Makefile) and the dmake makefile (win32/makefile.mk) can be used.   A\n\"nmake test\" will not pass at this time due to cpan/CGI/t/url.t.\n\n•   Killing  a  process  tree  with  \"kill\" in perlfunc and a negative signal, was broken\nstarting in 5.18.0. In this bug, \"kill\" always returned 0 for a negative signal  even\nfor valid PIDs, and no processes were terminated. This has been fixed [perl #121230].\n\n•   The  time  taken  to build perl on Windows has been reduced quite significantly (time\nsavings in the region of 30-40% are  typically  seen)  by  reducing  the  number  of,\nusually  failing,  I/O calls for each require() (for miniperl.exe only).  [GH #13566]\n<https://github.com/Perl/perl5/issues/13566>\n\n•   About 15 minutes of idle sleeping was removed from running \"make test\" due to  a  bug\nin  which  the  timeout  monitor  used for tests could not be cancelled once the test\ncompletes, and the full timeout period elapsed before running  the  next  test  file.\n[GH #13647] <https://github.com/Perl/perl5/issues/13647>\n\n•   On  a  perl  built  without pseudo-fork (pseudo-fork builds were not affected by this\nbug), killing a process tree with kill() and a negative  signal  resulted  in  kill()\ninverting  the returned value.  For example, if kill() killed 1 process tree PID then\nit returned 0 instead of 1, and if kill() was passed 2 invalid PIDs then it  returned\n2  instead of 0.  This has probably been the case since the process tree kill feature\nwas implemented on Win32.  It  has  now  been  corrected  to  follow  the  documented\nbehaviour.  [GH #13595] <https://github.com/Perl/perl5/issues/13595>\n\n•   When  building  a  64-bit  perl,  an  uninitialized memory read in miniperl.exe, used\nduring the build process, could lead to a 4GB wperl.exe being created.  This has  now\nbeen fixed.  (Note that perl.exe itself was unaffected, but obviously wperl.exe would\nhave          been          completely          broken.)          [GH         #13677]\n<https://github.com/Perl/perl5/issues/13677>\n\n•   Perl can now be built with gcc version 4.8.1 from <http://www.mingw.org>.   This  was\npreviously broken due to an incorrect definition of DllMain() in one of perl's source\nfiles.   Earlier  gcc  versions were also affected when using version 4 of the w32api\npackage.  Versions of gcc available from <http://mingw-w64.sourceforge.net/> were not\naffected.  [GH #13733] <https://github.com/Perl/perl5/issues/13733>\n\n•   The test harness now has no failures when perl is built  on  a  FAT  drive  with  the\nWindows OS on an NTFS drive.  [GH #6348] <https://github.com/Perl/perl5/issues/6348>\n\n•   When  cloning  the  context  stack  in  fork()  emulation,  Perlcxdup() would crash\naccessing  parameter  information  for  context  stack  entries  that   included   no\nparameters,          as          with          \"&foo;\".           [GH         #13763]\n<https://github.com/Perl/perl5/issues/13763>\n\n•   Introduced by [GH #12161] <https://github.com/Perl/perl5/issues/12161>, a memory leak\non every call to \"system\" and backticks ( `` ), on most  Win32  Perls  starting  from\n5.18.0  has  been fixed.  The memory leak only occurred if you enabled pseudo-fork in\nyour build of Win32 Perl, and were running that build on Server 2003 R2 or newer  OS.\nThe     leak     does     not     appear     on     WinXP     SP3.     [GH    #13741]\n<https://github.com/Perl/perl5/issues/13741>\n\nWinCE\n•   The building of XS modules has largely been restored.  Several still cannot (yet)  be\nbuilt  but  it  is  now possible to build Perl on WinCE with only a couple of further\npatches (to Socket and ExtUtils::MakeMaker), hopefully to be incorporated soon.\n\n•   Perl can now be built in one shot with no  user  intervention  on  WinCE  by  running\n\"nmake -f Makefile.ce all\".\n\nSupport  for  building  with EVC (Embedded Visual C++) 4 has been restored.  Perl can\nalso be built using Smart Devices for Visual C++ 2005 or 2008.\n"
                }
            ]
        },
        "Internal Changes": {
            "content": "•   The internal representation has changed for the match variables $1, $2 etc., $`, $&,  $',\n${^PREMATCH},  ${^MATCH}  and ${^POSTMATCH}.  It uses slightly less memory, avoids string\ncomparisons and numeric conversions during lookup, and uses 23 fewer lines  of  C.   This\nchange should not affect any external code.\n\n•   Arrays  now  use  NULL  internally  to  represent  unused slots, instead of &PLsvundef.\n&PLsvundef is no longer treated as a special value, so  avstore(av,  0,  &PLsvundef)\nwill  cause  element  0 of that array to hold a read-only undefined scalar.  \"$array[0] =\nanything\" will croak and \"\\$array[0]\" will compare equal to \"\\undef\".\n\n•   The SV returned by HeSVKEYforce() now correctly reflects the UTF8ness of the  underlying\nhash key when that key is not stored as a SV.  [perl #79074]\n\n•   Certain  rarely used functions and macros available to XS code are now deprecated.  These\nare: \"utf8touvunibuf\" (use \"utf8touvchrbuf\"  instead),  \"validutf8touvuni\"  (use\n\"utf8touvchrbuf\"  instead),  \"NATIVETONEED\" (this did not work properly anyway), and\n\"ASCIITONEED\" (this did not work properly anyway).\n\nStarting in this release, almost never does application code need to distinguish  between\nthe  platform's  character  set and Latin1, on which the lowest 256 characters of Unicode\nare based.  New code should not use \"utf8ntouvuni\" (use  \"utf8touvchrbuf\"  instead),\nnor \"uvunitoutf8\" (use \"uvchrtoutf8\" instead),\n\n•   The  Makefile  shortcut  targets  for  many  rarely (or never) used testing and profiling\ntargets have been removed, or merged into the only other Makefile target that uses  them.\nSpecifically,  these  targets  are gone, along with documentation that referenced them or\nexplained how to use them:\n\ncheck.third check.utf16 check.utf8 coretest minitest.prep\nminitest.utf16 perl.config.dashg perl.config.dashpg\nperl.config.gcov perl.gcov perl.gprof perl.gprof.config\nperl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix\nperl.third perl.third.config perl.valgrind.config purecovperl\npureperl quantperl test.deparse test.taintwarn test.third\ntest.torture test.utf16 test.utf8 testnotty.deparse\ntestnotty.third testnotty.valgrind testprep.third\ntestprep.valgrind torturetest ucheck ucheck.third ucheck.utf16\nucheck.valgrind utest utest.third utest.utf16 utest.valgrind\n\nIt's still possible to run the relevant commands by \"hand\" - no underlying  functionality\nhas been removed.\n\n•   It  is  now  possible to keep Perl from initializing locale handling.  For the most part,\nPerl doesn't pay attention to locale.  (See  perllocale.)   Nonetheless,  until  now,  on\nstartup,  it  has  always initialized locale handling to the system default, just in case\nthe program being executed ends up using locales.  (This is one of  the  first  things  a\nlocale-aware  program  should do, long before Perl knows if it will actually be needed or\nnot.)  This works well except when Perl is embedded in another application which wants  a\nlocale   that   isn't   the   system   default.    Now,   if   the  environment  variable\n\"PERLSKIPLOCALEINIT\" is set at the time Perl is started, this initialization  step  is\nskipped.   Prior  to  this, on Windows platforms, the only workaround for this deficiency\nwas to use a hacked-up copy of internal Perl code.  Applications that need to  use  older\nPerls  can  discover  if the embedded Perl they are using needs the workaround by testing\nthat the C preprocessor symbol \"HASSKIPLOCALEINIT\" is not defined.  [RT #38193]\n\n•   \"BmRARE\" and \"BmPREVIOUS\" have been removed.  They were not used  anywhere  and  are  not\npart of the API.  For XS modules, they are now #defined as 0.\n\n•   \"svforcenormal\",  which  usually  croaks  on  read-only values, used to allow read-only\nvalues to be modified at compile time.  This has  been  changed  to  croak  on  read-only\nvalues regardless.  This change uncovered several core bugs.\n\n•   Perl's new copy-on-write mechanism  (which is now enabled by default), allows any \"SvPOK\"\nscalar  to  be  automatically upgraded to a copy-on-write scalar when copied. A reference\ncount on the string buffer is stored in the string buffer itself.\n\nFor example:\n\n$ perl -MDevel::Peek -e'$a=\"abc\"; $b = $a; Dump $a; Dump $b'\nSV = PV(0x260cd80) at 0x2620ad8\nREFCNT = 1\nFLAGS = (POK,IsCOW,pPOK)\nPV = 0x2619bc0 \"abc\"\\0\nCUR = 3\nLEN = 16\nCOWREFCNT = 1\nSV = PV(0x260ce30) at 0x2620b20\nREFCNT = 1\nFLAGS = (POK,IsCOW,pPOK)\nPV = 0x2619bc0 \"abc\"\\0\nCUR = 3\nLEN = 16\nCOWREFCNT = 1\n\nNote that both scalars share the same PV buffer and have a COWREFCNT greater than zero.\n\nThis means that XS code which wishes to modify the SvPVX() buffer of an  SV  should  call\nSvPVforce()  or  similar  first,  to  ensure  a valid (and unshared) buffer, and to call\nSvSETMAGIC() afterwards. This in fact has always been the case  (for  example  hash  keys\nwere  already  copy-on-write);  this  change  just  spreads  the COW behaviour to a wider\nvariety of SVs.\n\nOne important difference is that before 5.18.0, shared hash-key scalars used to have  the\n\"SvREADONLY\" flag set; this is no longer the case.\n\nThis    new    behaviour    can   still   be   disabled   by   running   Configure   with\n-Accflags=-DPERLNOCOW.  This option will probably be removed in Perl 5.22.\n\n•   \"PLsawampersand\"  is  now  a  constant.   The  switch   this   variable   provided   (to\nenable/disable the pre-match copy depending on whether $& had been seen) has been removed\nand replaced with copy-on-write, eliminating a few bugs.\n\nThe   previous   behaviour   can   still   be   enabled   by   running   Configure   with\n-Accflags=-DPERLSAWAMPERSAND.\n\n•   The functions \"myswap\", \"myhtonl\" and \"myntohl\" have been removed.  It is unclear  why\nthese functions were ever marked as A, part of the API. XS code can't call them directly,\nas it can't rely on them being compiled. Unsurprisingly, no code on CPAN references them.\n\n•   The  signature  of  the  Perlreintuitstart()  regex function has changed; the function\npointer \"intuit\" in the regex engine plugin structure has also changed accordingly. A new\nparameter, \"strbeg\" has been added; this has the same meaning as the same-named parameter\nin \"Perlregexecflags\". Previously intuit would try to guess the  start  of  the  string\nfrom  the  passed  SV (if any), and would sometimes get it wrong (e.g. with an overloaded\nSV).\n\n•   The signature of the  Perlregexecflags()  regex  function  has  changed;  the  function\npointer  \"exec\"  in  the  regex  engine  plugin structure has also changed to match.  The\n\"minend\" parameter now has type \"SSizet\" to better support 64-bit systems.\n\n•   XS code may use various macros to change the case of  a  character  or  code  point  (for\nexample  toLOWERutf8()).  Only a couple of these were documented until now; and now they\nshould be used in preference to calling the underlying functions.   See  \"Character  case\nchanging\" in perlapi.\n\n•   The  code  dealt  rather inconsistently with uids and gids. Some places assumed that they\ncould be safely stored in UVs, others in  IVs,  others  in  ints.  Four  new  macros  are\nintroduced: SvUID(), svsetuid(), SvGID(), and svsetgid()\n\n•   \"svposb2uflags\"  has  been  added  to  the  API.   It  is similar to \"svposb2u\", but\nsupports long strings on 64-bit platforms.\n\n•   \"PLexitflags\" can now be used by perl embedders or other XS code to have perl \"warn\" or\n\"abort\" on an attempted exit. [perl #52000]\n\n•   Compiling with \"-Accflags=-PERLBOOLASCHAR\" now allows C99 and C++ compilers to emulate\nthe aliasing of \"bool\" to \"char\" that perl does for C89 compilers.  [perl #120314]\n\n•   The \"sv\" argument in \"sv2pvflags\" in perlapi, \"sv2ivflags\" in perlapi, \"sv2uvflags\"\nin perlapi, and \"sv2nvflags\" in  perlapi  and  their  older  wrappers  sv2pv,  sv2iv,\nsv2uv,  sv2nv,  is now non-NULL. Passing NULL now will crash.  When the non-NULL marker\nwas introduced en masse in 5.9.3 the  functions  were  marked  non-NULL,  but  since  the\ncreation  of  the  SV API in 5.0 alpha 2, if NULL was passed, the functions returned 0 or\nfalse-type values. The code that supports \"sv\" argument being non-NULL dates to 5.0 alpha\n2 directly, and indirectly to Perl 1.0 (pre 5.0 api). The lack of documentation that  the\nfunctions  accepted a NULL \"sv\" was corrected in 5.11.0 and between 5.11.0 and 5.19.5 the\nfunctions were marked NULLOK. As an optimization the NULLOK code has  now  been  removed,\nand  the  functions  became  non-NULL marked again, because core getter-type macros never\npass NULL to these functions and would crash before ever passing NULL.\n\nThe only way a NULL \"sv\" can be passed to sv2*v* functions is if XS code directly  calls\nsv2*v*. This is unlikely as XS code uses Sv*V* macros to get the underlying value out of\nthe  SV.  One  possible  situation  which  leads  to  a NULL \"sv\" being passed to sv2*v*\nfunctions, is if XS code defines its own getter type Sv*V* macros, which check  for  NULL\nbefore  dereferencing  and  checking  the  SV's flags through public API Sv*OK* macros or\ndirectly using private API \"SvFLAGS\", and if  \"sv\"  is  NULL,  then  calling  the  sv2*v\nfunctions with a NULL literal or passing the \"sv\" containing a NULL value.\n\n•   newATTRSUB is now a macro\n\nThe public API newATTRSUB was previously a macro to the private function PerlnewATTRSUB.\nFunction  PerlnewATTRSUB  has  been  removed.  newATTRSUB  is  now  macro to a different\ninternal function.\n\n•   Changes in warnings raised by utf8ntouvchr()\n\nThis bottom level function decodes the first character of a  UTF-8  string  into  a  code\npoint.  It is accessible to \"XS\" level code, but it's discouraged from using it directly.\nThere  are  higher  level  functions  that call this that should be used instead, such as\n\"utf8touvchrbuf\" in perlapi.  For completeness though, this documents some changes  to\nit.   Now,  tests for malformations are done before any tests for other potential issues.\nOne of those issues involves code points so large that they have never  appeared  in  any\nofficial standard (the current standard has scaled back the highest acceptable code point\nfrom  earlier  versions).  It is possible (though not done in CPAN) to warn and/or forbid\nthese code points, while accepting smaller code points that are  still  above  the  legal\nUnicode  maximum.   The  warning  message  for  this  now  includes  the  code  point  if\nrepresentable on the machine.  Previously it always displayed raw bytes, which is what it\nstill does for non-representable code points.\n\n•   Regexp engine changes that affect the pluggable regex engine interface\n\nMany flags that used to be exposed via regexp.h and used to populate the extflags  member\nof  struct  regexp have been removed. These fields were technically private to Perl's own\nregexp engine and should not have been exposed there in the first place.\n\nThe affected flags are:\n\nRXfNOSCAN\nRXfCANYSEEN\nRXfGPOSSEEN\nRXfGPOSFLOAT\nRXfANCHBOL\nRXfANCHMBOL\nRXfANCHSBOL\nRXfANCHGPOS\n\nAs well as the follow flag masks:\n\nRXfANCHSINGLE\nRXfANCH\n\nAll have been renamed to PREGf equivalents and moved to regcomp.h.\n\nThe behavior previously achieved by setting one or more of the RXfANCH flags  (via  the\nRXfANCH mask) have now been replaced by a *single* flag bit in extflags:\n\nRXfISANCHORED\n\npluggable regex engines which previously used to set these flags should now set this flag\nALONE.\n\n•   The  Perl  core now consistently uses avtindex() (\"the top index of an array\") as a more\nclearly-named synonym for avlen().\n\n•   The obscure interpreter variable \"PLtimesbuf\" is expected to be  removed  early  in  the\n5.21.x  development series, so that Perl 5.22.0 will not provide it to XS authors.  While\nthe variable still exists in 5.20.0, we hope that this advance warning of the deprecation\nwill help anyone who is using that variable.\n",
            "subsections": []
        },
        "Selected Bug Fixes": {
            "content": "",
            "subsections": [
                {
                    "name": "Regular Expressions",
                    "content": "•   Fixed a small number of regexp constructions that could either fail  to  match  or  crash\nperl  when  the  string  being matched against was allocated above the 2GB line on 32-bit\nsystems. [RT #118175]\n\n•   Various memory leaks involving the parsing of the \"(?[...])\" regular expression construct\nhave been fixed.\n\n•   \"(?[...])\" now allows interpolation of precompiled patterns consisting of \"(?[...])\" with\nbracketed character classes inside (\"$pat = qr/(?[ [a] ])/;  /(?[ $pat ])/\").   Formerly,\nthe brackets would confuse the regular expression parser.\n\n•   The  \"Quantifier unexpected on zero-length expression\" warning message could appear twice\nstarting in Perl v5.10 for a  regular  expression  also  containing  alternations  (e.g.,\n\"a|b\") triggering the trie optimisation.\n\n•   Perl v5.18 inadvertently introduced a bug whereby interpolating mixed up- and down-graded\nUTF-8  strings in a regex could result in malformed UTF-8 in the pattern: specifically if\na downgraded character in the range \"\\x80..\\xff\" followed a UTF-8 string, e.g.\n\nutf8::upgrade(  my $u = \"\\x{e5}\");\nutf8::downgrade(my $d = \"\\x{e5}\");\n/$u$d/\n\n[RT #118297]\n\n•   In regular expressions containing multiple code blocks, the values of $1, $2,  etc.,  set\nby  nested  regular  expression  calls  would leak from one block to the next.  Now these\nvariables always refer to the outer regular expression at the start of an embedded  block\n[perl #117917].\n\n•   \"/$qr/p\"  was  broken  in  Perl  5.18.0; the \"/p\" flag was ignored.  This has been fixed.\n[perl #118213]\n\n•   Starting in Perl 5.18.0, a construct like \"/[#](?{})/x\" would have  its  \"#\"  incorrectly\ninterpreted  as  a  comment.   The  code block would be skipped, unparsed.  This has been\ncorrected.\n\n•   Starting in Perl 5.001, a regular expression like \"/[#$a]/x\" or \"/[#]$a/x\" would have its\n\"#\" incorrectly interpreted as a comment, so the variable would  not  interpolate.   This\nhas been corrected. [perl #45667]\n\n•   Perl  5.18.0  inadvertently  made dereferenced regular expressions (\"${ qr// }\") false as\nbooleans.  This has been fixed.\n\n•   The use of \"\\G\" in regular expressions, where it's not at the start of  the  pattern,  is\nnow slightly less buggy (although it is still somewhat problematic).\n\n•   Where  a  regular  expression  included  code blocks (\"/(?{...})/\"), and where the use of\nconstant overloading triggered a re-compilation of the code block, the second compilation\ndidn't see its outer lexical scope.  This was a regression in Perl 5.18.0.\n\n•   The string position set by  \"pos\"  could  shift  if  the  string  changed  representation\ninternally  to  or  from  utf8.  This could happen, e.g., with references to objects with\nstring overloading.\n\n•   Taking references to the return values of two \"pos\" calls with  the  same  argument,  and\nthen  assigning  a  reference  to one and \"undef\" to the other, could result in assertion\nfailures or memory leaks.\n\n•   Elements of @- and @+ now update correctly when  they  refer  to  non-existent  captures.\nPreviously,  a  referenced element (\"$ref = \\$-[1]\") could refer to the wrong match after\nsubsequent matches.\n\n•   The code that parses regex backrefs (or ambiguous backref/octals)  such  as  \\123  did  a\nsimple  atoi(), which could wrap round to negative values on long digit strings and cause\nsegmentation faults.  This has now been fixed.  [perl #119505]\n\n•   Assigning another typeglob to \"*^R\" no longer makes the regular expression engine crash.\n\n•   The \"\\N\" regular expression escape, when used without the curly braces (to mean \"[^\\n]\"),\nwas ignoring a following \"*\" if followed by whitespace under /x.  It had  been  this  way\nsince \"\\N\" to mean \"[^\\n]\" was introduced in 5.12.0.\n\n•   \"s///\",  \"tr///\"  and  \"y///\"  now  work  when a wide character is used as the delimiter.\n[perl #120463]\n\n•   Some cases of unterminated (?...) sequences in regular expressions (e.g.,  \"/(?</\")  have\nbeen  fixed  to  produce the proper error message instead of \"panic: memory wrap\".  Other\ncases (e.g., \"/(?(/\") have yet to be fixed.\n\n•   When a reference to a reference to an overloaded  object  was  returned  from  a  regular\nexpression  \"(??{...})\" code block, an incorrect implicit dereference could take place if\nthe inner reference had been returned by a code block previously.\n\n•   A tied variable returned from \"(??{...})\" sees the inner values of match variables (i.e.,\nthe $1 etc. from any matches inside the block) in its FETCH method.   This  was  not  the\ncase  if  a  reference  to  an  overloaded object was the last thing assigned to the tied\nvariable.  Instead, the match variables referred to the outer pattern  during  the  FETCH\ncall.\n\n•   Fix  unexpected  tainting  via regexp using locale. Previously, under certain conditions,\nthe use of character classes could cause  tainting  when  it  shouldn't.  Some  character\nclasses  are  locale-dependent,  but  before this patch, sometimes tainting was happening\neven for character classes that don't depend on the locale. [perl #120675]\n\n•   Under certain conditions, Perl would throw an error if in a  lookbehind  assertion  in  a\nregexp,  the  assertion  referred  to  a named subpattern, complaining the lookbehind was\nvariable when it wasn't. This has been fixed. [perl #120600], [perl #120618]. The current\nfix may be improved on in the future.\n\n•   $^R wasn't available outside of  the  regular  expression  that  initialized  it.   [perl\n#121070]\n\n•   A  large  set  of  fixes and refactoring for reintuitstart() was merged, the highlights\nare:\n\n•   Fixed a panic when compiling the regular expression \"/\\x{100}[xy]\\x{100}{2}/\".\n\n•   Fixed a performance regression when performing a global pattern match against a UTF-8\nstring.  [perl #120692]\n\n•   Fixed  another  performance  issue  where  matching   a   regular   expression   like\n\"/ab.{1,2}x/\"  against a long UTF-8 string would unnecessarily calculate byte offsets\nfor a large portion of the string. [perl #120692]\n\n•   Fixed an alignment error when compiling regular expressions when built with GCC on  HP-UX\n64-bit.\n\n•   On 64-bit platforms \"pos\" can now be set to a value higher than 231-1.  [perl #72766]\n"
                },
                {
                    "name": "Perl 5 Debugger and -d",
                    "content": "•   The  debugger's \"man\" command been fixed. It was broken in the v5.18.0 release. The \"man\"\ncommand is aliased to the names \"doc\" and \"perldoc\" - all now work again.\n\n•   @ is now correctly visible in the debugger, fixing a regression introduced in  v5.18.0's\ndebugger. [RT #118169]\n\n•   Under  copy-on-write  builds  (the  default  as  of 5.20.0) \"${'<-e'}[0]\" no longer gets\nmangled.  This is the first line of input saved for the  debugger's  use  for  one-liners\n[perl #118627].\n\n•   On  non-threaded  builds,  setting \"${\"<filename\"}\" to a reference or typeglob no longer\ncauses \"FILE\" and some error messages to produce a  corrupt  string,  and  no  longer\nprevents  \"#line\"  directives  in  string  evals  from  providing the source lines to the\ndebugger.  Threaded builds were unaffected.\n\n•   Starting with Perl 5.12, line numbers were off by one if the -d switch was used on the #!\nline.  Now they are correct.\n\n•   \"*DB::DB = sub {} if 0\" no longer stops Perl's debugging mode from finding \"DB::DB\"  subs\ndeclared thereafter.\n\n•   \"%{'<...'}\"  hashes  now  set  breakpoints on the corresponding \"@{'<...'}\" rather than\nwhichever array @DB::dbline is aliased to.  [perl #119799]\n\n•   Call set-magic when setting $DB::sub.  [perl #121255]\n\n•   The debugger's \"n\" command now respects lvalue subroutines  and  steps  over  them  [perl\n#118839].\n"
                },
                {
                    "name": "Lexical Subroutines",
                    "content": "•   Lexical constants (\"my sub a() { 42 }\") no longer crash when inlined.\n\n•   Parameter prototypes attached to lexical subroutines are now respected when compiling sub\ncalls  without parentheses.  Previously, the prototypes were honoured only for calls with\nparentheses. [RT #116735]\n\n•   Syntax errors in lexical subroutines in combination with calls to the same subroutines no\nlonger cause crashes at compile time.\n\n•   Deep recursion warnings no longer crash lexical subroutines. [RT #118521]\n\n•   The dtrace sub-entry probe now  works  with  lexical  subs,  instead  of  crashing  [perl\n#118305].\n\n•   Undefining  an inlinable lexical subroutine (my sub foo() { 42 } undef &foo) would result\nin a crash if warnings were turned on.\n\n•   An undefined lexical sub used as an inherited method no longer crashes.\n\n•   The presence of a lexical sub named  \"CORE\"  no  longer  stops  the  CORE::  prefix  from\nworking.\n"
                },
                {
                    "name": "Everything Else",
                    "content": "•   The  OP  allocation  code  now  returns correctly aligned memory in all cases for \"struct\npmop\". Previously it could return memory only aligned to a 4-byte boundary, which is  not\ncorrect  for  an  ithreads  build with 64 bit IVs on some 32 bit platforms. Notably, this\ncaused the build to fail completely on sparc GNU/Linux. [RT #118055]\n\n•   Evaluating large hashes in scalar context is now much  faster,  as  the  number  of  used\nchains  in the hash is now cached for larger hashes. Smaller hashes continue not to store\nit and calculate it when needed, as this saves one IV.  That would be 1 IV  overhead  for\nevery object built from a hash. [RT #114576]\n\n•   Perl v5.16 inadvertently introduced a bug whereby calls to XSUBs that were not visible at\ncompile  time  were treated as lvalues and could be assigned to, even when the subroutine\nwas not an lvalue sub.  This has been fixed.  [RT #117947]\n\n•   In Perl v5.18.0 dualvars that had an empty string for the  string  part  but  a  non-zero\nnumber  for  the  number  part starting being treated as true.  In previous versions they\nwere treated as false, the string representation taking precedence.   The  old  behaviour\nhas been restored. [RT #118159]\n\n•   Since  Perl v5.12, inlining of constants that override built-in keywords of the same name\nhad countermanded \"use subs\", causing subsequent mentions of  the  constant  to  use  the\nbuilt-in keyword instead.  This has been fixed.\n\n•   The  warning  produced by \"-l $handle\" now applies to IO refs and globs, not just to glob\nrefs.  That warning is also now UTF8-clean. [RT #117595]\n\n•   \"delete local $ENV{nonexistentenvvar}\" no longer leaks memory.\n\n•   \"sort\" and \"require\" followed by a keyword prefixed with  \"CORE::\"  now  treat  it  as  a\nkeyword, and not as a subroutine or module name. [RT #24482]\n\n•   Through  certain  conundrums,  it  is  possible to cause the current package to be freed.\nCertain operators (\"bless\", \"reset\", \"open\", \"eval\") could  not  cope  and  would  crash.\nThey have been made more resilient. [RT #117941]\n\n•   Aliasing  filehandles  through  glob-to-glob  assignment would not update internal method\ncaches properly if a package of the same name as the  filehandle  existed,  resulting  in\nfilehandle method calls going to the package instead.  This has been fixed.\n\n•   \"./Configure -de -Dusevendorprefix\" didn't default. [RT #64126]\n\n•   The   \"Statement   unlikely  to  be  reached\"  warning  was  listed  in  perldiag  as  an\n\"exec\"-category warning, but was enabled and disabled by the \"syntax\" category.   On  the\nother hand, the \"exec\" category controlled its fatal-ness.  It is now entirely handled by\nthe \"exec\" category.\n\n•   The  \"Replacement  list  is  longer  that  search list\" warning for \"tr///\" and \"y///\" no\nlonger occurs in the presence of the \"/c\" flag. [RT #118047]\n\n•   Stringification of NVs are not cached so that the lexical locale controls stringification\nof the decimal point. [perl #108378] [perl #115800]\n\n•   There have been several fixes related to Perl's handling of  locales.   perl  #38193  was\ndescribed  above  in \"Internal Changes\".  Also fixed is #118197, where the radix (decimal\npoint) character had to be an ASCII character (which doesn't work  for  some  non-Western\nlanguages); and #115808, in which POSIX::setlocale() on failure returned an \"undef\" which\ndidn't warn about not being defined even if those warnings were enabled.\n\n•   Compiling  a \"split\" operator whose third argument is a named constant evaluating to 0 no\nlonger causes the constant's value to change.\n\n•   A named constant used as the second argument to \"index\"  no  longer  gets  coerced  to  a\nstring if it is a reference, regular expression, dualvar, etc.\n\n•   A named constant evaluating to the undefined value used as the second argument to \"index\"\nno  longer produces \"uninitialized\" warnings at compile time.  It will still produce them\nat run time.\n\n•   When a scalar was returned from a subroutine in @INC, the referenced scalar was magically\nconverted into an IO thingy, possibly resulting in \"Bizarre copy\" errors if  that  scalar\ncontinued to be used elsewhere.  Now Perl uses an internal copy of the scalar instead.\n\n•   Certain  uses  of  the \"sort\" operator are optimised to modify an array in place, such as\n\"@a = sort @a\".  During the sorting, the array is made read-only.  If a sort block should\nhappen to die, then the array remained read-only even outside the \"sort\".  This has  been\nfixed.\n\n•   $a  and $b inside a sort block are aliased to the actual arguments to \"sort\", so they can\nbe modified through those two variables.  This did not always work, e.g., for lvalue subs\nand $#ary, and probably many other operators.  It works now.\n\n•   The arguments to \"sort\" are now all in list context.  If the \"sort\" itself were called in\nvoid or scalar context, then some, but not all, of the arguments used to be  in  void  or\nscalar context.\n\n•   Subroutine  prototypes  with  Unicode characters above U+00FF were getting mangled during\nclosure cloning.  This would happen  with  subroutines  closing  over  lexical  variables\ndeclared outside, and with lexical subs.\n\n•   \"UNIVERSAL::can\"  now  treats  its  first  argument  the  same  way that method calls do:\nTypeglobs and glob references with non-empty IO slots are treated as handles, and strings\nare treated as filehandles, rather than packages, if a handle with that name exists [perl\n#113932].\n\n•   Method calls on typeglobs (e.g., \"*ARGV->getline\") used to  stringify  the  typeglob  and\nthen look it up again.  Combined with changes in Perl 5.18.0, this allowed \"*foo->bar\" to\ncall  methods  on  the \"foo\" package (like \"foo->bar\").  In some cases it could cause the\nmethod to be called on the wrong handle.  Now a typeglob argument is treated as a  handle\n(just like \"(\\*foo)->bar\"), or, if its IO slot is empty, an error is raised.\n\n•   Assigning  a  vstring  to  a  tied  variable  or  to  a  subroutine argument aliased to a\nnonexistent hash or array element now  works,  without  flattening  the  vstring  into  a\nregular string.\n\n•   \"pos\", \"tie\", \"tied\" and \"untie\" did not work properly on subroutine arguments aliased to\nnonexistent hash and array elements [perl #77814, #27010].\n\n•   The \"=>\" fat arrow operator can now quote built-in keywords even if it occurs on the next\nline, making it consistent with how it treats other barewords.\n\n•   Autovivifying  a  subroutine stub via \"\\&$glob\" started causing crashes in Perl 5.18.0 if\nthe $glob was merely a copy of a real glob, i.e., a scalar that had had a  glob  assigned\nto it.  This has been fixed. [perl #119051]\n\n•   Perl  used to leak an implementation detail when it came to referencing the return values\nof certain operators.  \"for ($a+$b) { warn \\$; warn \\$ }\" used to display two different\nmemory addresses, because the \"\\\" operator was  copying  the  variable.   Under  threaded\nbuilds,  it  would  also  happen  for constants (\"for(1) { ... }\").  This has been fixed.\n[perl #21979, #78194, #89188, #109746, #114838, #115388]\n\n•   The range operator \"..\" was returning the same modifiable scalars with each call,  unless\nit  was  the  only  thing  in a \"foreach\" loop header.  This meant that changes to values\nwithin the list returned would be visible the next time the operator was executed.  [perl\n#3105]\n\n•   Constant  folding  and subroutine inlining no longer cause operations that would normally\nreturn new modifiable scalars to return read-only values instead.\n\n•   Closures of the form \"sub () { $somevariable }\" are no longer inlined,  causing  changes\nto the variable to be ignored by callers of the subroutine.  [perl #79908]\n\n•   Return  values  of  certain  operators  such  as  \"ref\" would sometimes be shared between\nrecursive calls to the same subroutine, causing  the  inner  call  to  modify  the  value\nreturned by \"ref\" in the outer call.  This has been fixed.\n\n•   \"PACKAGE\"  and  constants  returning  a package name or hash key are now consistently\nread-only.  In various previous Perl releases, they have  become  mutable  under  certain\ncircumstances.\n\n•   Enabling  \"used once\" warnings no longer causes crashes on stash circularities created at\ncompile time (\"*Foo::Bar::Foo:: = *Foo::\").\n\n•   Undef constants used in hash keys (\"use constant u => undef; $h{+u}\") no  longer  produce\n\"uninitialized\" warnings at compile time.\n\n•   Modifying  a  substitution  target  inside  the substitution replacement no longer causes\ncrashes.\n\n•   The first statement inside a string eval used to use the wrong pragma  setting  sometimes\nduring  constant  folding.   \"eval  'uc chr 0xe0'\" would randomly choose between Unicode,\nbyte, and locale semantics.  This has been fixed.\n\n•   The handling of return values of @INC filters (subroutines  returned  by  subroutines  in\n@INC)  has  been  fixed  in various ways.  Previously tied variables were mishandled, and\nsetting $ to a reference or typeglob could result in crashes.\n\n•   The \"SvPVbyte\" XS function has been fixed to work with tied scalars  returning  something\nother than a string.  It used to return utf8 in those cases where \"SvPV\" would.\n\n•   Perl  5.18.0  inadvertently made \"--\" and \"++\" crash on dereferenced regular expressions,\nand stopped \"++\" from flattening vstrings.\n\n•   \"bless\" no longer dies with \"Can't bless non-reference value\" if its first argument is  a\ntied reference.\n\n•   \"reset\"  with  an  argument  no  longer skips copy-on-write scalars, regular expressions,\ntypeglob copies, and vstrings.  Also, when encountering those or read-only values, it  no\nlonger skips any array or hash with the same name.\n\n•   \"reset\"  with  an argument now skips scalars aliased to typeglobs (\"for $z (*foo) { reset\n\"z\" }\").  Previously it would corrupt memory or crash.\n\n•   \"ucfirst\" and \"lcfirst\" were not respecting the bytes pragma.  This was a regression from\nPerl 5.12. [perl #117355]\n\n•   Changes to \"UNIVERSAL::DESTROY\" now update DESTROY caches  in  all  classes,  instead  of\ncausing  classes  that  have already had objects destroyed to continue using the old sub.\nThis was a regression in Perl 5.18. [perl #114864]\n\n•   All known false-positive occurrences of the deprecation  warning  \"Useless  use  of  '\\';\ndoesn't  escape  metacharacter  '%c'\",  added  in  Perl  5.18.0, have been removed. [perl\n#119101]\n\n•   The value of $^E is now saved across signal handlers on Windows.  [perl #85104]\n\n•   A lexical filehandle (as in \"open my $fh...\") is  usually  given  a  name  based  on  the\ncurrent  package  and  the  name of the variable, e.g. \"main::$fh\".  Under recursion, the\nfilehandle was losing the \"$fh\" part of the name.  This has been fixed.\n\n•   Uninitialized values returned by XSUBs are no longer exempt from uninitialized  warnings.\n[perl #118693]\n\n•   \"elsif (\"\")\" no longer erroneously produces a warning about void context.  [perl #118753]\n\n•   Passing  \"undef\"  to  a  subroutine now causes @ to contain the same read-only undefined\nscalar that \"undef\" returns.  Furthermore, \"exists $[0]\" will now return true if \"undef\"\nwas the first argument.  [perl #7508, #109726]\n\n•   Passing a non-existent array element to a  subroutine  does  not  usually  autovivify  it\nunless  the  subroutine modifies its argument.  This did not work correctly with negative\nindices and with non-existent elements within the array.  The element would  be  vivified\nimmediately.   The  delayed  vivification  has  been  extended to work with those.  [perl\n#118691]\n\n•   Assigning references or globs to the scalar returned by $#foo after the  @foo  array  has\nbeen  freed  no  longer causes assertion failures on debugging builds and memory leaks on\nregular builds.\n\n•   On 64-bit platforms, large ranges like 1..1000000000000 no longer crash, but eat  up  all\nyour memory instead.  [perl #119161]\n\n•   \"DATA\"  now  puts the \"DATA\" handle in the right package, even if the current package\nhas been renamed through glob assignment.\n\n•   When \"die\", \"last\", \"next\", \"redo\", \"goto\" and \"exit\" unwind the scope,  it  is  possible\nfor  \"DESTROY\" recursively to call a subroutine or format that is currently being exited.\nIt that case, sometimes the lexical variables inside  the  sub  would  start  out  having\nvalues  from  the  outer  call, instead of being undefined as they should.  This has been\nfixed.  [perl #119311]\n\n•   ${^MPEN} is no longer treated as a synonym for ${^MATCH}.\n\n•   Perl now tries a little harder to return the correct line number in \"(caller)[2]\".  [perl\n#115768]\n\n•   Line numbers inside multiline quote-like operators are  now  reported  correctly.   [perl\n#3643]\n\n•   \"#line\" directives inside code embedded in quote-like operators are now respected.\n\n•   Line  numbers  are now correct inside the second here-doc when two here-doc markers occur\non the same line.\n\n•   An optimization in Perl 5.18 made incorrect assumptions causing a  bad  interaction  with\nthe  Devel::CallParser  CPAN  module.   If  the  module was loaded then lexical variables\ndeclared in separate statements following a my(...) list might  fail  to  be  cleared  on\nscope exit.\n\n•   &xsub  and  \"goto  &xsub\" calls now allow the called subroutine to autovivify elements of\n@.\n\n•   &xsub and \"goto &xsub\" no longer crash if * has been undefined and has  no  ARRAY  entry\n(i.e. @ does not exist).\n\n•   &xsub and \"goto &xsub\" now work with tied @.\n\n•   Overlong identifiers no longer cause a buffer overflow (and a crash).  They started doing\nso in Perl 5.18.\n\n•   The warning \"Scalar value @hash{foo} better written as $hash{foo}\" now produces far fewer\nfalse positives.  In particular, @hash{+functionreturningalist} and @hash{ qw \"foo bar\nbaz\" } no longer warn.  The same applies to array slices.  [perl #28380, #114024]\n\n•   \"$! = EINVAL; waitpid(0, WNOHANG);\" no longer goes into an internal infinite loop.  [perl\n#85228]\n\n•   A possible segmentation fault in filehandle duplication has been fixed.\n\n•   A  subroutine  in @INC can return a reference to a scalar containing the initial contents\nof the file.  However, that scalar was freed prematurely  if  not  referenced  elsewhere,\ngiving random results.\n\n•   \"last\"  no  longer  returns values that the same statement has accumulated so far, fixing\namongst other things the long-standing bug that \"push @a, last\" would try to  return  the\n@a,  copying it like a scalar in the process and resulting in the error, \"Bizarre copy of\nARRAY in last.\"  [perl #3112]\n\n•   In some cases, closing file handles opened to pipe to or from a process, which  had  been\nduplicated  into a standard handle, would call perl's internal waitpid wrapper with a pid\nof zero.  With the fix for [perl #85228] this zero pid was passed to \"waitpid\",  possibly\nblocking the process.  This wait for process zero no longer occurs.  [perl #119893]\n\n•   \"select\"  used  to ignore magic on the fourth (timeout) argument, leading to effects such\nas \"select\" blocking indefinitely rather than the expected sleep time.  This has now been\nfixed.  [perl #120102]\n\n•   The class name in \"for my class $foo\" is now parsed correctly.  In the case of the second\ncharacter of the class name being followed by a digit (e.g. 'a1b') this used to give  the\nerror \"Missing $ on loop variable\".  [perl #120112]\n\n•   Perl  5.18.0  accidentally  disallowed  \"-bareword\" under \"use strict\" and \"use integer\".\nThis has been fixed.  [perl #120288]\n\n•   \"-a\" at the start of a line (or a hyphen with any single letter that is  not  a  filetest\noperator)  no longer produces an erroneous 'Use of \"-a\" without parentheses is ambiguous'\nwarning.  [perl #120288]\n\n•   Lvalue context is now properly propagated into bare blocks and \"if\" and \"else\" blocks  in\nlvalue  subroutines.   Previously,  arrays  and  hashes  would  sometimes  incorrectly be\nflattened when returned in lvalue list context, or \"Bizarre  copy\"  errors  could  occur.\n[perl #119797]\n\n•   Lvalue  context  is now propagated to the branches of \"||\" and \"&&\" (and their alphabetic\nequivalents, \"or\" and \"and\").  This means \"foreach (pos $x || pos $y) {...}\"  now  allows\n\"pos\" to be modified through $.\n\n•   \"stat\"  and  \"readline\"  remember  the  last  handle used; the former for the special \"\"\nfilehandle, the latter for \"${^LASTFH}\".  \"eval \"*foo if 0\"\" where  *foo  was  the  last\nhandle  passed  to  \"stat\"  or  \"readline\" could cause that handle to be forgotten if the\nhandle were not opened yet.  This has been fixed.\n\n•   Various cases of \"delete $::{a}\", \"delete $::{ENV}\" etc. causing a crash have been fixed.\n[perl #54044]\n\n•   Setting $! to EACCESS before calling \"require\" could affect \"require\"'s behaviour.   This\nhas been fixed.\n\n•   The \"Can't use \\1 to mean $1 in expression\" warning message now only occurs on the right-\nhand  (replacement) part of a substitution.  Formerly it could happen in code embedded in\nthe left-hand side, or in any other quote-like operator.\n\n•   Blessing into a reference (\"bless $thisref, $thatref\")  has  long  been  disallowed,  but\nmagical  scalars  for the second like $/ and those tied were exempt.  They no longer are.\n[perl #119809]\n\n•   Blessing into a reference was accidentally allowed in 5.18 if the class argument  were  a\nblessed  reference with stale method caches (i.e., whose class had had subs defined since\nthe last method call).  They are disallowed once more, as in 5.16.\n\n•   \"$x->{key}\" where $x was declared as \"my Class $x\" no longer crashes if  a  Class::FIELDS\nsubroutine stub has been declared.\n\n•   @$obj{'key'}  and  \"${$obj}{key}\" used to be exempt from compile-time field checking (\"No\nsuch class field\"; see fields) but no longer are.\n\n•   A nonexistent array element with a large index passed to a subroutine that ties the array\nand then tries to access the element no longer results in a crash.\n\n•   Declaring a subroutine stub named NEGATIVEINDICES no longer makes negative array indices\ncrash when the current package is a tied array class.\n\n•   Declaring a \"require\", \"glob\", or \"do\" subroutine stub in the CORE::GLOBAL::  package  no\nlonger makes compilation of calls to the corresponding functions crash.\n\n•   Aliasing  CORE::GLOBAL::  functions to constants stopped working in Perl 5.10 but has now\nbeen fixed.\n\n•   When `...` or \"qx/.../\" calls a \"readpipe\"  override,  double-quotish  interpolation  now\nhappens,  as  is  the  case  when  there  is no override.  Previously, the presence of an\noverride would make these quote-like operators act like \"q{}\", suppressing interpolation.\n[perl #115330]\n\n•   \"<<<`...`\" here-docs (with backticks as the delimiters) now  call  \"readpipe\"  overrides.\n[perl #119827]\n\n•   &CORE::exit() and &CORE::die() now respect vmsish hints.\n\n•   Undefining  a  glob  that  triggers  a DESTROY method that undefines the same glob is now\nsafe.  It used to produce \"Attempt to free unreferenced glob pointer\" warnings  and  leak\nmemory.\n\n•   If subroutine redefinition (\"eval 'sub foo{}'\" or \"newXS\" for XS code) triggers a DESTROY\nmethod  on  the  sub that is being redefined, and that method assigns a subroutine to the\nsame slot (\"*foo = sub {}\"), $[0] is no longer left pointing to  a  freed  scalar.   Now\nDESTROY is delayed until the new subroutine has been installed.\n\n•   On  Windows, perl no longer calls CloseHandle() on a socket handle.  This makes debugging\neasier on Windows by removing certain irrelevant bad handle exceptions.  It also fixes  a\nrace  condition  that made socket functions randomly fail in a Perl process with multiple\nOS  threads,  and  possible  test  failures  in  dist/IO/t/cachepropagate-tcp.t.    [perl\n#120091/118059]\n\n•   Formats  involving  UTF-8  encoded  strings,  or  strange  vars  like ties, overloads, or\nstringified refs (and in recent perls, pure NOK vars) would generally do the wrong  thing\nin formats when the var is treated as a string and repeatedly chopped, as in \"^<<<~~\" and\nsimilar. This has now been resolved.  [perl #33832/45325/113868/119847/119849/119851]\n\n•   \"semctl(...,  SETVAL,  ...)\"  would  set the semaphore to the top 32-bits of the supplied\ninteger instead of the bottom 32-bits on 64-bit big-endian systems. [perl #120635]\n\n•   readdir() now only sets $!  on  error.   $!  is  no  longer  set  to  \"EBADF\"  when  then\nterminating  \"undef\"  is  read  from  the directory unless the system call sets $!. [perl\n#118651]\n\n•   &CORE::glob no longer causes an intermittent crash due to perl's stack getting corrupted.\n[perl #119993]\n\n•   \"open\" with layers that load modules (e.g., \"<:encoding(utf8)\") no longer runs  the  risk\nof crashing due to stack corruption.\n\n•   Perl  5.18  broke autoloading via \"->SUPER::foo\" method calls by looking up AUTOLOAD from\nthe current package rather than the current package's superclass.  This has  been  fixed.\n[perl #120694]\n\n•   A longstanding bug causing \"do {} until CONSTANT\", where the constant holds a true value,\nto  read  unallocated memory has been resolved.  This would usually happen after a syntax\nerror.  In past versions of Perl it has crashed intermittently. [perl #72406]\n\n•   Fix HP-UX $! failure. HP-UX strerror() returns an empty string for an unknown error code.\nThis caused an assertion to fail under  DEBUGGING  builds.   Now  instead,  the  returned\nstring for \"$!\" contains text indicating the code is for an unknown error.\n\n•   Individually-tied  elements  of  @INC (as in \"tie $INC[0]...\") are now handled correctly.\nFormerly, whether a sub returned by such a  tied  element  would  be  treated  as  a  sub\ndepended on whether a FETCH had occurred previously.\n\n•   \"getc\"  on  a  byte-sized  handle  after the same \"getc\" operator had been used on a utf8\nhandle used to treat the bytes as utf8, resulting in erratic  behavior  (e.g.,  malformed\nUTF-8 warnings).\n\n•   An  initial  \"{\" at the beginning of a format argument line was always interpreted as the\nbeginning of a block prior to v5.18.  In Perl v5.18,  it  started  being  treated  as  an\nambiguous  token.  The parser would guess whether it was supposed to be an anonymous hash\nconstructor or a block based on the  contents.   Now  the  previous  behaviour  has  been\nrestored.  [perl #119973]\n\n•   In Perl v5.18 \"undef *; goto &sub\" and \"local *; goto &sub\" started crashing.  This has\nbeen fixed. [perl #119949]\n\n•   Backticks  (  ``   or  \"  qx// \") combined with multiple threads on Win32 could result in\noutput sent to stdout on one thread being captured by backticks of an external command in\nanother thread.\n\nThis could occur for pseudo-forked processes too, as Win32's pseudo-fork  is  implemented\nin terms of threads.  [perl #77672]\n\n•   \"open  $fh,  \">+\",  undef\"  no  longer  leaks  memory  when TMPDIR is set but points to a\ndirectory a temporary file cannot be created in.  [perl #120951]\n\n•   \" for ( $h{k} || '' ) \" no longer auto-vivifies $h{k}.  [perl #120374]\n\n•   On Windows machines, Perl now emulates the  POSIX  use  of  the  environment  for  locale\ninitialization.    Previously,   the  environment  was  ignored.   See  \"ENVIRONMENT\"  in\nperllocale.\n\n•   Fixed a crash when destroying a self-referencing GLOB.  [perl #121242]\n"
                }
            ]
        },
        "Known Problems": {
            "content": "•   IO::Socket   is   known   to   fail   tests   on   AIX   5.3.    There   is    a    patch\n<https://github.com/Perl/perl5/issues/13484>  in  the request tracker, #120835, which may\nbe applied to future releases.\n\n•   The following modules are known to have test failures with this version of Perl.  Patches\nhave been submitted, so there will hopefully be new releases soon:\n\n•   Data::Structure::Util version 0.15\n\n•   HTML::StripScripts version 1.05\n\n•   List::Gather version 0.08.\n",
            "subsections": []
        },
        "Obituary": {
            "content": "Diana Rosa, 27, of Rio de Janeiro, went to her long rest on May  10,  2014,  along  with  the\nplush  camel  she kept hanging on her computer screen all the time. She was a passionate Perl\nhacker who loved the language and its community, and who never missed a Rio.pm event. She was\na true artist, an enthusiast about writing code, singing arias and  graffiting  walls.  We'll\nnever forget you.\n\nGreg McCarroll died on August 28, 2013.\n\nGreg  was  well  known  for  many  good  reasons.  He  was one of the organisers of the first\nYAPC::Europe, which concluded with an unscheduled auction where he frantically tried to raise\nextra money to avoid the conference making a loss. It was Greg who mistakenly arrived  for  a\nlondon.pm  meeting  a  week  late;  some  years  later  he was the one who sold the choice of\nofficial meeting date at a  YAPC::Europe  auction,  and  eventually  as  glorious  leader  of\nlondon.pm he got to inherit the irreverent confusion that he had created.\n\nAlways helpful, friendly and cheerfully optimistic, you will be missed, but never forgotten.\n",
            "subsections": []
        },
        "Acknowledgements": {
            "content": "Perl  5.20.0 represents approximately 12 months of development since Perl 5.18.0 and contains\napproximately 470,000 lines of changes across 2,900 files from 124 authors.\n\nExcluding auto-generated files, documentation and release  tools,  there  were  approximately\n280,000 lines of changes to 1,800 .pm, .t, .c and .h files.\n\nPerl  continues  to flourish into its third decade thanks to a vibrant community of users and\ndevelopers. The following people are known to have contributed the improvements  that  became\nPerl 5.20.0:\n\nAaron  Crane,  Abhijit  Menon-Sen,  Abigail,  Abir  Viqar, Alan Haggai Alavi, Alan Hourihane,\nAlexander Voronov, Alexandr Ciornii, Andy Dougherty, Anno Siegel, Aristotle Pagaltzis, Arthur\nAxel 'fREW' Schmidt, Brad Gilbert, Brendan Byrd, Brian Childs, Brian Fraser,  Brian  Gottreu,\nChris  'BinGOs'  Williams,  Christian  Millour,  Colin Kuskie, Craig A. Berry, Dabrien 'Dabe'\nMurphy,  Dagfinn  Ilmari  Mannsåker,  Daniel  Dragan,  Darin  McBride,  David  Golden,  David\nLeadbeater,  David  Mitchell,  David  Nicol,  David Steinbrunner, Dennis Kaarsemaker, Dominic\nHargreaves, Ed Avis, Eric Brine, Evan Zacks, Father Chrysostomos, Florian  Ragwitz,  François\nPerrad, Gavin Shelley, Gideon Israel Dsouza, Gisle Aas, Graham Knop, H.Merijn Brand, Hauke D,\nHeiko  Eissfeldt,  Hiroo  Hayashi,  Hojung  Youn, James E Keenan, Jarkko Hietaniemi, Jerry D.\nHedden, Jess Robinson, Jesse Luehrs, Johan Vromans, John Gardiner Myers, John Goodyear,  John\nP. Linderman, John Peacock, kafka, Kang-min Liu, Karen Etheridge, Karl Williamson, Keedi Kim,\nKent  Fredric,  kevin  dawson,  Kevin  Falcone,  Kevin Ryde, Leon Timmermans, Lukas Mai, Marc\nSimpson, Marcel Grünauer, Marco Peereboom, Marcus Holland-Moritz, Mark Jason Dominus,  Martin\nMcGrath,  Matthew  Horsfall,  Max  Maischein, Mike Doherty, Moritz Lenz, Nathan Glenn, Nathan\nTrapuzzano, Neil Bowers, Neil Williams, Nicholas Clark, Niels  Thykier,  Niko  Tyni,  Olivier\nMengué,  Owain  G.   Ainsworth,  Paul  Green, Paul Johnson, Peter John Acklam, Peter Martini,\nPeter Rabbitson, Petr Písař,  Philip  Boulain,  Philip  Guenther,  Piotr  Roszatycki,  Rafael\nGarcia-Suarez,  Reini  Urban, Reuben Thomas, Ricardo Signes, Ruslan Zakirov, Sergey Alekseev,\nShirakata Kentaro, Shlomi Fish, Slaven Rezic, Smylers, Steffen Müller,  Steve  Hay,  Sullivan\nBeck,  Thomas  Sibley,  Tobias  Leich,  Toby Inkster, Tokuhiro Matsuno, Tom Christiansen, Tom\nHukins, Tony Cook, Victor Efimov, Viktor Turskyi,  Vladimir  Timofeev,  YAMASHINA  Hio,  Yves\nOrton, Zefram, Zsbán Ambrus, Ævar Arnfjörð Bjarmason.\n\nThe  list  above is almost certainly incomplete as it is automatically generated from version\ncontrol history. In particular, it does not include the names of the (very much  appreciated)\ncontributors who reported issues to the Perl bug tracker.\n\nMany  of  the  changes  included  in  this version originated in the CPAN modules included in\nPerl's core. We're grateful to the entire CPAN community for helping Perl to flourish.\n\nFor a more complete list of all of Perl's historical contributors,  please  see  the  AUTHORS\nfile in the Perl source distribution.\n",
            "subsections": []
        },
        "Reporting Bugs": {
            "content": "If  you  find  what  you  think is a bug, you might check the articles recently posted to the\ncomp.lang.perl.misc newsgroup and the perl  bug  database  at  http://rt.perl.org/perlbug/  .\nThere may also be information at http://www.perl.org/ , the Perl Home Page.\n\nIf  you believe you have an unreported bug, please run the perlbug program included with your\nrelease.  Be sure to trim your bug down to a tiny but sufficient test case.  Your bug report,\nalong with the output of \"perl -V\", will be sent off to perlbug@perl.org to  be  analysed  by\nthe Perl porting team.\n\nIf  the  bug you are reporting has security implications, which make it inappropriate to send\nto a publicly archived mailing list, then please send it  to  perl5-security-report@perl.org.\nThis  points  to  a  closed subscription unarchived mailing list, which includes all the core\ncommitters, who will be able to help assess the impact of issues, figure  out  a  resolution,\nand  help  co-ordinate  the  release  of  patches  to  mitigate or fix the problem across all\nplatforms on which Perl is supported.  Please only use this address for  security  issues  in\nthe Perl core, not for modules independently distributed on CPAN.\n",
            "subsections": []
        },
        "SEE ALSO": {
            "content": "The Changes file for an explanation of how to view exhaustive details on what changed.\n\nThe INSTALL file for how to build Perl.\n\nThe README file for general stuff.\n\nThe Artistic and Copying files for copyright information.\n\nperl v5.38.2                                 2026-08-18                             PERL5200DELTA(1)",
            "subsections": []
        }
    },
    "summary": "perl5200delta - what is new for perl v5.20.0",
    "flags": [],
    "examples": [],
    "see_also": []
}