{
    "content": [
        {
            "type": "text",
            "text": "# perl5160delta (man)\n\n## NAME\n\nperl5160delta - what is new for perl v5.16.0\n\n## DESCRIPTION\n\nThis document describes differences between the 5.14.0 release and the 5.16.0 release.\n\n## Sections\n\n- **NAME**\n- **DESCRIPTION**\n- **Notice** (8 subsections)\n- **Security** (2 subsections)\n- **Deprecations** (26 subsections)\n- **Documentation** (3 subsections)\n- **Diagnostics** (36 subsections)\n- **Acknowledgements** (1 subsections)\n- **SEE ALSO**\n\nUse structuredContent.sections for detailed options, examples, and full documentation.\n"
        }
    ],
    "structuredContent": {
        "command": "perl5160delta",
        "section": "",
        "mode": "man",
        "summary": "perl5160delta - what is new for perl v5.16.0",
        "synopsis": null,
        "tldr_summary": null,
        "tldr_examples": [],
        "tldr_source": null,
        "flags": [],
        "examples": [],
        "see_also": [],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "DESCRIPTION",
                "lines": 8,
                "subsections": []
            },
            {
                "name": "Notice",
                "lines": 7,
                "subsections": [
                    {
                        "name": "Core Enhancements",
                        "lines": 34
                    },
                    {
                        "name": "New and Improved Built-ins",
                        "lines": 53
                    },
                    {
                        "name": "Unicode Support",
                        "lines": 143
                    },
                    {
                        "name": "XS Changes",
                        "lines": 37
                    },
                    {
                        "name": "Changes to Special Variables",
                        "lines": 16
                    },
                    {
                        "name": "Debugger Changes",
                        "lines": 20
                    },
                    {
                        "name": "The \"CORE\" Namespace",
                        "lines": 26
                    },
                    {
                        "name": "Other Changes",
                        "lines": 45
                    }
                ]
            },
            {
                "name": "Security",
                "lines": 5,
                "subsections": [
                    {
                        "name": "Malformed UTF-8 input could cause attempts to read beyond the end of the buffer",
                        "lines": 12
                    },
                    {
                        "name": "Privileges are now set correctly when assigning to $(",
                        "lines": 4
                    }
                ]
            },
            {
                "name": "Deprecations",
                "lines": 13,
                "subsections": [
                    {
                        "name": "Future Deprecations",
                        "lines": 6
                    },
                    {
                        "name": "Core Modules",
                        "lines": 20
                    },
                    {
                        "name": "Platforms with no supporting programmers",
                        "lines": 19
                    },
                    {
                        "name": "Other Future Deprecations",
                        "lines": 35
                    },
                    {
                        "name": "Incompatible Changes",
                        "lines": 1
                    },
                    {
                        "name": "Special blocks called in void context",
                        "lines": 3
                    },
                    {
                        "name": "The \"overloading\" pragma and regexp objects",
                        "lines": 3
                    },
                    {
                        "name": "Two XS typemap Entries removed",
                        "lines": 4
                    },
                    {
                        "name": "Unicode 6.1 has incompatibilities with Unicode 6.0",
                        "lines": 4
                    },
                    {
                        "name": "Borland compiler",
                        "lines": 3
                    },
                    {
                        "name": "Certain deprecated Unicode properties are no longer supported by default",
                        "lines": 9
                    },
                    {
                        "name": "Dereferencing IO thingies as typeglobs",
                        "lines": 5
                    },
                    {
                        "name": "User-defined case-changing operations",
                        "lines": 5
                    },
                    {
                        "name": "XSUBs are now 'static'",
                        "lines": 7
                    },
                    {
                        "name": "Weakening read-only references",
                        "lines": 3
                    },
                    {
                        "name": "Tying scalars that hold typeglobs",
                        "lines": 17
                    },
                    {
                        "name": "$$ no longer caches PID",
                        "lines": 5
                    },
                    {
                        "name": "$$ and \"getppid()\" no longer emulate POSIX semantics under LinuxThreads",
                        "lines": 9
                    },
                    {
                        "name": "$<, $>, $( and $) are no longer cached",
                        "lines": 16
                    },
                    {
                        "name": "Which Non-ASCII characters get quoted by \"quotemeta\" and \"\\Q\" has changed",
                        "lines": 5
                    },
                    {
                        "name": "Performance Enhancements",
                        "lines": 57
                    },
                    {
                        "name": "Modules and Pragmata",
                        "lines": 1
                    },
                    {
                        "name": "Deprecated Modules",
                        "lines": 4
                    },
                    {
                        "name": "New Modules and Pragmata",
                        "lines": 7
                    },
                    {
                        "name": "Updated Modules and Pragmata",
                        "lines": 390
                    },
                    {
                        "name": "Removed Modules and Pragmata",
                        "lines": 17
                    }
                ]
            },
            {
                "name": "Documentation",
                "lines": 1,
                "subsections": [
                    {
                        "name": "New Documentation",
                        "lines": 21
                    },
                    {
                        "name": "Changes to Existing Documentation",
                        "lines": 119
                    },
                    {
                        "name": "Removed Documentation",
                        "lines": 10
                    }
                ]
            },
            {
                "name": "Diagnostics",
                "lines": 3,
                "subsections": [
                    {
                        "name": "New Diagnostics",
                        "lines": 59
                    },
                    {
                        "name": "Removed Errors",
                        "lines": 9
                    },
                    {
                        "name": "Changes to Existing Diagnostics",
                        "lines": 39
                    },
                    {
                        "name": "Utility Changes",
                        "lines": 45
                    },
                    {
                        "name": "Configuration and Compilation",
                        "lines": 51
                    },
                    {
                        "name": "Platform Support",
                        "lines": 1
                    },
                    {
                        "name": "Platform-Specific Notes",
                        "lines": 50
                    },
                    {
                        "name": "Internal Changes",
                        "lines": 158
                    },
                    {
                        "name": "Selected Bug Fixes",
                        "lines": 1
                    },
                    {
                        "name": "Array and hash",
                        "lines": 34
                    },
                    {
                        "name": "C API fixes",
                        "lines": 26
                    },
                    {
                        "name": "Compile-time hints",
                        "lines": 16
                    },
                    {
                        "name": "Copy-on-write scalars",
                        "lines": 35
                    },
                    {
                        "name": "The debugger",
                        "lines": 23
                    },
                    {
                        "name": "Dereferencing operators",
                        "lines": 15
                    },
                    {
                        "name": "Filehandle, last-accessed",
                        "lines": 32
                    },
                    {
                        "name": "Filetests and \"stat\"",
                        "lines": 65
                    },
                    {
                        "name": "Formats",
                        "lines": 11
                    },
                    {
                        "name": "\"given\" and \"when\"",
                        "lines": 10
                    },
                    {
                        "name": "The \"glob\" operator",
                        "lines": 18
                    },
                    {
                        "name": "Lvalue subroutines",
                        "lines": 72
                    },
                    {
                        "name": "Overloading",
                        "lines": 9
                    },
                    {
                        "name": "Prototypes of built-in keywords",
                        "lines": 11
                    },
                    {
                        "name": "Regular expressions",
                        "lines": 131
                    },
                    {
                        "name": "Smartmatching",
                        "lines": 8
                    },
                    {
                        "name": "The \"sort\" operator",
                        "lines": 20
                    },
                    {
                        "name": "The \"substr\" operator",
                        "lines": 17
                    },
                    {
                        "name": "Support for embedded nulls",
                        "lines": 19
                    },
                    {
                        "name": "Threading bugs",
                        "lines": 17
                    },
                    {
                        "name": "Tied variables",
                        "lines": 67
                    },
                    {
                        "name": "Version objects and vstrings",
                        "lines": 19
                    },
                    {
                        "name": "Warnings, redefinition",
                        "lines": 32
                    },
                    {
                        "name": "Warnings, \"Uninitialized\"",
                        "lines": 16
                    },
                    {
                        "name": "Weak references",
                        "lines": 17
                    },
                    {
                        "name": "Other notable fixes",
                        "lines": 179
                    },
                    {
                        "name": "Known Problems",
                        "lines": 34
                    }
                ]
            },
            {
                "name": "Acknowledgements",
                "lines": 42,
                "subsections": [
                    {
                        "name": "Reporting Bugs",
                        "lines": 17
                    }
                ]
            },
            {
                "name": "SEE ALSO",
                "lines": 11,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "perl5160delta - what is new for perl v5.16.0\n",
                "subsections": []
            },
            "DESCRIPTION": {
                "content": "This document describes differences between the 5.14.0 release and the 5.16.0 release.\n\nIf you are upgrading from an earlier release such as 5.12.0, first read perl5140delta, which\ndescribes differences between 5.12.0 and 5.14.0.\n\nSome bug fixes in this release have been backported to later releases of 5.14.x.  Those are\nindicated with the 5.14.x version in parentheses.\n",
                "subsections": []
            },
            "Notice": {
                "content": "With the release of Perl 5.16.0, the 5.12.x series of releases is now out of its support\nperiod.  There may be future 5.12.x releases, but only in the event of a critical security\nissue.  Users of Perl 5.12 or earlier should consider upgrading to a more recent release of\nPerl.\n\nThis policy is described in greater detail in perlpolicy.\n",
                "subsections": [
                    {
                        "name": "Core Enhancements",
                        "content": "\"use VERSION\"\nAs of this release, version declarations like \"use v5.16\" now disable all features before\nenabling the new feature bundle.  This means that the following holds true:\n\nuse 5.016;\n# only 5.16 features enabled here\nuse 5.014;\n# only 5.14 features enabled here (not 5.16)\n\n\"use v5.12\" and higher continue to enable strict, but explicit \"use strict\" and \"no strict\"\nnow override the version declaration, even when they come first:\n\nno strict;\nuse 5.012;\n# no strict here\n\nThere is a new \":default\" feature bundle that represents the set of features enabled before\nany version declaration or \"use feature\" has been seen.  Version declarations below 5.10 now\nenable the \":default\" feature set.  This does not actually change the behavior of \"use v5.8\",\nbecause features added to the \":default\" set are those that were traditionally enabled by\ndefault, before they could be turned off.\n\n\"no feature\" now resets to the default feature set.  To disable all features (which is likely\nto be a pretty special-purpose request, since it presumably won't match any named set of\nsemantics) you can now write \"no feature ':all'\".\n\n$[ is now disabled under \"use v5.16\".  It is part of the default feature set and can be\nturned on or off explicitly with \"use feature 'arraybase'\".\n\n\"SUB\"\nThe new \"SUB\" token, available under the \"currentsub\" feature (see feature) or \"use\nv5.16\", returns a reference to the current subroutine, making it easier to write recursive\nclosures.\n"
                    },
                    {
                        "name": "New and Improved Built-ins",
                        "content": "More consistent \"eval\"\n\nThe \"eval\" operator sometimes treats a string argument as a sequence of characters and\nsometimes as a sequence of bytes, depending on the internal encoding.  The internal encoding\nis not supposed to make any difference, but there is code that relies on this inconsistency.\n\nThe new \"unicodeeval\" and \"evalbytes\" features (enabled under \"use 5.16.0\") resolve this.\nThe \"unicodeeval\" feature causes \"eval $string\" to treat the string always as Unicode.  The\n\"evalbytes\" features provides a function, itself called \"evalbytes\", which evaluates its\nargument always as a string of bytes.\n\nThese features also fix oddities with source filters leaking to outer dynamic scopes.\n\nSee feature for more detail.\n\n\"substr\" lvalue revamp\n\nWhen \"substr\" is called in lvalue or potential lvalue context with two or three arguments, a\nspecial lvalue scalar is returned that modifies the original string (the first argument) when\nassigned to.\n\nPreviously, the offsets (the second and third arguments) passed to \"substr\" would be\nconverted immediately to match the string, negative offsets being translated to positive and\noffsets beyond the end of the string being truncated.\n\nNow, the offsets are recorded without modification in the special lvalue scalar that is\nreturned, and the original string is not even looked at by \"substr\" itself, but only when the\nreturned lvalue is read or modified.\n\nThese changes result in an incompatible change:\n\nIf the original string changes length after the call to \"substr\" but before assignment to its\nreturn value, negative offsets will remember their position from the end of the string,\naffecting code like this:\n\nmy $string = \"string\";\nmy $lvalue = \\substr $string, -4, 2;\nprint $$lvalue, \"\\n\"; # prints \"ri\"\n$string = \"bailing twine\";\nprint $$lvalue, \"\\n\"; # prints \"wi\"; used to print \"il\"\n\nThe same thing happens with an omitted third argument.  The returned lvalue will always\nextend to the end of the string, even if the string becomes longer.\n\nSince this change also allowed many bugs to be fixed (see \"The \"substr\" operator\"), and since\nthe behavior of negative offsets has never been specified, the change was deemed acceptable.\n\nReturn value of \"tied\"\n\nThe value returned by \"tied\" on a tied variable is now the actual scalar that holds the\nobject to which the variable is tied.  This lets ties be weakened with\n\"Scalar::Util::weaken(tied $tiedvariable)\".\n"
                    },
                    {
                        "name": "Unicode Support",
                        "content": "Supports (almost) Unicode 6.1\n\nBesides the addition of whole new scripts, and new characters in existing scripts, this new\nversion of Unicode, as always, makes some changes to existing characters.  One change that\nmay trip up some applications is that the General Category of two characters in the Latin-1\nrange, PILCROW SIGN and SECTION SIGN, has been changed from OtherSymbol to\nOtherPunctuation.  The same change has been made for a character in each of Tibetan,\nEthiopic, and Aegean.  The code points U+3248..U+324F (CIRCLED NUMBER TEN ON BLACK SQUARE\nthrough CIRCLED NUMBER EIGHTY ON BLACK SQUARE) have had their General Category changed from\nOtherSymbol to OtherNumeric.  The Line Break property has changes for Hebrew and Japanese;\nand because of other changes in 6.1, the Perl regular expression construct \"\\X\" now works\ndifferently for some characters in Thai and Lao.\n\nNew aliases (synonyms) have been defined for many property values; these, along with the\npreviously existing ones, are all cross-indexed in perluniprops.\n\nThe return value of \"charnames::viacode()\" is affected by other changes:\n\nCode point      Old Name             New Name\nU+000A    LINE FEED (LF)        LINE FEED\nU+000C    FORM FEED (FF)        FORM FEED\nU+000D    CARRIAGE RETURN (CR)  CARRIAGE RETURN\nU+0085    NEXT LINE (NEL)       NEXT LINE\nU+008E    SINGLE-SHIFT 2        SINGLE-SHIFT-2\nU+008F    SINGLE-SHIFT 3        SINGLE-SHIFT-3\nU+0091    PRIVATE USE 1         PRIVATE USE-1\nU+0092    PRIVATE USE 2         PRIVATE USE-2\nU+2118    SCRIPT CAPITAL P      WEIERSTRASS ELLIPTIC FUNCTION\n\nPerl will accept any of these names as input, but \"charnames::viacode()\" now returns the new\nname of each pair.  The change for U+2118 is considered by Unicode to be a correction, that\nis the original name was a mistake (but again, it will remain forever valid to use it to\nrefer to U+2118).  But most of these changes are the fallout of the mistake Unicode 6.0 made\nin naming a character used in Japanese cell phones to be \"BELL\", which conflicts with the\nlongstanding industry use of (and Unicode's recommendation to use) that name to mean the\nASCII control character at U+0007.  Therefore, that name has been deprecated in Perl since\nv5.14, and any use of it will raise a warning message (unless turned off).  The name \"ALERT\"\nis now the preferred name for this code point, with \"BEL\" an acceptable short form.  The name\nfor the new cell phone character, at code point U+1F514, remains undefined in this version of\nPerl (hence we don't implement quite all of Unicode 6.1), but starting in v5.18, BELL will\nmean this character, and not U+0007.\n\nUnicode has taken steps to make sure that this sort of mistake does not happen again.  The\nStandard now includes all generally accepted names and abbreviations for control characters,\nwhereas previously it didn't (though there were recommended names for most of them, which\nPerl used).  This means that most of those recommended names are now officially in the\nStandard.  Unicode did not recommend names for the four code points listed above between\nU+008E and U+008F, and in standardizing them Unicode subtly changed the names that Perl had\npreviously given them, by replacing the final blank in each name by a hyphen.  Unicode also\nofficially accepts names that Perl had deprecated, such as FILE SEPARATOR.  Now the only\ndeprecated name is BELL.  Finally, Perl now uses the new official names instead of the old\n(now considered obsolete) names for the first four code points in the list above (the ones\nwhich have the parentheses in them).\n\nNow that the names have been placed in the Unicode standard, these kinds of changes should\nnot happen again, though corrections, such as to U+2118, are still possible.\n\nUnicode also added some name abbreviations, which Perl now accepts: SP for SPACE; TAB for\nCHARACTER TABULATION; NEW LINE, END OF LINE, NL, and EOL for LINE FEED; LOCKING-SHIFT ONE for\nSHIFT OUT; LOCKING-SHIFT ZERO for SHIFT IN; and ZWNBSP for ZERO WIDTH NO-BREAK SPACE.\n\nMore details on this version of Unicode are provided in\n<http://www.unicode.org/versions/Unicode6.1.0/>.\n\n\"use charnames\" is no longer needed for \"\\N{name}\"\n\nWhen \"\\N{name}\" is encountered, the \"charnames\" module is now automatically loaded when\nneeded as if the \":full\" and \":short\" options had been specified.  See charnames for more\ninformation.\n\n\"\\N{...}\" can now have Unicode loose name matching\n\nThis is described in the \"charnames\" item in \"Updated Modules and Pragmata\" below.\n\nUnicode Symbol Names\n\nPerl now has proper support for Unicode in symbol names.  It used to be that \"*{$foo}\" would\nignore the internal UTF8 flag and use the bytes of the underlying representation to look up\nthe symbol.  That meant that \"*{\"\\x{100}\"}\" and \"*{\"\\xc4\\x80\"}\" would return the same thing.\nAll these parts of Perl have been fixed to account for Unicode:\n\n•   Method names (including those passed to \"use overload\")\n\n•   Typeglob names (including names of variables, subroutines, and filehandles)\n\n•   Package names\n\n•   \"goto\"\n\n•   Symbolic dereferencing\n\n•   Second argument to \"bless()\" and \"tie()\"\n\n•   Return value of \"ref()\"\n\n•   Subroutine prototypes\n\n•   Attributes\n\n•   Various warnings and error messages that mention variable names or values, methods, etc.\n\nIn addition, a parsing bug has been fixed that prevented \"*{é}\" from implicitly quoting the\nname, but instead interpreted it as \"*{+é}\", which would cause a strict violation.\n\n\"*{\"*a::b\"}\" automatically strips off the * if it is followed by an ASCII letter.  That has\nbeen extended to all Unicode identifier characters.\n\nOne-character non-ASCII non-punctuation variables (like $é) are now subject to \"Used only\nonce\" warnings.  They used to be exempt, as they were treated as punctuation variables.\n\nAlso, single-character Unicode punctuation variables (like $‰) are now supported [perl\n#69032].\n\nImproved ability to mix locales and Unicode, including UTF-8 locales\n\nAn optional parameter has been added to \"use locale\"\n\nuse locale ':notcharacters';\n\nwhich tells Perl to use all but the \"LCCTYPE\" and \"LCCOLLATE\" portions of the current\nlocale.  Instead, the character set is assumed to be Unicode.  This lets locales and Unicode\nbe seamlessly mixed, including the increasingly frequent UTF-8 locales.  When using this\nhybrid form of locales, the \":locale\" layer to the open pragma can be used to interface with\nthe file system, and there are CPAN modules available for ARGV and environment variable\nconversions.\n\nFull details are in perllocale.\n\nNew function \"fc\" and corresponding escape sequence \"\\F\" for Unicode foldcase\n\nUnicode foldcase is an extension to lowercase that gives better results when comparing two\nstrings case-insensitively.  It has long been used internally in regular expression \"/i\"\nmatching.  Now it is available explicitly through the new \"fc\" function call (enabled by\n\"use feature 'fc'\", or \"use v5.16\", or explicitly callable via \"CORE::fc\") or through the new\n\"\\F\" sequence in double-quotish strings.\n\nFull details are in \"fc\" in perlfunc.\n\nThe Unicode \"ScriptExtensions\" property is now supported.\n\nNew in Unicode 6.0, this is an improved \"Script\" property.  Details are in \"Scripts\" in\nperlunicode.\n"
                    },
                    {
                        "name": "XS Changes",
                        "content": "Improved typemaps for Some Builtin Types\n\nMost XS authors will know there is a longstanding bug in the OUTPUT typemap for TAVREF\n(\"AV*\"), THVREF (\"HV*\"), TCVREF (\"CV*\"), and TSVREF (\"SVREF\" or \"\\$foo\") that requires\nmanually decrementing the reference count of the return value instead of the typemap taking\ncare of this.  For backwards-compatibility, this cannot be changed in the default typemaps.\nBut we now provide additional typemaps \"TAVREFREFCOUNTFIXED\", etc. that do not exhibit\nthis bug.  Using them in your extension is as simple as having one line in your \"TYPEMAP\"\nsection:\n\nHV*   THVREFREFCOUNTFIXED\n\n\"isutf8char()\"\n\nThe XS-callable function \"isutf8char()\", when presented with malformed UTF-8 input, can\nread up to 12 bytes beyond the end of the string.  This cannot be fixed without changing its\nAPI, and so its use is now deprecated.  Use \"isutf8charbuf()\" (described just below)\ninstead.\n\nAdded \"isutf8charbuf()\"\n\nThis function is designed to replace the deprecated \"isutf8char()\" function.  It includes\nan extra parameter to make sure it doesn't read past the end of the input buffer.\n\nOther \"isutf8foo()\" functions, as well as \"utf8tofoo()\", etc.\n\nMost other XS-callable functions that take UTF-8 encoded input implicitly assume that the\nUTF-8 is valid (not malformed) with respect to buffer length.  Do not do things such as\nchange a character's case or see if it is alphanumeric without first being sure that it is\nvalid UTF-8.  This can be safely done for a whole string by using one of the functions\n\"isutf8string()\", \"isutf8stringloc()\", and \"isutf8stringloclen()\".\n\nNew Pad API\n\nMany new functions have been added to the API for manipulating lexical pads.  See \"Pad Data\nStructures\" in perlapi for more information.\n"
                    },
                    {
                        "name": "Changes to Special Variables",
                        "content": "$$ can be assigned to\n\n$$ was made read-only in Perl 5.8.0.  But only sometimes: \"local $$\" would make it writable\nagain.  Some CPAN modules were using \"local $$\" or XS code to bypass the read-only check, so\nthere is no reason to keep $$ read-only.  (This change also allowed a bug to be fixed while\nmaintaining backward compatibility.)\n\n$^X converted to an absolute path on FreeBSD, OS X and Solaris\n\n$^X is now converted to an absolute path on OS X, FreeBSD (without needing /proc mounted) and\nSolaris 10 and 11.  This augments the previous approach of using /proc on Linux, FreeBSD, and\nNetBSD (in all cases, where mounted).\n\nThis makes relocatable perl installations more useful on these platforms.  (See \"Relocatable\n@INC\" in INSTALL)\n"
                    },
                    {
                        "name": "Debugger Changes",
                        "content": "Features inside the debugger\n\nThe current Perl's feature bundle is now enabled for commands entered in the interactive\ndebugger.\n\nNew option for the debugger's tt command\n\nThe t command in the debugger, which toggles tracing mode, now accepts a numeric argument\nthat determines how many levels of subroutine calls to trace.\n\n\"enable\" and \"disable\"\n\nThe debugger now has \"disable\" and \"enable\" commands for disabling existing breakpoints and\nre-enabling them.  See perldebug.\n\nBreakpoints with file names\n\nThe debugger's \"b\" command for setting breakpoints now lets a line number be prefixed with a\nfile name.  See \"b [file]:[line] [condition]\" in perldebug.\n"
                    },
                    {
                        "name": "The \"CORE\" Namespace",
                        "content": "The \"CORE::\" prefix\n\nThe \"CORE::\" prefix can now be used on keywords enabled by feature.pm, even outside the scope\nof \"use feature\".\n\nSubroutines in the \"CORE\" namespace\n\nMany Perl keywords are now available as subroutines in the CORE namespace.  This lets them be\naliased:\n\nBEGIN { *entangle = \\&CORE::tie }\nentangle $variable, $package, @args;\n\nAnd for prototypes to be bypassed:\n\nsub mytie(\\[%$*@]$@) {\nmy ($ref, $pack, @args) = @;\n... do something ...\ngoto &CORE::tie;\n}\n\nSome of these cannot be called through references or via &foo syntax, but must be called as\nbarewords.\n\nSee CORE for details.\n"
                    },
                    {
                        "name": "Other Changes",
                        "content": "Anonymous handles\n\nAutomatically generated file handles are now named ANONIO when the variable name cannot\nbe determined, rather than $ANONIO.\n\nAutoloaded sort Subroutines\n\nCustom sort subroutines can now be autoloaded [perl #30661]:\n\nsub AUTOLOAD { ... }\n@sorted = sort foo @list; # uses AUTOLOAD\n\n\"continue\" no longer requires the \"switch\" feature\n\nThe \"continue\" keyword has two meanings.  It can introduce a \"continue\" block after a loop,\nor it can exit the current \"when\" block.  Up to now, the latter meaning was valid only with\nthe \"switch\" feature enabled, and was a syntax error otherwise.  Since the main purpose of\nfeature.pm is to avoid conflicts with user-defined subroutines, there is no reason for\n\"continue\" to depend on it.\n\nDTrace probes for interpreter phase change\n\nThe \"phase-change\" probes will fire when the interpreter's phase changes, which tracks the\n\"${^GLOBALPHASE}\" variable.  \"arg0\" is the new phase name; \"arg1\" is the old one.  This is\nuseful for limiting your instrumentation to one or more of: compile time, run time, or\ndestruct time.\n\n\"FILE()\" Syntax\n\nThe \"FILE\", \"LINE\" and \"PACKAGE\" tokens can now be written with an empty pair of\nparentheses after them.  This makes them parse the same way as \"time\", \"fork\" and other\nbuilt-in functions.\n\nThe \"\\$\" prototype accepts any scalar lvalue\n\nThe \"\\$\" and \"\\[$]\" subroutine prototypes now accept any scalar lvalue argument.  Previously\nthey accepted only scalars beginning with \"$\" and hash and array elements.  This change makes\nthem consistent with the way the built-in \"read\" and \"recv\" functions (among others) parse\ntheir arguments.  This means that one can override the built-in functions with custom\nsubroutines that parse their arguments the same way.\n\n\"\" in subroutine prototypes\n\nThe \"\" character in subroutine prototypes is now allowed before \"@\" or \"%\".\n"
                    }
                ]
            },
            "Security": {
                "content": "Use \"isutf8charbuf()\" and not \"isutf8char()\"\nThe latter function is now deprecated because its API is insufficient to guarantee that it\ndoesn't read (up to 12 bytes in the worst case) beyond the end of its input string.  See\nisutf8charbuf().\n",
                "subsections": [
                    {
                        "name": "Malformed UTF-8 input could cause attempts to read beyond the end of the buffer",
                        "content": "Two new XS-accessible functions, \"utf8touvchrbuf()\" and \"utf8touvunibuf()\" are now\navailable to prevent this, and the Perl core has been converted to use them.  See \"Internal\nChanges\".\n\n\"File::Glob::bsdglob()\" memory error with GLOBALTDIRFUNC (CVE-2011-2728).\nCalling \"File::Glob::bsdglob\" with the unsupported flag GLOBALTDIRFUNC would cause an\naccess violation / segfault.  A Perl program that accepts a flags value from an external\nsource could expose itself to denial of service or arbitrary code execution attacks.  There\nare no known exploits in the wild.  The problem has been corrected by explicitly disabling\nall unsupported flags and setting unused function pointers to null.  Bug reported by Clément\nLecigne. (5.14.2)\n"
                    },
                    {
                        "name": "Privileges are now set correctly when assigning to $(",
                        "content": "A hypothetical bug (probably unexploitable in practice) because the incorrect setting of the\neffective group ID while setting $( has been fixed.  The bug would have affected only systems\nthat have \"setresgid()\" but not \"setregid()\", but no such systems are known to exist.\n"
                    }
                ]
            },
            "Deprecations": {
                "content": "Don't read the Unicode data base files in lib/unicore\nIt is now deprecated to directly read the Unicode data base files.  These are stored in the\nlib/unicore directory.  Instead, you should use the new functions in Unicode::UCD.  These\nprovide a stable API, and give complete information.\n\nPerl may at some point in the future change or remove these files.  The file which\napplications were most likely to have used is lib/unicore/ToDigit.pl.  \"propinvmap()\" in\nUnicode::UCD can be used to get at its data instead.\n\nXS functions \"isutf8char()\", \"utf8touvchr()\" and \"utf8touvuni()\"\nThis function is deprecated because it could read beyond the end of the input string.  Use\nthe new isutf8charbuf(), \"utf8touvchrbuf()\" and \"utf8touvunibuf()\" instead.\n",
                "subsections": [
                    {
                        "name": "Future Deprecations",
                        "content": "This section serves as a notice of features that are likely to be removed or deprecated in\nthe next release of perl (5.18.0).  If your code depends on these features, you should\ncontact the Perl 5 Porters via the mailing list\n<http://lists.perl.org/list/perl5-porters.html> or perlbug to explain your use case and\ninform the deprecation process.\n"
                    },
                    {
                        "name": "Core Modules",
                        "content": "These modules may be marked as deprecated from the core.  This only means that they will no\nlonger be installed by default with the core distribution, but will remain available on the\nCPAN.\n\n•   CPANPLUS\n\n•   Filter::Simple\n\n•   PerlIO::mmap\n\n•   Pod::LaTeX\n\n•   Pod::Parser\n\n•   SelfLoader\n\n•   Text::Soundex\n\n•   Thread.pm\n"
                    },
                    {
                        "name": "Platforms with no supporting programmers",
                        "content": "These platforms will probably have their special build support removed during the 5.17.0\ndevelopment series.\n\n•   BeOS\n\n•   djgpp\n\n•   dgux\n\n•   EPOC\n\n•   MPE/iX\n\n•   Rhapsody\n\n•   UTS\n\n•   VM/ESA\n"
                    },
                    {
                        "name": "Other Future Deprecations",
                        "content": "•   Swapping of $< and $>\n\nFor more information about this future deprecation, see the relevant RT ticket\n<https://github.com/Perl/perl5/issues/11547>.\n\n•   sfio, stdio\n\nPerl supports being built without PerlIO proper, using a stdio or sfio wrapper instead.\nA perl build like this will not support IO layers and thus Unicode IO, making it rather\nhandicapped.\n\nPerlIO supports a \"stdio\" layer if stdio use is desired, and similarly a sfio layer could\nbe produced.\n\n•   Unescaped literal \"{\" in regular expressions.\n\nStarting with v5.20, it is planned to require a literal \"{\" to be escaped, for example by\npreceding it with a backslash.  In v5.18, a deprecated warning message will be emitted\nfor all such uses.  This affects only patterns that are to match a literal \"{\".  Other\nuses of this character, such as part of a quantifier or sequence as in those below, are\ncompletely unaffected:\n\n/foo{3,5}/\n/\\p{Alphabetic}/\n/\\N{DIGIT ZERO}\n\nRemoving this will permit extensions to Perl's pattern syntax and better error checking\nfor existing syntax.  See \"Quantifiers\" in perlre for an example.\n\n•   Revamping \"\\Q\" semantics in double-quotish strings when combined with other escapes.\n\nThere are several bugs and inconsistencies involving combinations of \"\\Q\" and escapes\nlike \"\\x\", \"\\L\", etc., within a \"\\Q...\\E\" pair.  These need to be fixed, and doing so\nwill necessarily change current behavior.  The changes have not yet been settled.\n"
                    },
                    {
                        "name": "Incompatible Changes",
                        "content": ""
                    },
                    {
                        "name": "Special blocks called in void context",
                        "content": "Special blocks (\"BEGIN\", \"CHECK\", \"INIT\", \"UNITCHECK\", \"END\") are now called in void context.\nThis avoids wasteful copying of the result of the last statement [perl #108794].\n"
                    },
                    {
                        "name": "The \"overloading\" pragma and regexp objects",
                        "content": "With \"no overloading\", regular expression objects returned by \"qr//\" are now stringified as\n\"Regexp=REGEXP(0xbe600d)\" instead of the regular expression itself [perl #108780].\n"
                    },
                    {
                        "name": "Two XS typemap Entries removed",
                        "content": "Two presumably unused XS typemap entries have been removed from the core typemap: TDATAUNIT\nand TCALLBACK.  If you are, against all odds, a user of these, please see the instructions\non how to restore them in perlxstypemap.\n"
                    },
                    {
                        "name": "Unicode 6.1 has incompatibilities with Unicode 6.0",
                        "content": "These are detailed in \"Supports (almost) Unicode 6.1\" above.  You can compile this version of\nPerl to use Unicode 6.0.  See \"Hacking Perl to work on earlier Unicode versions (for very\nserious hackers only)\" in perlunicode.\n"
                    },
                    {
                        "name": "Borland compiler",
                        "content": "All support for the Borland compiler has been dropped.  The code had not worked for a long\ntime anyway.\n"
                    },
                    {
                        "name": "Certain deprecated Unicode properties are no longer supported by default",
                        "content": "Perl should never have exposed certain Unicode properties that are used by Unicode internally\nand not meant to be publicly available.  Use of these has generated deprecated warning\nmessages since Perl 5.12.  The removed properties are OtherAlphabetic,\nOtherDefaultIgnorableCodePoint, OtherGraphemeExtend, OtherIDContinue, OtherIDStart,\nOtherLowercase, OtherMath, and OtherUppercase.\n\nPerl may be recompiled to include any or all of them; instructions are given in \"Unicode\ncharacter properties that are NOT accepted by Perl\" in perluniprops.\n"
                    },
                    {
                        "name": "Dereferencing IO thingies as typeglobs",
                        "content": "The \"*{...}\" operator, when passed a reference to an IO thingy (as in \"*{*STDIN{IO}}\"),\ncreates a new typeglob containing just that IO object.  Previously, it would stringify as an\nempty string, but some operators would treat it as undefined, producing an \"uninitialized\"\nwarning.  Now it stringifies as ANONIO [perl #96326].\n"
                    },
                    {
                        "name": "User-defined case-changing operations",
                        "content": "This feature was deprecated in Perl 5.14, and has now been removed.  The CPAN module\nUnicode::Casing provides better functionality without the drawbacks that this feature had, as\nare detailed in the 5.14 documentation:\n<http://perldoc.perl.org/5.14.0/perlunicode.html#User-Defined-Case-Mappings-%28for-serious-hackers-only%29>\n"
                    },
                    {
                        "name": "XSUBs are now 'static'",
                        "content": "XSUB C functions are now 'static', that is, they are not visible from outside the compilation\nunit.  Users can use the new \"XSEXTERNAL(name)\" and \"XSINTERNAL(name)\" macros to pick the\ndesired linking behavior.  The ordinary \"XS(name)\" declaration for XSUBs will continue to\ndeclare non-'static' XSUBs for compatibility, but the XS compiler, ExtUtils::ParseXS\n(\"xsubpp\") will emit 'static' XSUBs by default.  ExtUtils::ParseXS's behavior can be\nreconfigured from XS using the \"EXPORTXSUBSYMBOLS\" keyword.  See perlxs for details.\n"
                    },
                    {
                        "name": "Weakening read-only references",
                        "content": "Weakening read-only references is no longer permitted.  It should never have worked anyway,\nand could sometimes result in crashes.\n"
                    },
                    {
                        "name": "Tying scalars that hold typeglobs",
                        "content": "Attempting to tie a scalar after a typeglob was assigned to it would instead tie the handle\nin the typeglob's IO slot.  This meant that it was impossible to tie the scalar itself.\nSimilar problems affected \"tied\" and \"untie\": \"tied $scalar\" would return false on a tied\nscalar if the last thing returned was a typeglob, and \"untie $scalar\" on such a tied scalar\nwould do nothing.\n\nWe fixed this problem before Perl 5.14.0, but it caused problems with some CPAN modules, so\nwe put in a deprecation cycle instead.\n\nNow the deprecation has been removed and this bug has been fixed.  So \"tie $scalar\" will\nalways tie the scalar, not the handle it holds.  To tie the handle, use \"tie *$scalar\" (with\nan explicit asterisk).  The same applies to \"tied *$scalar\" and \"untie *$scalar\".\n\nIPC::Open3 no longer provides \"xfork()\", \"xcloseonexec()\" and \"xpipeanon()\"\nAll three functions were private, undocumented, and unexported.  They do not appear to be\nused by any code on CPAN.  Two have been inlined and one deleted entirely.\n"
                    },
                    {
                        "name": "$$ no longer caches PID",
                        "content": "Previously, if one called fork(3) from C, Perl's notion of $$ could go out of sync with what\ngetpid() returns.  By always fetching the value of $$ via getpid(), this potential bug is\neliminated.  Code that depends on the caching behavior will break.  As described in Core\nEnhancements, $$ is now writable, but it will be reset during a fork.\n"
                    },
                    {
                        "name": "$$ and \"getppid()\" no longer emulate POSIX semantics under LinuxThreads",
                        "content": "The POSIX emulation of $$ and \"getppid()\" under the obsolete LinuxThreads implementation has\nbeen removed.  This only impacts users of Linux 2.4 and users of Debian GNU/kFreeBSD up to\nand including 6.0, not the vast majority of Linux installations that use NPTL threads.\n\nThis means that \"getppid()\", like $$, is now always guaranteed to return the OS's idea of the\ncurrent state of the process, not perl's cached version of it.\n\nSee the documentation for $$ for details.\n"
                    },
                    {
                        "name": "$<, $>, $( and $) are no longer cached",
                        "content": "Similarly to the changes to $$ and \"getppid()\", the internal caching of $<, $>, $( and $) has\nbeen removed.\n\nWhen we cached these values our idea of what they were would drift out of sync with reality\nif someone (e.g., someone embedding perl) called \"sete?[ug]id()\" without updating\n\"PLe?[ug]id\".  Having to deal with this complexity wasn't worth it given how cheap the\n\"gete?[ug]id()\" system call is.\n\nThis change will break a handful of CPAN modules that use the XS-level \"PLuid\", \"PLgid\",\n\"PLeuid\" or \"PLegid\" variables.\n\nThe fix for those breakages is to use \"PerlProcgete?[ug]id()\" to retrieve them (e.g.,\n\"PerlProcgetuid()\"), and not to assign to \"PLe?[ug]id\" if you change the UID/GID/EUID/EGID.\nThere is no longer any need to do so since perl will always retrieve the up-to-date version\nof those values from the OS.\n"
                    },
                    {
                        "name": "Which Non-ASCII characters get quoted by \"quotemeta\" and \"\\Q\" has changed",
                        "content": "This is unlikely to result in a real problem, as Perl does not attach special meaning to any\nnon-ASCII character, so it is currently irrelevant which are quoted or not.  This change\nfixes bug [perl #77654] and brings Perl's behavior more into line with Unicode's\nrecommendations.  See \"quotemeta\" in perlfunc.\n"
                    },
                    {
                        "name": "Performance Enhancements",
                        "content": "•   Improved performance for Unicode properties in regular expressions\n\nMatching a code point against a Unicode property is now done via a binary search instead\nof linear.  This means for example that the worst case for a 1000 item property is 10\nprobes instead of 1000.  This inefficiency has been compensated for in the past by\npermanently storing in a hash the results of a given probe plus the results for the\nadjacent 64 code points, under the theory that near-by code points are likely to be\nsearched for.  A separate hash was used for each mention of a Unicode property in each\nregular expression.  Thus, \"qr/\\p{foo}abc\\p{foo}/\" would generate two hashes.  Any probes\nin one instance would be unknown to the other, and the hashes could expand separately to\nbe quite large if the regular expression were used on many different widely-separated\ncode points.  Now, however, there is just one hash shared by all instances of a given\nproperty.  This means that if \"\\p{foo}\" is matched against \"A\" in one regular expression\nin a thread, the result will be known immediately to all regular expressions, and the\nrelentless march of using up memory is slowed considerably.\n\n•   Version declarations with the \"use\" keyword (e.g., \"use 5.012\") are now faster, as they\nenable features without loading feature.pm.\n\n•   \"local $\" is faster now, as it no longer iterates through magic that it is not going to\ncopy anyway.\n\n•   Perl 5.12.0 sped up the destruction of objects whose classes define empty \"DESTROY\"\nmethods (to prevent autoloading), by simply not calling such empty methods.  This release\ntakes this optimization a step further, by not calling any \"DESTROY\" method that begins\nwith a \"return\" statement.  This can be useful for destructors that are only used for\ndebugging:\n\nuse constant DEBUG => 1;\nsub DESTROY { return unless DEBUG; ... }\n\nConstant-folding will reduce the first statement to \"return;\" if DEBUG is set to 0,\ntriggering this optimization.\n\n•   Assigning to a variable that holds a typeglob or copy-on-write scalar is now much faster.\nPreviously the typeglob would be stringified or the copy-on-write scalar would be copied\nbefore being clobbered.\n\n•   Assignment to \"substr\" in void context is now more than twice its previous speed.\nInstead of creating and returning a special lvalue scalar that is then assigned to,\n\"substr\" modifies the original string itself.\n\n•   \"substr\" no longer calculates a value to return when called in void context.\n\n•   Due to changes in File::Glob, Perl's \"glob\" function and its \"<...>\" equivalent are now\nmuch faster.  The splitting of the pattern into words has been rewritten in C, resulting\nin speed-ups of 20% for some cases.\n\nThis does not affect \"glob\" on VMS, as it does not use File::Glob.\n\n•   The short-circuiting operators \"&&\", \"||\", and \"//\", when chained (such as \"$a || $b ||\n$c\"), are now considerably faster to short-circuit, due to reduced optree traversal.\n\n•   The implementation of \"s///r\" makes one fewer copy of the scalar's value.\n\n•   Recursive calls to lvalue subroutines in lvalue scalar context use less memory.\n"
                    },
                    {
                        "name": "Modules and Pragmata",
                        "content": ""
                    },
                    {
                        "name": "Deprecated Modules",
                        "content": "Version::Requirements\nVersion::Requirements is now DEPRECATED, use CPAN::Meta::Requirements, which is a drop-in\nreplacement.  It will be deleted from perl.git blead in v5.17.0.\n"
                    },
                    {
                        "name": "New Modules and Pragmata",
                        "content": "•   arybase -- this new module implements the $[ variable.\n\n•   PerlIO::mmap 0.010 has been added to the Perl core.\n\nThe \"mmap\" PerlIO layer is no longer implemented by perl itself, but has been moved out\ninto the new PerlIO::mmap module.\n"
                    },
                    {
                        "name": "Updated Modules and Pragmata",
                        "content": "This is only an overview of selected module updates.  For a complete list of updates, run:\n\n$ corelist --diff 5.14.0 5.16.0\n\nYou can substitute your favorite version in place of 5.14.0, too.\n\n•   Archive::Extract has been upgraded from version 0.48 to 0.58.\n\nIncludes a fix for FreeBSD to only use \"unzip\" if it is located in \"/usr/local/bin\", as\nFreeBSD 9.0 will ship with a limited \"unzip\" in \"/usr/bin\".\n\n•   Archive::Tar has been upgraded from version 1.76 to 1.82.\n\nAdjustments to handle files >8gb (>0777777777777 octal) and a feature to return the\nMD5SUM of files in the archive.\n\n•   base has been upgraded from version 2.16 to 2.18.\n\n\"base\" no longer sets a module's $VERSION to \"-1\" when a module it loads does not define\na $VERSION.  This change has been made because \"-1\" is not a valid version number under\nthe new \"lax\" criteria used internally by \"UNIVERSAL::VERSION\".  (See version for more on\n\"lax\" version criteria.)\n\n\"base\" no longer internally skips loading modules it has already loaded and instead\nrelies on \"require\" to inspect %INC.  This fixes a bug when \"base\" is used with code that\nclear %INC to force a module to be reloaded.\n\n•   Carp has been upgraded from version 1.20 to 1.26.\n\nIt now includes last read filehandle info and puts a dot after the file and line number,\njust like errors from \"die\" [perl #106538].\n\n•   charnames has been updated from version 1.18 to 1.30.\n\n\"charnames\" can now be invoked with a new option, \":loose\", which is like the existing\n\":full\" option, but enables Unicode loose name matching.  Details are in \"LOOSE MATCHES\"\nin charnames.\n\n•   B::Deparse has been upgraded from version 1.03 to 1.14.  This fixes numerous deparsing\nbugs.\n\n•   CGI has been upgraded from version 3.52 to 3.59.\n\nIt uses the public and documented FCGI.pm API in CGI::Fast.  CGI::Fast was using an FCGI\nAPI that was deprecated and removed from documentation more than ten years ago.  Usage of\nthis deprecated API with FCGI >= 0.70 or FCGI <= 0.73 introduces a security issue.\n<https://rt.cpan.org/Public/Bug/Display.html?id=68380>\n<http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-2766>\n\nThings that may break your code:\n\n\"url()\" was fixed to return \"PATHINFO\" when it is explicitly requested with either the\n\"path=>1\" or \"pathinfo=>1\" flag.\n\nIf your code is running under modrewrite (or compatible) and you are calling\n\"selfurl()\" or you are calling \"url()\" and passing \"pathinfo=>1\", these methods will\nactually be returning \"PATHINFO\" now, as you have explicitly requested or \"selfurl()\"\nhas requested on your behalf.\n\nThe \"PATHINFO\" has been omitted in such URLs since the issue was introduced in the 3.12\nrelease in December, 2005.\n\nThis bug is so old your application may have come to depend on it or workaround it. Check\nfor application before upgrading to this release.\n\nExamples of affected method calls:\n\n$q->url(-absolute => 1, -query => 1, -pathinfo => 1);\n$q->url(-path=>1);\n$q->url(-full=>1,-path=>1);\n$q->url(-rewrite=>1,-path=>1);\n$q->selfurl();\n\nWe no longer read from STDIN when the Content-Length is not set, preventing requests with\nno Content-Length from sometimes freezing.  This is consistent with the CGI RFC 3875, and\nis also consistent with CGI::Simple.  However, the old behavior may have been expected by\nsome command-line uses of CGI.pm.\n\nIn addition, the DELETE HTTP verb is now supported.\n\n•   Compress::Zlib has been upgraded from version 2.035 to 2.048.\n\nIO::Compress::Zip and IO::Uncompress::Unzip now have support for LZMA (method 14).  There\nis a fix for a CRC issue in IO::Compress::Unzip and it supports Streamed Stored context\nnow.  And fixed a Zip64 issue in IO::Compress::Zip when the content size was exactly\n0xFFFFFFFF.\n\n•   Digest::SHA has been upgraded from version 5.61 to 5.71.\n\nAdded BITS mode to the addfile method and shasum.  This makes partial-byte inputs\npossible via files/STDIN and lets shasum check all 8074 NIST Msg vectors, where\npreviously special programming was required to do this.\n\n•   Encode has been upgraded from version 2.42 to 2.44.\n\nMissing aliases added, a deep recursion error fixed and various documentation updates.\n\nAddressed 'decodexs n-byte heap-overflow' security bug in Unicode.xs (CVE-2011-2939).\n(5.14.2)\n\n•   ExtUtils::CBuilder updated from version 0.280203 to 0.280206.\n\nThe new version appends CFLAGS and LDFLAGS to their Config.pm counterparts.\n\n•   ExtUtils::ParseXS has been upgraded from version 2.2210 to 3.16.\n\nMuch of ExtUtils::ParseXS, the module behind the XS compiler \"xsubpp\", was rewritten and\ncleaned up.  It has been made somewhat more extensible and now finally uses strictures.\n\nThe typemap logic has been moved into a separate module, ExtUtils::Typemaps.  See \"New\nModules and Pragmata\", above.\n\nFor a complete set of changes, please see the ExtUtils::ParseXS changelog, available on\nthe CPAN.\n\n•   File::Glob has been upgraded from version 1.12 to 1.17.\n\nOn Windows, tilde (~) expansion now checks the \"USERPROFILE\" environment variable, after\nchecking \"HOME\".\n\nIt has a new \":bsdglob\" export tag, intended to replace \":glob\".  Like \":glob\" it\noverrides \"glob\" with a function that does not split the glob pattern into words, but,\nunlike \":glob\", it iterates properly in scalar context, instead of returning the last\nfile.\n\nThere are other changes affecting Perl's own \"glob\" operator (which uses File::Glob\ninternally, except on VMS).  See \"Performance Enhancements\" and \"Selected Bug Fixes\".\n\n•   FindBin updated from version 1.50 to 1.51.\n\nIt no longer returns a wrong result if a script of the same name as the current one\nexists in the path and is executable.\n\n•   HTTP::Tiny has been upgraded from version 0.012 to 0.017.\n\nAdded support for using $ENV{httpproxy} to set the default proxy host.\n\nAdds additional shorthand methods for all common HTTP verbs, a \"postform()\" method for\nPOST-ing x-www-form-urlencoded data and a \"wwwformurlencode()\" utility method.\n\n•   IO has been upgraded from version 1.2504 to 1.2506, and IO::Handle from version 1.31 to\n1.33.\n\nTogether, these upgrades fix a problem with IO::Handle's \"getline\" and \"getlines\"\nmethods.  When these methods are called on the special ARGV handle, the next file is\nautomatically opened, as happens with the built-in \"<>\" and \"readline\" functions.  But,\nunlike the built-ins, these methods were not respecting the caller's use of the open\npragma and applying the appropriate I/O layers to the newly-opened file [rt.cpan.org\n#66474].\n\n•   IPC::Cmd has been upgraded from version 0.70 to 0.76.\n\nCapturing of command output (both \"STDOUT\" and \"STDERR\") is now supported using\nIPC::Open3 on MSWin32 without requiring IPC::Run.\n\n•   IPC::Open3 has been upgraded from version 1.09 to 1.12.\n\nFixes a bug which prevented use of \"open3\" on Windows when *STDIN, *STDOUT or *STDERR had\nbeen localized.\n\nFixes a bug which prevented duplicating numeric file descriptors on Windows.\n\n\"open3\" with \"-\" for the program name works once more.  This was broken in version 1.06\n(and hence in Perl 5.14.0) [perl #95748].\n\n•   Locale::Codes has been upgraded from version 3.16 to 3.21.\n\nAdded Language Extension codes (langext) and Language Variation codes (langvar) as\ndefined in the IANA language registry.\n\nAdded language codes from ISO 639-5\n\nAdded language/script codes from the IANA language subtag registry\n\nFixed an uninitialized value warning [rt.cpan.org #67438].\n\nFixed the return value for the allXXXcodes and allXXXnames functions [rt.cpan.org\n#69100].\n\nReorganized modules to move Locale::MODULE to Locale::Codes::MODULE to allow for cleaner\nfuture additions.  The original four modules (Locale::Language, Locale::Currency,\nLocale::Country, Locale::Script) will continue to work, but all new sets of codes will be\nadded in the Locale::Codes namespace.\n\nThe code2XXX, XXX2code, allXXXcodes, and allXXXnames functions now support retired\ncodes.  All codesets may be specified by a constant or by their name now.  Previously,\nthey were specified only by a constant.\n\nThe aliascode function exists for backward compatibility.  It has been replaced by\nrenamecountrycode.  The aliascode function will be removed some time after September,\n2013.\n\nAll work is now done in the central module (Locale::Codes).  Previously, some was still\ndone in the wrapper modules (Locale::Codes::*).  Added Language Family codes (langfam) as\ndefined in ISO 639-5.\n\n•   Math::BigFloat has been upgraded from version 1.993 to 1.997.\n\nThe \"numify\" method has been corrected to return a normalized Perl number (the result of\n\"0 + $thing\"), instead of a string [rt.cpan.org #66732].\n\n•   Math::BigInt has been upgraded from version 1.994 to 1.998.\n\nIt provides a new \"bsgn\" method that complements the \"babs\" method.\n\nIt fixes the internal \"objectify\" function's handling of \"foreign objects\" so they are\nconverted to the appropriate class (Math::BigInt or Math::BigFloat).\n\n•   Math::BigRat has been upgraded from version 0.2602 to 0.2603.\n\n\"int()\" on a Math::BigRat object containing -1/2 now creates a Math::BigInt containing 0,\nrather than -0.  Math::BigInt does not even support negative zero, so the resulting\nobject was actually malformed [perl #95530].\n\n•   Math::Complex has been upgraded from version 1.56 to 1.59 and Math::Trig from version 1.2\nto 1.22.\n\nFixes include: correct copy constructor usage; fix polarwise formatting with numeric\nformat specifier; and more stable \"greatcircledirection\" algorithm.\n\n•   Module::CoreList has been upgraded from version 2.51 to 2.66.\n\nThe \"corelist\" utility now understands the \"-r\" option for displaying Perl release dates\nand the \"--diff\" option to print the set of modlib changes between two perl\ndistributions.\n\n•   Module::Metadata has been upgraded from version 1.000004 to 1.000009.\n\nAdds \"provides\" method to generate a CPAN META provides data structure correctly; use of\n\"packageversionsfromdirectory\" is discouraged.\n\n•   ODBMFile has been upgraded from version 1.10 to 1.12.\n\nThe XS code is now compiled with \"PERLNOGETCONTEXT\", which will aid performance under\nithreads.\n\n•   open has been upgraded from version 1.08 to 1.10.\n\nIt no longer turns off layers on standard handles when invoked without the \":std\"\ndirective.  Similarly, when invoked with the \":std\" directive, it now clears layers on\nSTDERR before applying the new ones, and not just on STDIN and STDOUT [perl #92728].\n\n•   overload has been upgraded from version 1.13 to 1.18.\n\n\"overload::Overloaded\" no longer calls \"can\" on the class, but uses another means to\ndetermine whether the object has overloading.  It was never correct for it to call \"can\",\nas overloading does not respect AUTOLOAD.  So classes that autoload methods and implement\n\"can\" no longer have to account for overloading [perl #40333].\n\nA warning is now produced for invalid arguments.  See \"New Diagnostics\".\n\n•   PerlIO::scalar has been upgraded from version 0.11 to 0.14.\n\n(This is the module that implements \"open $fh, '>', \\$scalar\".)\n\nIt fixes a problem with \"open my $fh, \">\", \\$scalar\" not working if $scalar is a copy-on-\nwrite scalar. (5.14.2)\n\nIt also fixes a hang that occurs with \"readline\" or \"<$fh>\" if a typeglob has been\nassigned to $scalar [perl #92258].\n\nIt no longer assumes during \"seek\" that $scalar is a string internally.  If it didn't\ncrash, it was close to doing so [perl #92706].  Also, the internal print routine no\nlonger assumes that the position set by \"seek\" is valid, but extends the string to that\nposition, filling the intervening bytes (between the old length and the seek position)\nwith nulls [perl #78980].\n\nPrinting to an in-memory handle now works if the $scalar holds a reference, stringifying\nthe reference before modifying it.  References used to be treated as empty strings.\n\nPrinting to an in-memory handle no longer crashes if the $scalar happens to hold a number\ninternally, but no string buffer.\n\nPrinting to an in-memory handle no longer creates scalars that confuse the regular\nexpression engine [perl #108398].\n\n•   Pod::Functions has been upgraded from version 1.04 to 1.05.\n\nFunctions.pm is now generated at perl build time from annotations in perlfunc.pod.  This\nwill ensure that Pod::Functions and perlfunc remain in synchronisation.\n\n•   Pod::Html has been upgraded from version 1.11 to 1.1502.\n\nThis is an extensive rewrite of Pod::Html to use Pod::Simple under the hood.  The output\nhas changed significantly.\n\n•   Pod::Perldoc has been upgraded from version 3.1503 to 3.17.\n\nIt corrects the search paths on VMS [perl #90640]. (5.14.1)\n\nThe -v option now fetches the right section for $0.\n\nThis upgrade has numerous significant fixes.  Consult its changelog on the CPAN for more\ninformation.\n\n•   POSIX has been upgraded from version 1.24 to 1.30.\n\nPOSIX no longer uses AutoLoader.  Any code which was relying on this implementation\ndetail was buggy, and may fail because of this change.  The module's Perl code has been\nconsiderably simplified, roughly halving the number of lines, with no change in\nfunctionality.  The XS code has been refactored to reduce the size of the shared object\nby about 12%, with no change in functionality.  More POSIX functions now have tests.\n\n\"sigsuspend\" and \"pause\" now run signal handlers before returning, as the whole point of\nthese two functions is to wait until a signal has arrived, and then return after it has\nbeen triggered.  Delayed, or \"safe\", signals were preventing that from happening,\npossibly resulting in race conditions [perl #107216].\n\n\"POSIX::sleep\" is now a direct call into the underlying OS \"sleep\" function, instead of\nbeing a Perl wrapper on \"CORE::sleep\".  \"POSIX::dup2\" now returns the correct value on\nWin32 (i.e., the file descriptor).  \"POSIX::SigSet\" \"sigsuspend\" and \"sigpending\" and\n\"POSIX::pause\" now dispatch safe signals immediately before returning to their caller.\n\n\"POSIX::Termios::setattr\" now defaults the third argument to \"TCSANOW\", instead of 0. On\nmost platforms \"TCSANOW\" is defined to be 0, but on some 0 is not a valid parameter,\nwhich caused a call with defaults to fail.\n\n•   Socket has been upgraded from version 1.94 to 2.001.\n\nIt has new functions and constants for handling IPv6 sockets:\n\npackipv6mreq\nunpackipv6mreq\nIPV6ADDMEMBERSHIP\nIPV6DROPMEMBERSHIP\nIPV6MTU\nIPV6MTUDISCOVER\nIPV6MULTICASTHOPS\nIPV6MULTICASTIF\nIPV6MULTICASTLOOP\nIPV6UNICASTHOPS\nIPV6V6ONLY\n\n•   Storable has been upgraded from version 2.27 to 2.34.\n\nIt no longer turns copy-on-write scalars into read-only scalars when freezing and\nthawing.\n\n•   Sys::Syslog has been upgraded from version 0.27 to 0.29.\n\nThis upgrade closes many outstanding bugs.\n\n•   Term::ANSIColor has been upgraded from version 3.00 to 3.01.\n\nOnly interpret an initial array reference as a list of colors, not any initial reference,\nallowing the colored function to work properly on objects with stringification defined.\n\n•   Term::ReadLine has been upgraded from version 1.07 to 1.09.\n\nTerm::ReadLine now supports any event loop, including unpublished ones and simple\nIO::Select, loops without the need to rewrite existing code for any particular framework\n[perl #108470].\n\n•   threads::shared has been upgraded from version 1.37 to 1.40.\n\nDestructors on shared objects used to be ignored sometimes if the objects were referenced\nonly by shared data structures.  This has been mostly fixed, but destructors may still be\nignored if the objects still exist at global destruction time [perl #98204].\n\n•   Unicode::Collate has been upgraded from version 0.73 to 0.89.\n\nUpdated to CLDR 1.9.1\n\nLocales updated to CLDR 2.0: mk, mt, nb, nn, ro, ru, sk, sr, sv, uk, zhpinyin,\nzhstroke\n\nNewly supported locales: bn, fa, ml, mr, or, pa, sa, si, sidictionary, srLatn,\nsvreformed, ta, te, th, ur, wae.\n\nTailored compatibility ideographs as well as unified ideographs for the locales: ja, ko,\nzhbig5han, zhgb2312han, zhpinyin, zhstroke.\n\nLocale/*.pl files are now searched for in @INC.\n\n•   Unicode::Normalize has been upgraded from version 1.10 to 1.14.\n\nFixes for the removal of unicore/CompositionExclusions.txt from core.\n\n•   Unicode::UCD has been upgraded from version 0.32 to 0.43.\n\nThis adds four new functions:  \"propaliases()\" and \"propvaluealiases()\", which are\nused to find all Unicode-approved synonyms for property names, or to convert from one\nname to another; \"propinvlist\" which returns all code points matching a given Unicode\nbinary property; and \"propinvmap\" which returns the complete specification of a given\nUnicode property.\n\n•   Win32API::File has been upgraded from version 0.1101 to 0.1200.\n\nAdded SetStdHandle and GetStdHandle functions\n"
                    },
                    {
                        "name": "Removed Modules and Pragmata",
                        "content": "As promised in Perl 5.14.0's release notes, the following modules have been removed from the\ncore distribution, and if needed should be installed from CPAN instead.\n\n•   Devel::DProf has been removed from the Perl core.  Prior version was 20110228.00.\n\n•   Shell has been removed from the Perl core.  Prior version was 0.7201.\n\n•   Several old perl4-style libraries which have been deprecated with 5.14 are now removed:\n\nabbrev.pl assert.pl bigfloat.pl bigint.pl bigrat.pl cacheout.pl\ncomplete.pl ctime.pl dotsh.pl exceptions.pl fastcwd.pl flush.pl\ngetcwd.pl getopt.pl getopts.pl hostname.pl importenv.pl\nlib/find{,depth}.pl look.pl newgetopt.pl open2.pl open3.pl\npwd.pl shellwords.pl stat.pl tainted.pl termcap.pl timelocal.pl\n\nThey can be found on CPAN as Perl4::CoreLibs.\n"
                    }
                ]
            },
            "Documentation": {
                "content": "",
                "subsections": [
                    {
                        "name": "New Documentation",
                        "content": "perldtrace\n\nperldtrace describes Perl's DTrace support, listing the provided probes and gives examples of\ntheir use.\n\nperlexperiment\n\nThis document is intended to provide a list of experimental features in Perl.  It is still a\nwork in progress.\n\nperlootut\n\nThis a new OO tutorial.  It focuses on basic OO concepts, and then recommends that readers\nchoose an OO framework from CPAN.\n\nperlxstypemap\n\nThe new manual describes the XS typemapping mechanism in unprecedented detail and combines\nnew documentation with information extracted from perlxs and the previously unofficial list\nof all core typemaps.\n"
                    },
                    {
                        "name": "Changes to Existing Documentation",
                        "content": "perlapi\n\n•   The HV API has long accepted negative lengths to show that the key is in UTF8.  This is\nnow documented.\n\n•   The \"boolSV()\" macro is now documented.\n\nperlfunc\n\n•   \"dbmopen\" treats a 0 mode as a special case, that prevents a nonexistent file from being\ncreated.  This has been the case since Perl 5.000, but was never documented anywhere.\nNow the perlfunc entry mentions it [perl #90064].\n\n•   As an accident of history, \"open $fh, '<:', ...\" applies the default layers for the\nplatform (\":raw\" on Unix, \":crlf\" on Windows), ignoring whatever is declared by open.pm.\nThis seems such a useful feature it has been documented in perlfunc and open.\n\n•   The entry for \"split\" has been rewritten.  It is now far clearer than before.\n\nperlguts\n\n•   A new section, Autoloading with XSUBs, has been added, which explains the two APIs for\naccessing the name of the autoloaded sub.\n\n•   Some function descriptions in perlguts were confusing, as it was not clear whether they\nreferred to the function above or below the description.  This has been clarified [perl\n#91790].\n\nperlobj\n\n•   This document has been rewritten from scratch, and its coverage of various OO concepts\nhas been expanded.\n\nperlop\n\n•   Documentation of the smartmatch operator has been reworked and moved from perlsyn to\nperlop where it belongs.\n\nIt has also been corrected for the case of \"undef\" on the left-hand side.  The list of\ndifferent smart match behaviors had an item in the wrong place.\n\n•   Documentation of the ellipsis statement (\"...\") has been reworked and moved from perlop\nto perlsyn.\n\n•   The explanation of bitwise operators has been expanded to explain how they work on\nUnicode strings (5.14.1).\n\n•   More examples for \"m//g\" have been added (5.14.1).\n\n•   The \"<<\\FOO\" here-doc syntax has been documented (5.14.1).\n\nperlpragma\n\n•   There is now a standard convention for naming keys in the \"%^H\", documented under Key\nnaming.\n\n\"Laundering and Detecting Tainted Data\" in perlsec\n\n•   The example function for checking for taintedness contained a subtle error.  $@ needs to\nbe localized to prevent its changing this global's value outside the function.  The\npreferred method to check for this remains \"tainted\" in Scalar::Util.\n\nperllol\n\n•   perllol has been expanded with examples using the new \"push $scalar\" syntax introduced in\nPerl 5.14.0 (5.14.1).\n\nperlmod\n\n•   perlmod now states explicitly that some types of explicit symbol table manipulation are\nnot supported.  This codifies what was effectively already the case [perl #78074].\n\nperlpodstyle\n\n•   The tips on which formatting codes to use have been corrected and greatly expanded.\n\n•   There are now a couple of example one-liners for previewing POD files after they have\nbeen edited.\n\nperlre\n\n•   The \"(*COMMIT)\" directive is now listed in the right section (Verbs without an argument).\n\nperlrun\n\n•   perlrun has undergone a significant clean-up.  Most notably, the -0x... form of the -0\nflag has been clarified, and the final section on environment variables has been\ncorrected and expanded (5.14.1).\n\nperlsub\n\n•   The ($;) prototype syntax, which has existed for rather a long time, is now documented in\nperlsub.  It lets a unary function have the same precedence as a list operator.\n\nperltie\n\n•   The required syntax for tying handles has been documented.\n\nperlvar\n\n•   The documentation for $! has been corrected and clarified.  It used to state that $!\ncould be \"undef\", which is not the case.  It was also unclear whether system calls set\nC's \"errno\" or Perl's $!  [perl #91614].\n\n•   Documentation for $$ has been amended with additional cautions regarding changing the\nprocess ID.\n\nOther Changes\n\n•   perlxs was extended with documentation on inline typemaps.\n\n•   perlref has a new Circular References section explaining how circularities may not be\nfreed and how to solve that with weak references.\n\n•   Parts of perlapi were clarified, and Perl equivalents of some C functions have been added\nas an additional mode of exposition.\n\n•   A few parts of perlre and perlrecharclass were clarified.\n"
                    },
                    {
                        "name": "Removed Documentation",
                        "content": "Old OO Documentation\n\nThe old OO tutorials, perltoot, perltooc, and perlboot, have been removed.  The perlbot (bag\nof object tricks) document has been removed as well.\n\nDevelopment Deltas\n\nThe perldelta files for development releases are no longer packaged with perl.  These can\nstill be found in the perl source code repository.\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•   Cannot set tied @DB::args\n\nThis error occurs when \"caller\" tries to set @DB::args but finds it tied.  Before this\nerror was added, it used to crash instead.\n\n•   Cannot tie unreifiable array\n\nThis error is part of a safety check that the \"tie\" operator does before tying a special\narray like @.  You should never see this message.\n\n•   &CORE::%s cannot be called directly\n\nThis occurs when a subroutine in the \"CORE::\" namespace is called with &foo syntax or\nthrough a reference.  Some subroutines in this package cannot yet be called that way, but\nmust be called as barewords.  See \"Subroutines in the \"CORE\" namespace\", above.\n\n•   Source filters apply only to byte streams\n\nThis new error occurs when you try to activate a source filter (usually by loading a\nsource filter module) within a string passed to \"eval\" under the \"unicodeeval\" feature.\n\nNew Warnings\n\n•   defined(@array) is deprecated\n\nThe long-deprecated \"defined(@array)\" now also warns for package variables.  Previously\nit issued a warning for lexical variables only.\n\n•   length() used on %s\n\nThis new warning occurs when \"length\" is used on an array or hash, instead of\n\"scalar(@array)\" or \"scalar(keys %hash)\".\n\n•   lvalue attribute %s already-defined subroutine\n\nattributes.pm now emits this warning when the :lvalue attribute is applied to a Perl\nsubroutine that has already been defined, as doing so can have unexpected side-effects.\n\n•   overload arg '%s' is invalid\n\nThis warning, in the \"overload\" category, is produced when the overload pragma is given\nan argument it doesn't recognize, presumably a mistyped operator.\n\n•   $[ used in %s (did you mean $] ?)\n\nThis new warning exists to catch the mistaken use of $[ in version checks.  $], not $[,\ncontains the version number.\n\n•   Useless assignment to a temporary\n\nAssigning to a temporary scalar returned from an lvalue subroutine now produces this\nwarning [perl #31946].\n\n•   Useless use of \\E\n\n\"\\E\" does nothing unless preceded by \"\\Q\", \"\\L\" or \"\\U\".\n"
                    },
                    {
                        "name": "Removed Errors",
                        "content": "•   \"sort is now a reserved word\"\n\nThis error used to occur when \"sort\" was called without arguments, followed by \";\" or\n\")\".  (E.g., \"sort;\" would die, but \"{sort}\" was OK.)  This error message was added in\nPerl 3 to catch code like \"close(sort)\" which would no longer work.  More than two\ndecades later, this message is no longer appropriate.  Now \"sort\" without arguments is\nalways allowed, and returns an empty list, as it did in those cases where it was already\nallowed [perl #90030].\n"
                    },
                    {
                        "name": "Changes to Existing Diagnostics",
                        "content": "•   The \"Applying pattern match...\" or similar warning produced when an array or hash is on\nthe left-hand side of the \"=~\" operator now mentions the name of the variable.\n\n•   The \"Attempt to free non-existent shared string\" has had the spelling of \"non-existent\"\ncorrected to \"nonexistent\".  It was already listed with the correct spelling in perldiag.\n\n•   The error messages for using \"default\" and \"when\" outside a topicalizer have been\nstandardized to match the messages for \"continue\" and loop controls.  They now read\n'Can't \"default\" outside a topicalizer' and 'Can't \"when\" outside a topicalizer'.  They\nboth used to be 'Can't use when() outside a topicalizer' [perl #91514].\n\n•   The message, \"Code point 0x%X is not Unicode, no properties match it; all inverse\nproperties do\" has been changed to \"Code point 0x%X is not Unicode, all \\p{} matches\nfail; all \\P{} matches succeed\".\n\n•   Redefinition warnings for constant subroutines used to be mandatory, even occurring under\n\"no warnings\".  Now they respect the warnings pragma.\n\n•   The \"glob failed\" warning message is now suppressible via \"no warnings\" [perl #111656].\n\n•   The Invalid version format error message now says \"negative version number\" within the\nparentheses, rather than \"non-numeric data\", for negative numbers.\n\n•   The two warnings Possible attempt to put comments in qw() list and Possible attempt to\nseparate words with commas are no longer mutually exclusive: the same \"qw\" construct may\nproduce both.\n\n•   The uninitialized warning for \"y///r\" when $ is implicit and undefined now mentions the\nvariable name, just like the non-/r variation of the operator.\n\n•   The 'Use of \"foo\" without parentheses is ambiguous' warning has been extended to apply\nalso to user-defined subroutines with a (;$) prototype, and not just to built-in\nfunctions.\n\n•   Warnings that mention the names of lexical (\"my\") variables with Unicode characters in\nthem now respect the presence or absence of the \":utf8\" layer on the output handle,\ninstead of outputting UTF8 regardless.  Also, the correct names are included in the\nstrings passed to $SIG{WARN} handlers, rather than the raw UTF8 bytes.\n"
                    },
                    {
                        "name": "Utility Changes",
                        "content": "h2ph\n\n•   h2ph used to generate code of the form\n\nunless(defined(&FOO)) {\nsub FOO () {42;}\n}\n\nBut the subroutine is a compile-time declaration, and is hence unaffected by the\ncondition.  It has now been corrected to emit a string \"eval\" around the subroutine [perl\n#99368].\n\nsplain\n\n•   splain no longer emits backtraces with the first line number repeated.\n\nThis:\n\nUncaught exception from user code:\nCannot fwiddle the fwuddle at -e line 1.\nat -e line 1\nmain::baz() called at -e line 1\nmain::bar() called at -e line 1\nmain::foo() called at -e line 1\n\nhas become this:\n\nUncaught exception from user code:\nCannot fwiddle the fwuddle at -e line 1.\nmain::baz() called at -e line 1\nmain::bar() called at -e line 1\nmain::foo() called at -e line 1\n\n•   Some error messages consist of multiple lines that are listed as separate entries in\nperldiag.  splain has been taught to find the separate entries in these cases, instead of\nsimply failing to find the message.\n\nzipdetails\n\n•   This is a new utility, included as part of an IO::Compress::Base upgrade.\n\nzipdetails displays information about the internal record structure of the zip file.  It\nis not concerned with displaying any details of the compressed data stored in the zip\nfile.\n"
                    },
                    {
                        "name": "Configuration and Compilation",
                        "content": "•   regexp.h has been modified for compatibility with GCC's -Werror option, as used by some\nprojects that include perl's header files (5.14.1).\n\n•   \"USELOCALE{,COLLATE,CTYPE,NUMERIC}\" have been added the output of perl -V as they\nhave affect the behavior of the interpreter binary (albeit in only a small area).\n\n•   The code and tests for IPC::Open2 have been moved from ext/IPC-Open2 into ext/IPC-Open3,\nas \"IPC::Open2::open2()\" is implemented as a thin wrapper around \"IPC::Open3::open3()\",\nand hence is very tightly coupled to it.\n\n•   The magic types and magic vtables are now generated from data in a new script\nregen/mgvtable.pl, instead of being maintained by hand.  As different EBCDIC variants\ncan't agree on the code point for '~', the character to code point conversion is done at\nbuild time by generateuudmap to a new generated header mgdata.h.  \"PLvtblbm\" and\n\"PLvtblfm\" are now defined by the pre-processor as \"PLvtblregexp\", instead of being\ndistinct C variables.  \"PLvtblsig\" has been removed.\n\n•   Building with \"-DPERLGLOBALSTRUCT\" works again.  This configuration is not generally\nused.\n\n•   Perl configured with MAD now correctly frees \"MADPROP\" structures when OPs are freed.\n\"MADPROP\"s are now allocated with \"PerlMemSharedmalloc()\"\n\n•   makedef.pl has been refactored.  This should have no noticeable affect on any of the\nplatforms that use it as part of their build (AIX, VMS, Win32).\n\n•   \"useperlio\" can no longer be disabled.\n\n•   The file global.sym is no longer needed, and has been removed.  It contained a list of\nall exported functions, one of the files generated by regen/embed.pl from data in\nembed.fnc and regen/opcodes.  The code has been refactored so that the only user of\nglobal.sym, makedef.pl, now reads embed.fnc and regen/opcodes directly, removing the need\nto store the list of exported functions in an intermediate file.\n\nAs global.sym was never installed, this change should not be visible outside the build\nprocess.\n\n•   pod/buildtoc, used by the build process to build perltoc, has been refactored and\nsimplified.  It now contains only code to build perltoc; the code to regenerate Makefiles\nhas been moved to Porting/podrules.pl.  It's a bug if this change has any material\neffect on the build process.\n\n•   pod/roffitall is now built by pod/buildtoc, instead of being shipped with the\ndistribution.  Its list of manpages is now generated (and therefore current).  See also\nRT #103202 for an unresolved related issue.\n\n•   The man page for \"XS::Typemap\" is no longer installed.  \"XS::Typemap\" is a test module\nwhich is not installed, hence installing its documentation makes no sense.\n\n•   The -Dusesitecustomize and -Duserelocatableinc options now work together properly.\n"
                    },
                    {
                        "name": "Platform Support",
                        "content": ""
                    },
                    {
                        "name": "Platform-Specific Notes",
                        "content": "Cygwin\n\n•   Since version 1.7, Cygwin supports native UTF-8 paths.  If Perl is built under that\nenvironment, directory and filenames will be UTF-8 encoded.\n\n•   Cygwin does not initialize all original Win32 environment variables.  See README.cygwin\nfor a discussion of the newly-added \"Cygwin::syncwinenv()\" function [perl #110190] and\nfor further links.\n\nHP-UX\n\n•   HP-UX PA-RISC/64 now supports gcc-4.x\n\nA fix to correct the socketsize now makes the test suite pass on HP-UX PA-RISC for\n64bitall builds. (5.14.2)\n\nVMS\n\n•   Remove unnecessary includes, fix miscellaneous compiler warnings and close some unclosed\ncomments on vms/vms.c.\n\n•   Remove sockadapt layer from the VMS build.\n\n•   Explicit support for VMS versions before v7.0 and DEC C versions before v6.0 has been\nremoved.\n\n•   Since Perl 5.10.1, the home-grown \"stat\" wrapper has been unable to distinguish between a\ndirectory name containing an underscore and an otherwise-identical filename containing a\ndot in the same position (e.g., t/testpl as a directory and t/test.pl as a file).  This\nproblem has been corrected.\n\n•   The build on VMS now permits names of the resulting symbols in C code for Perl longer\nthan 31 characters.  Symbols like\n\"Perlitwasthebestoftimesitwastheworstoftimes\" can now be created freely\nwithout causing the VMS linker to seize up.\n\nGNU/Hurd\n\n•   Numerous build and test failures on GNU/Hurd have been resolved with hints for building\nDBM modules, detection of the library search path, and enabling of large file support.\n\nOpenVOS\n\n•   Perl is now built with dynamic linking on OpenVOS, the minimum supported version of which\nis now Release 17.1.0.\n\nSunOS\n\nThe CC workshop C++ compiler is now detected and used on systems that ship without cc.\n"
                    },
                    {
                        "name": "Internal Changes",
                        "content": "•   The compiled representation of formats is now stored via the \"mgptr\" of their\n\"PERLMAGICfm\".  Previously it was stored in the string buffer, beyond \"SvLEN()\", the\nregular end of the string.  \"SvCOMPILED()\" and \"SvCOMPILED{on,off}()\" now exist solely\nfor compatibility for XS code.  The first is always 0, the other two now no-ops. (5.14.1)\n\n•   Some global variables have been marked \"const\", members in the interpreter structure have\nbeen re-ordered, and the opcodes have been re-ordered.  The op \"OPAELEMFAST\" has been\nsplit into \"OPAELEMFAST\" and \"OPAELEMFASTLEX\".\n\n•   When empting a hash of its elements (e.g., via undef(%h), or %h=()), HvARRAY field is no\nlonger temporarily zeroed.  Any destructors called on the freed elements see the\nremaining elements.  Thus, %h=() becomes more like \"delete $h{$} for keys %h\".\n\n•   Boyer-Moore compiled scalars are now PVMGs, and the Boyer-Moore tables are now stored via\nthe mgptr of their \"PERLMAGICbm\".  Previously they were PVGVs, with the tables stored\nin the string buffer, beyond \"SvLEN()\".  This eliminates the last place where the core\nstores data beyond \"SvLEN()\".\n\n•   Simplified logic in \"Perlsvmagic()\" introduces a small change of behavior for error\ncases involving unknown magic types.  Previously, if \"Perlsvmagic()\" was passed a magic\ntype unknown to it, it would\n\n1.  Croak \"Modification of a read-only value attempted\" if read only\n\n2.  Return without error if the SV happened to already have this magic\n\n3.  otherwise croak \"Don't know how to handle magic of type \\\\%o\"\n\nNow it will always croak \"Don't know how to handle magic of type \\\\%o\", even on read-only\nvalues, or SVs which already have the unknown magic type.\n\n•   The experimental \"fetchcoplabel\" function has been renamed to \"copfetchlabel\".\n\n•   The \"copstorelabel\" function has been added to the API, but is experimental.\n\n•   embedvar.h has been simplified, and one level of macro indirection for PL* variables has\nbeen removed for the default (non-multiplicity) configuration.  PERLVAR*() macros now\ndirectly expand their arguments to tokens such as \"PLdefgv\", instead of expanding to\n\"PLIdefgv\", with embedvar.h defining a macro to map \"PLIdefgv\" to \"PLdefgv\".  XS code\nwhich has unwarranted chumminess with the implementation may need updating.\n\n•   An API has been added to explicitly choose whether to export XSUB symbols.  More detail\ncan be found in the comments for commit e64345f8.\n\n•   The \"isgvmagicalsv\" function has been eliminated and merged with \"gvfetchpvnflags\".\nIt used to be called to determine whether a GV should be autovivified in rvalue context.\nNow it has been replaced with a new \"GVADDMG\" flag (not part of the API).\n\n•   The returned code point from the function \"utf8ntouvuni()\" when the input is malformed\nUTF-8, malformations are allowed, and \"utf8\" warnings are off is now the Unicode\nREPLACEMENT CHARACTER whenever the malformation is such that no well-defined code point\ncan be computed.  Previously the returned value was essentially garbage.  The only\nmalformations that have well-defined values are a zero-length string (0 is the return),\nand overlong UTF-8 sequences.\n\n•   Padlists are now marked \"AvREAL\"; i.e., reference-counted.  They have always been\nreference-counted, but were not marked real, because pad.c did its own clean-up, instead\nof using the usual clean-up code in sv.c.  That caused problems in thread cloning, so now\nthe \"AvREAL\" flag is on, but is turned off in pad.c right before the padlist is freed\n(after pad.c has done its custom freeing of the pads).\n\n•   All C files that make up the Perl core have been converted to UTF-8.\n\n•   These new functions have been added as part of the work on Unicode symbols:\n\nHvNAMELEN\nHvNAMEUTF8\nHvENAMELEN\nHvENAMEUTF8\ngvinitpv\ngvinitpvn\ngvinitpvsv\ngvfetchmethpv\ngvfetchmethpvn\ngvfetchmethsv\ngvfetchmethpvautoload\ngvfetchmethpvnautoload\ngvfetchmethsvautoload\ngvfetchmethodpvflags\ngvfetchmethodpvnflags\ngvfetchmethodsvflags\ngvautoloadpv\ngvautoloadpvn\ngvautoloadsv\nnewGVgenflags\nsvderivedfrompv\nsvderivedfrompvn\nsvderivedfromsv\nsvdoespv\nsvdoespvn\nsvdoessv\nwhichsigpv\nwhichsigpvn\nwhichsigsv\nnewCONSTSUBflags\n\nThe gvfetchmethod*flags functions, like gvfetchmethodflags, are experimental and may\nchange in a future release.\n\n•   The following functions were added.  These are not part of the API:\n\nGvNAMEUTF8\nGvENAMELEN\nGvENAMEHEK\nCopSTASHflags\nCopSTASHflagsset\nPmopSTASHflags\nPmopSTASHflagsset\nsvsethek\nHEKfARG\n\nThere is also a \"HEKf\" macro corresponding to \"SVf\", for interpolating HEKs in formatted\nstrings.\n\n•   \"svcatpvnflags\" takes a couple of new internal-only flags, \"SVCATBYTES\" and\n\"SVCATUTF8\", which tell it whether the char array to be concatenated is UTF8.  This\nallows for more efficient concatenation than creating temporary SVs to pass to\n\"svcatsv\".\n\n•   For XS AUTOLOAD subs, $AUTOLOAD is set once more, as it was in 5.6.0.  This is in\naddition to setting \"SvPVX(cv)\", for compatibility with 5.8 to 5.14.  See \"Autoloading\nwith XSUBs\" in perlguts.\n\n•   Perl now checks whether the array (the linearized isa) returned by a MRO plugin begins\nwith the name of the class itself, for which the array was created, instead of assuming\nthat it does.  This prevents the first element from being skipped during method lookup.\nIt also means that \"mro::getlinearisa\" may return an array with one more element than\nthe MRO plugin provided [perl #94306].\n\n•   \"PLcurstash\" is now reference-counted.\n\n•   There are now feature bundle hints in \"PLhints\" ($^H) that version declarations use, to\navoid having to load feature.pm.  One setting of the hint bits indicates a \"custom\"\nfeature bundle, which means that the entries in \"%^H\" still apply.  feature.pm uses that.\n\nThe \"HINTFEATUREMASK\" macro is defined in perl.h along with other hints.  Other macros\nfor setting and testing features and bundles are in the new feature.h.\n\"FEATUREISENABLED\" (which has moved to feature.h) is no longer used throughout the\ncodebase, but more specific macros, e.g., \"FEATURESAYISENABLED\", that are defined in\nfeature.h.\n\n•   lib/feature.pm is now a generated file, created by the new regen/feature.pl script, which\nalso generates feature.h.\n\n•   Tied arrays are now always \"AvREAL\".  If @ or \"DB::args\" is tied, it is reified first,\nto make sure this is always the case.\n\n•   Two new functions \"utf8touvchrbuf()\" and \"utf8touvunibuf()\" have been added.  These\nare the same as \"utf8touvchr\" and \"utf8touvuni\" (which are now deprecated), but take\nan extra parameter that is used to guard against reading beyond the end of the input\nstring.  See \"utf8touvchrbuf\" in perlapi and \"utf8touvunibuf\" in perlapi.\n\n•   The regular expression engine now does TRIE case insensitive matches under Unicode. This\nmay change the output of \"use re 'debug';\", and will speed up various things.\n\n•   There is a new \"wrapopchecker()\" function, which provides a thread-safe alternative to\nwriting to \"PLcheck\" directly.\n"
                    },
                    {
                        "name": "Selected Bug Fixes",
                        "content": ""
                    },
                    {
                        "name": "Array and hash",
                        "content": "•   A bug has been fixed that would cause a \"Use of freed value in iteration\" error if the\nnext two hash elements that would be iterated over are deleted [perl #85026]. (5.14.1)\n\n•   Deleting the current hash iterator (the hash element that would be returned by the next\ncall to \"each\") in void context used not to free it [perl #85026].\n\n•   Deletion of methods via \"delete $Class::{method}\" syntax used to update method caches if\ncalled in void context, but not scalar or list context.\n\n•   When hash elements are deleted in void context, the internal hash entry is now freed\nbefore the value is freed, to prevent destructors called by that latter freeing from\nseeing the hash in an inconsistent state.  It was possible to cause double-frees if the\ndestructor freed the hash itself [perl #100340].\n\n•   A \"keys\" optimization in Perl 5.12.0 to make it faster on empty hashes caused \"each\" not\nto reset the iterator if called after the last element was deleted.\n\n•   Freeing deeply nested hashes no longer crashes [perl #44225].\n\n•   It is possible from XS code to create hashes with elements that have no values.  The hash\nelement and slice operators used to crash when handling these in lvalue context.  They\nnow produce a \"Modification of non-creatable hash value attempted\" error message.\n\n•   If list assignment to a hash or array triggered destructors that freed the hash or array\nitself, a crash would ensue.  This is no longer the case [perl #107440].\n\n•   It used to be possible to free the typeglob of a localized array or hash (e.g., \"local\n@{\"x\"}; delete $::{x}\"), resulting in a crash on scope exit.\n\n•   Some core bugs affecting Hash::Util have been fixed: locking a hash element that is a\nglob copy no longer causes the next assignment to it to corrupt the glob (5.14.2), and\nunlocking a hash element that holds a copy-on-write scalar no longer causes modifications\nto that scalar to modify other scalars that were sharing the same string buffer.\n"
                    },
                    {
                        "name": "C API fixes",
                        "content": "•   The \"newHVhv\" XS function now works on tied hashes, instead of crashing or returning an\nempty hash.\n\n•   The \"SvIsCOW\" C macro now returns false for read-only copies of typeglobs, such as those\ncreated by:\n\n$hash{elem} = *foo;\nHash::Util::lockvalue %hash, 'elem';\n\nIt used to return true.\n\n•   The \"SvPVutf8\" C function no longer tries to modify its argument, resulting in errors\n[perl #108994].\n\n•   \"SvPVutf8\" now works properly with magical variables.\n\n•   \"SvPVbyte\" now works properly non-PVs.\n\n•   When presented with malformed UTF-8 input, the XS-callable functions \"isutf8string()\",\n\"isutf8stringloc()\", and \"isutf8stringloclen()\" could read beyond the end of the\ninput string by up to 12 bytes.  This no longer happens.  [perl #32080].  However,\ncurrently, \"isutf8char()\" still has this defect, see \"isutf8char()\" above.\n\n•   The C-level \"pregcomp\" function could become confused about whether the pattern was in\nUTF8 if the pattern was an overloaded, tied, or otherwise magical scalar [perl #101940].\n"
                    },
                    {
                        "name": "Compile-time hints",
                        "content": "•   Tying \"%^H\" no longer causes perl to crash or ignore the contents of \"%^H\" when entering\na compilation scope [perl #106282].\n\n•   \"eval $string\" and \"require\" used not to localize \"%^H\" during compilation if it was\nempty at the time the \"eval\" call itself was compiled.  This could lead to scary side\neffects, like \"use re \"/m\"\" enabling other flags that the surrounding code was trying to\nenable for its caller [perl #68750].\n\n•   \"eval $string\" and \"require\" no longer localize hints ($^H and \"%^H\") at run time, but\nonly during compilation of the $string or required file.  This makes \"BEGIN { $^H{foo}=7\n}\" equivalent to \"BEGIN { eval '$^H{foo}=7' }\" [perl #70151].\n\n•   Creating a BEGIN block from XS code (via \"newXS\" or \"newATTRSUB\") would, on completion,\nmake the hints of the current compiling code the current hints.  This could cause\nwarnings to occur in a non-warning scope.\n"
                    },
                    {
                        "name": "Copy-on-write scalars",
                        "content": "Copy-on-write or shared hash key scalars were introduced in 5.8.0, but most Perl code did not\nencounter them (they were used mostly internally).  Perl 5.10.0 extended them, such that\nassigning \"PACKAGE\" or a hash key to a scalar would make it copy-on-write.  Several parts\nof Perl were not updated to account for them, but have now been fixed.\n\n•   \"utf8::decode\" had a nasty bug that would modify copy-on-write scalars' string buffers in\nplace (i.e., skipping the copy).  This could result in hashes having two elements with\nthe same key [perl #91834]. (5.14.2)\n\n•   Lvalue subroutines were not allowing COW scalars to be returned.  This was fixed for\nlvalue scalar context in Perl 5.12.3 and 5.14.0, but list context was not fixed until\nthis release.\n\n•   Elements of restricted hashes (see the fields pragma) containing copy-on-write values\ncouldn't be deleted, nor could such hashes be cleared (\"%hash = ()\"). (5.14.2)\n\n•   Localizing a tied variable used to make it read-only if it contained a copy-on-write\nstring. (5.14.2)\n\n•   Assigning a copy-on-write string to a stash element no longer causes a double free.\nRegardless of this change, the results of such assignments are still undefined.\n\n•   Assigning a copy-on-write string to a tied variable no longer stops that variable from\nbeing tied if it happens to be a PVMG or PVLV internally.\n\n•   Doing a substitution on a tied variable returning a copy-on-write scalar used to cause an\nassertion failure or an \"Attempt to free nonexistent shared string\" warning.\n\n•   This one is a regression from 5.12: In 5.14.0, the bitwise assignment operators \"|=\",\n\"^=\" and \"&=\" started leaving the left-hand side undefined if it happened to be a copy-\non-write string [perl #108480].\n\n•   Storable, Devel::Peek and PerlIO::scalar had similar problems.  See \"Updated Modules and\nPragmata\", above.\n"
                    },
                    {
                        "name": "The debugger",
                        "content": "•   dumpvar.pl, and therefore the \"x\" command in the debugger, have been fixed to handle\nobjects blessed into classes whose names contain \"=\".  The contents of such objects used\nnot to be dumped [perl #101814].\n\n•   The \"R\" command for restarting a debugger session has been fixed to work on Windows, or\nany other system lacking a \"POSIX::SCOPENMAX\" constant [perl #87740].\n\n•   The \"#line 42 foo\" directive used not to update the arrays of lines used by the debugger\nif it occurred in a string eval.  This was partially fixed in 5.14, but it worked only\nfor a single \"#line 42 foo\" in each eval.  Now it works for multiple.\n\n•   When subroutine calls are intercepted by the debugger, the name of the subroutine or a\nreference to it is stored in $DB::sub, for the debugger to access.  Sometimes (such as\n\"$foo = *bar; undef *bar; &$foo\") $DB::sub would be set to a name that could not be used\nto find the subroutine, and so the debugger's attempt to call it would fail.  Now the\ncheck to see whether a reference is needed is more robust, so those problems should not\nhappen anymore [rt.cpan.org #69862].\n\n•   Every subroutine has a filename associated with it that the debugger uses.  The one\nassociated with constant subroutines used to be misallocated when cloned under threads.\nConsequently, debugging threaded applications could result in memory corruption [perl\n#96126].\n"
                    },
                    {
                        "name": "Dereferencing operators",
                        "content": "•   \"defined(${\"...\"})\", \"defined(*{\"...\"})\", etc., used to return true for most, but not all\nbuilt-in variables, if they had not been used yet.  This bug affected \"${^GLOBALPHASE}\"\nand \"${^UTF8CACHE}\", among others.  It also used to return false if the package name was\ngiven as well (\"${\"::!\"}\") [perl #97978, #97492].\n\n•   Perl 5.10.0 introduced a similar bug: \"defined(*{\"foo\"})\" where \"foo\" represents the name\nof a built-in global variable used to return false if the variable had never been used\nbefore, but only on the first call.  This, too, has been fixed.\n\n•   Since 5.6.0, \"*{ ... }\" has been inconsistent in how it treats undefined values.  It\nwould die in strict mode or lvalue context for most undefined values, but would be\ntreated as the empty string (with a warning) for the specific scalar return by \"undef()\"\n(&PLsvundef internally).  This has been corrected.  \"undef()\" is now treated like other\nundefined scalars, as in Perl 5.005.\n"
                    },
                    {
                        "name": "Filehandle, last-accessed",
                        "content": "Perl has an internal variable that stores the last filehandle to be accessed.  It is used by\n$. and by \"tell\" and \"eof\" without arguments.\n\n•   It used to be possible to set this internal variable to a glob copy and then modify that\nglob copy to be something other than a glob, and still have the last-accessed filehandle\nassociated with the variable after assigning a glob to it again:\n\nmy $foo = *STDOUT;  # $foo is a glob copy\n<$foo>;             # $foo is now the last-accessed handle\n$foo = 3;           # no longer a glob\n$foo = *STDERR;     # still the last-accessed handle\n\nNow the \"$foo = 3\" assignment unsets that internal variable, so there is no last-accessed\nfilehandle, just as if \"<$foo>\" had never happened.\n\nThis also prevents some unrelated handle from becoming the last-accessed handle if $foo\nfalls out of scope and the same internal SV gets used for another handle [perl #97988].\n\n•   A regression in 5.14 caused these statements not to set that internal variable:\n\nmy $fh = *STDOUT;\ntell $fh;\neof  $fh;\nseek $fh, 0,0;\ntell     *$fh;\neof      *$fh;\nseek     *$fh, 0,0;\nreadline *$fh;\n\nThis is now fixed, but \"tell *{ *$fh }\" still has the problem, and it is not clear how to\nfix it [perl #106536].\n"
                    },
                    {
                        "name": "Filetests and \"stat\"",
                        "content": "The term \"filetests\" refers to the operators that consist of a hyphen followed by a single\nletter: \"-r\", \"-x\", \"-M\", etc.  The term \"stacked\" when applied to filetests means followed\nby another filetest operator sharing the same operand, as in \"-r -x -w $fooo\".\n\n•   \"stat\" produces more consistent warnings.  It no longer warns for \"\" [perl #71002] and\nno longer skips the warning at times for other unopened handles.  It no longer warns\nabout an unopened handle when the operating system's \"fstat\" function fails.\n\n•   \"stat\" would sometimes return negative numbers for large inode numbers, because it was\nusing the wrong internal C type. [perl #84590]\n\n•   \"lstat\" is documented to fall back to \"stat\" (with a warning) when given a filehandle.\nWhen passed an IO reference, it was actually doing the equivalent of \"stat \" and\nignoring the handle.\n\n•   \"-T \" with no preceding \"stat\" used to produce a confusing \"uninitialized\" warning, even\nthough there is no visible uninitialized value to speak of.\n\n•   \"-T\", \"-B\", \"-l\" and \"-t\" now work when stacked with other filetest operators [perl\n#77388].\n\n•   In 5.14.0, filetest ops (\"-r\", \"-x\", etc.) started calling FETCH on a tied argument\nbelonging to the previous argument to a list operator, if called with a bareword argument\nor no argument at all.  This has been fixed, so \"push @foo, $tied, -r\" no longer calls\nFETCH on $tied.\n\n•   In Perl 5.6, \"-l\" followed by anything other than a bareword would treat its argument as\na file name.  That was changed in 5.8 for glob references (\"\\*foo\"), but not for globs\nthemselves (*foo).  \"-l\" started returning \"undef\" for glob references without setting\nthe last stat buffer that the \"\" handle uses, but only if warnings were turned on.  With\nwarnings off, it was the same as 5.6.  In other words, it was simply buggy and\ninconsistent.  Now the 5.6 behavior has been restored.\n\n•   \"-l\" followed by a bareword no longer \"eats\" the previous argument to the list operator\nin whose argument list it resides.  Hence, \"print \"bar\", -l foo\" now actually prints\n\"bar\", because \"-l\" on longer eats it.\n\n•   Perl keeps several internal variables to keep track of the last stat buffer, from which\nfile(handle) it originated, what type it was, and whether the last stat succeeded.\n\nThere were various cases where these could get out of synch, resulting in inconsistent or\nerratic behavior in edge cases (every mention of \"-T\" applies to \"-B\" as well):\n\n•   \"-T HANDLE\", even though it does a \"stat\", was not resetting the last stat type, so\nan \"lstat \" following it would merrily return the wrong results.  Also, it was not\nsetting the success status.\n\n•   Freeing the handle last used by \"stat\" or a filetest could result in \"-T \" using an\nunrelated handle.\n\n•   \"stat\" with an IO reference would not reset the stat type or record the filehandle\nfor \"-T \" to use.\n\n•   Fatal warnings could cause the stat buffer not to be reset for a filetest operator on\nan unopened filehandle or \"-l\" on any handle.  Fatal warnings also stopped \"-T\" from\nsetting $!.\n\n•   When the last stat was on an unreadable file, \"-T \" is supposed to return \"undef\",\nleaving the last stat buffer unchanged.  But it was setting the stat type, causing\n\"lstat \" to stop working.\n\n•   \"-T FILENAME\" was not resetting the internal stat buffers for unreadable files.\n\nThese have all been fixed.\n"
                    },
                    {
                        "name": "Formats",
                        "content": "•   Several edge cases have been fixed with formats and \"formline\"; in particular, where the\nformat itself is potentially variable (such as with ties and overloading), and where the\nformat and data differ in their encoding.  In both these cases, it used to possible for\nthe output to be corrupted [perl #91032].\n\n•   \"formline\" no longer converts its argument into a string in-place.  So passing a\nreference to \"formline\" no longer destroys the reference [perl #79532].\n\n•   Assignment to $^A (the format output accumulator) now recalculates the number of lines\noutput.\n"
                    },
                    {
                        "name": "\"given\" and \"when\"",
                        "content": "•   \"given\" was not scoping its implicit $ properly, resulting in memory leaks or \"Variable\nis not available\" warnings [perl #94682].\n\n•   \"given\" was not calling set-magic on the implicit lexical $ that it uses.  This meant,\nfor example, that \"pos\" would be remembered from one execution of the same \"given\" block\nto the next, even if the input were a different variable [perl #84526].\n\n•   \"when\" blocks are now capable of returning variables declared inside the enclosing\n\"given\" block [perl #93548].\n"
                    },
                    {
                        "name": "The \"glob\" operator",
                        "content": "•   On OSes other than VMS, Perl's \"glob\" operator (and the \"<...>\" form) use File::Glob\nunderneath.  File::Glob splits the pattern into words, before feeding each word to its\n\"bsdglob\" function.\n\nThere were several inconsistencies in the way the split was done.  Now quotation marks ('\nand \") are always treated as shell-style word delimiters (that allow whitespace as part\nof a word) and backslashes are always preserved, unless they exist to escape quotation\nmarks.  Before, those would only sometimes be the case, depending on whether the pattern\ncontained whitespace.  Also, escaped whitespace at the end of the pattern is no longer\nstripped [perl #40470].\n\n•   \"CORE::glob\" now works as a way to call the default globbing function.  It used to\nrespect overrides, despite the \"CORE::\" prefix.\n\n•   Under miniperl (used to configure modules when perl itself is built), \"glob\" now clears\n%ENV before calling csh, since the latter croaks on some systems if it does not like the\ncontents of the LSCOLORS environment variable [perl #98662].\n"
                    },
                    {
                        "name": "Lvalue subroutines",
                        "content": "•   Explicit return now returns the actual argument passed to return, instead of copying it\n[perl #72724, #72706].\n\n•   Lvalue subroutines used to enforce lvalue syntax (i.e., whatever can go on the left-hand\nside of \"=\") for the last statement and the arguments to return.  Since lvalue\nsubroutines are not always called in lvalue context, this restriction has been lifted.\n\n•   Lvalue subroutines are less restrictive about what values can be returned.  It used to\ncroak on values returned by \"shift\" and \"delete\" and from other subroutines, but no\nlonger does so [perl #71172].\n\n•   Empty lvalue subroutines (\"sub :lvalue {}\") used to return @ in list context.  All\nsubroutines used to do this, but regular subs were fixed in Perl 5.8.2.  Now lvalue\nsubroutines have been likewise fixed.\n\n•   Autovivification now works on values returned from lvalue subroutines [perl #7946], as\ndoes returning \"keys\" in lvalue context.\n\n•   Lvalue subroutines used to copy their return values in rvalue context.  Not only was this\na waste of CPU cycles, but it also caused bugs.  A \"($)\" prototype would cause an lvalue\nsub to copy its return value [perl #51408], and \"while(lvaluesub() =~ m/.../g) { ... }\"\nwould loop endlessly [perl #78680].\n\n•   When called in potential lvalue context (e.g., subroutine arguments or a list passed to\n\"for\"), lvalue subroutines used to copy any read-only value that was returned.  E.g., \"\nsub :lvalue { $] } \" would not return $], but a copy of it.\n\n•   When called in potential lvalue context, an lvalue subroutine returning arrays or hashes\nused to bind the arrays or hashes to scalar variables, resulting in bugs.  This was fixed\nin 5.14.0 if an array were the first thing returned from the subroutine (but not for\n\"$scalar, @array\" or hashes being returned).  Now a more general fix has been applied\n[perl #23790].\n\n•   Method calls whose arguments were all surrounded with \"my()\" or \"our()\" (as in\n\"$object->method(my($a,$b))\") used to force lvalue context on the subroutine.  This would\nprevent lvalue methods from returning certain values.\n\n•   Lvalue sub calls that are not determined to be such at compile time (&$name or &{\"name\"})\nare no longer exempt from strict refs if they occur in the last statement of an lvalue\nsubroutine [perl #102486].\n\n•   Sub calls whose subs are not visible at compile time, if they occurred in the last\nstatement of an lvalue subroutine, would reject non-lvalue subroutines and die with\n\"Can't modify non-lvalue subroutine call\" [perl #102486].\n\nNon-lvalue sub calls whose subs are visible at compile time exhibited the opposite bug.\nIf the call occurred in the last statement of an lvalue subroutine, there would be no\nerror when the lvalue sub was called in lvalue context.  Perl would blindly assign to the\ntemporary value returned by the non-lvalue subroutine.\n\n•   \"AUTOLOAD\" routines used to take precedence over the actual sub being called (i.e., when\nautoloading wasn't needed), for sub calls in lvalue or potential lvalue context, if the\nsubroutine was not visible at compile time.\n\n•   Applying the \":lvalue\" attribute to an XSUB or to an aliased subroutine stub with \"sub\nfoo :lvalue;\" syntax stopped working in Perl 5.12.  This has been fixed.\n\n•   Applying the :lvalue attribute to subroutine that is already defined does not work\nproperly, as the attribute changes the way the sub is compiled.  Hence, Perl 5.12 began\nwarning when an attempt is made to apply the attribute to an already defined sub.  In\nsuch cases, the attribute is discarded.\n\nBut the change in 5.12 missed the case where custom attributes are also present: that\ncase still silently and ineffectively applied the attribute.  That omission has now been\ncorrected.  \"sub foo :lvalue :Whatever\" (when \"foo\" is already defined) now warns about\nthe :lvalue attribute, and does not apply it.\n\n•   A bug affecting lvalue context propagation through nested lvalue subroutine calls has\nbeen fixed.  Previously, returning a value in nested rvalue context would be treated as\nlvalue context by the inner subroutine call, resulting in some values (such as read-only\nvalues) being rejected.\n"
                    },
                    {
                        "name": "Overloading",
                        "content": "•   Arithmetic assignment (\"$left += $right\") involving overloaded objects that rely on the\n'nomethod' override no longer segfault when the left operand is not overloaded.\n\n•   Errors that occur when methods cannot be found during overloading now mention the correct\npackage name, as they did in 5.8.x, instead of erroneously mentioning the \"overload\"\npackage, as they have since 5.10.0.\n\n•   Undefining %overload:: no longer causes a crash.\n"
                    },
                    {
                        "name": "Prototypes of built-in keywords",
                        "content": "•   The \"prototype\" function no longer dies for the \"FILE\", \"LINE\" and \"PACKAGE\"\ndirectives.  It now returns an empty-string prototype for them, because they are\nsyntactically indistinguishable from nullary functions like \"time\".\n\n•   \"prototype\" now returns \"undef\" for all overridable infix operators, such as \"eq\", which\nare not callable in any way resembling functions.  It used to return incorrect prototypes\nfor some and die for others [perl #94984].\n\n•   The prototypes of several built-in functions--\"getprotobynumber\", \"lock\", \"not\" and\n\"select\"--have been corrected, or at least are now closer to reality than before.\n"
                    },
                    {
                        "name": "Regular expressions",
                        "content": "•   \"/[[:ascii:]]/\" and \"/[[:blank:]]/\" now use locale rules under \"use locale\" when the\nplatform supports that.  Previously, they used the platform's native character set.\n\n•   \"m/[[:ascii:]]/i\" and \"/\\p{ASCII}/i\" now match identically (when not under a differing\nlocale).  This fixes a regression introduced in 5.14 in which the first expression could\nmatch characters outside of ASCII, such as the KELVIN SIGN.\n\n•   \"/.*/g\" would sometimes refuse to match at the end of a string that ends with \"\\n\".  This\nhas been fixed [perl #109206].\n\n•   Starting with 5.12.0, Perl used to get its internal bookkeeping muddled up after\nassigning \"${ qr// }\" to a hash element and locking it with Hash::Util.  This could\nresult in double frees, crashes, or erratic behavior.\n\n•   The new (in 5.14.0) regular expression modifier \"/a\" when repeated like \"/aa\" forbids the\ncharacters outside the ASCII range that match characters inside that range from matching\nunder \"/i\".  This did not work under some circumstances, all involving alternation, such\nas:\n\n\"\\N{KELVIN SIGN}\" =~ /k|foo/iaa;\n\nsucceeded inappropriately.  This is now fixed.\n\n•   5.14.0 introduced some memory leaks in regular expression character classes such as\n\"[\\w\\s]\", which have now been fixed. (5.14.1)\n\n•   An edge case in regular expression matching could potentially loop.  This happened only\nunder \"/i\" in bracketed character classes that have characters with multi-character\nfolds, and the target string to match against includes the first portion of the fold,\nfollowed by another character that has a multi-character fold that begins with the\nremaining portion of the fold, plus some more.\n\n\"s\\N{U+DF}\" =~ /[\\x{DF}foo]/i\n\nis one such case.  \"\\xDF\" folds to \"ss\". (5.14.1)\n\n•   A few characters in regular expression pattern matches did not match correctly in some\ncircumstances, all involving \"/i\".  The affected characters are: COMBINING GREEK\nYPOGEGRAMMENI, GREEK CAPITAL LETTER IOTA, GREEK CAPITAL LETTER UPSILON, GREEK\nPROSGEGRAMMENI, GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA, GREEK SMALL LETTER IOTA\nWITH DIALYTIKA AND TONOS, GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA, GREEK SMALL\nLETTER UPSILON WITH DIALYTIKA AND TONOS, LATIN SMALL LETTER LONG S, LATIN SMALL LIGATURE\nLONG S T, and LATIN SMALL LIGATURE ST.\n\n•   A memory leak regression in regular expression compilation under threading has been\nfixed.\n\n•   A regression introduced in 5.14.0 has been fixed.  This involved an inverted bracketed\ncharacter class in a regular expression that consisted solely of a Unicode property.\nThat property wasn't getting inverted outside the Latin1 range.\n\n•   Three problematic Unicode characters now work better in regex pattern matching under\n\"/i\".\n\nIn the past, three Unicode characters: LATIN SMALL LETTER SHARP S, GREEK SMALL LETTER\nIOTA WITH DIALYTIKA AND TONOS, and GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS,\nalong with the sequences that they fold to (including \"ss\" for LATIN SMALL LETTER SHARP\nS), did not properly match under \"/i\".  5.14.0 fixed some of these cases, but introduced\nothers, including a panic when one of the characters or sequences was used in the\n\"(?(DEFINE)\" regular expression predicate.  The known bugs that were introduced in 5.14\nhave now been fixed; as well as some other edge cases that have never worked until now.\nThese all involve using the characters and sequences outside bracketed character classes\nunder \"/i\".  This closes [perl #98546].\n\nThere remain known problems when using certain characters with multi-character folds\ninside bracketed character classes, including such constructs as \"qr/[\\N{LATIN SMALL\nLETTER SHARP}a-z]/i\".  These remaining bugs are addressed in [perl #89774].\n\n•   RT #78266: The regex engine has been leaking memory when accessing named captures that\nweren't matched as part of a regex ever since 5.10 when they were introduced; e.g., this\nwould consume over a hundred MB of memory:\n\nfor (1..10000000) {\nif (\"foo\" =~ /(foo|(?<capture>bar))?/) {\nmy $capture = $+{capture}\n}\n}\nsystem \"ps -o rss $$\"'\n\n•   In 5.14, \"/[[:lower:]]/i\" and \"/[[:upper:]]/i\" no longer matched the opposite case.  This\nhas been fixed [perl #101970].\n\n•   A regular expression match with an overloaded object on the right-hand side would\nsometimes stringify the object too many times.\n\n•   A regression has been fixed that was introduced in 5.14, in \"/i\" regular expression\nmatching, in which a match improperly fails if the pattern is in UTF-8, the target string\nis not, and a Latin-1 character precedes a character in the string that should match the\npattern.  [perl #101710]\n\n•   In case-insensitive regular expression pattern matching, no longer on UTF-8 encoded\nstrings does the scan for the start of match look only at the first possible position.\nThis caused matches such as \"\"f\\x{FB00}\" =~ /ff/i\" to fail.\n\n•   The regexp optimizer no longer crashes on debugging builds when merging fixed-string\nnodes with inconvenient contents.\n\n•   A panic involving the combination of the regular expression modifiers \"/aa\" and the \"\\b\"\nescape sequence introduced in 5.14.0 has been fixed [perl #95964]. (5.14.2)\n\n•   The combination of the regular expression modifiers \"/aa\" and the \"\\b\" and \"\\B\" escape\nsequences did not work properly on UTF-8 encoded strings.  All non-ASCII characters under\n\"/aa\" should be treated as non-word characters, but what was happening was that Unicode\nrules were used to determine wordness/non-wordness for non-ASCII characters.  This is now\nfixed [perl #95968].\n\n•   \"(?foo: ...)\" no longer loses passed in character set.\n\n•   The trie optimization used to have problems with alternations containing an empty \"(?:)\",\ncausing \"\"x\" =~ /\\A(?>(?:(?:)A|B|C?x))\\z/\" not to match, whereas it should [perl\n#111842].\n\n•   Use of lexical (\"my\") variables in code blocks embedded in regular expressions will no\nlonger result in memory corruption or crashes.\n\nNevertheless, these code blocks are still experimental, as there are still problems with\nthe wrong variables being closed over (in loops for instance) and with abnormal exiting\n(e.g., \"die\") causing memory corruption.\n\n•   The \"\\h\", \"\\H\", \"\\v\" and \"\\V\" regular expression metacharacters used to cause a panic\nerror message when trying to match at the end of the string [perl #96354].\n\n•   The abbreviations for four C1 control characters \"MW\" \"PM\", \"RI\", and \"ST\" were\npreviously unrecognized by \"\\N{}\", vianame(), and stringvianame().\n\n•   Mentioning a variable named \"&\" other than $& (i.e., \"@&\" or \"%&\") no longer stops $&\nfrom working.  The same applies to variables named \"'\" and \"`\" [perl #24237].\n\n•   Creating a \"UNIVERSAL::AUTOLOAD\" sub no longer stops \"%+\", \"%-\" and \"%!\" from working\nsome of the time [perl #105024].\n"
                    },
                    {
                        "name": "Smartmatching",
                        "content": "•   \"~~\" now correctly handles the precedence of Any~~Object, and is not tricked by an\noverloaded object on the left-hand side.\n\n•   In Perl 5.14.0, \"$tainted ~~ @array\" stopped working properly.  Sometimes it would\nerroneously fail (when $tainted contained a string that occurs in the array after the\nfirst element) or erroneously succeed (when \"undef\" occurred after the first element)\n[perl #93590].\n"
                    },
                    {
                        "name": "The \"sort\" operator",
                        "content": "•   \"sort\" was not treating \"sub {}\" and \"sub {()}\" as equivalent when such a sub was\nprovided as the comparison routine.  It used to croak on \"sub {()}\".\n\n•   \"sort\" now works once more with custom sort routines that are XSUBs.  It stopped working\nin 5.10.0.\n\n•   \"sort\" with a constant for a custom sort routine, although it produces unsorted results,\nno longer crashes.  It started crashing in 5.10.0.\n\n•   Warnings emitted by \"sort\" when a custom comparison routine returns a non-numeric value\nnow contain \"in sort\" and show the line number of the \"sort\" operator, rather than the\nlast line of the comparison routine.  The warnings also now occur only if warnings are\nenabled in the scope where \"sort\" occurs.  Previously the warnings would occur if enabled\nin the comparison routine's scope.\n\n•   \"sort { $a <=> $b }\", which is optimized internally, now produces \"uninitialized\"\nwarnings for NaNs (not-a-number values), since \"<=>\" returns \"undef\" for those.  This\nbrings it in line with \"sort { 1; $a <=> $b }\" and other more complex cases, which are\nnot optimized [perl #94390].\n"
                    },
                    {
                        "name": "The \"substr\" operator",
                        "content": "•   Tied (and otherwise magical) variables are no longer exempt from the \"Attempt to use\nreference as lvalue in substr\" warning.\n\n•   That warning now occurs when the returned lvalue is assigned to, not when \"substr\" itself\nis called.  This makes a difference only if the return value of \"substr\" is referenced\nand later assigned to.\n\n•   Passing a substring of a read-only value or a typeglob to a function (potential lvalue\ncontext) no longer causes an immediate \"Can't coerce\" or \"Modification of a read-only\nvalue\" error.  That error occurs only if the passed value is assigned to.\n\nThe same thing happens with the \"substr outside of string\" error.  If the lvalue is only\nread from, not written to, it is now just a warning, as with rvalue \"substr\".\n\n•   \"substr\" assignments no longer call FETCH twice if the first argument is a tied variable,\njust once.\n"
                    },
                    {
                        "name": "Support for embedded nulls",
                        "content": "Some parts of Perl did not work correctly with nulls (\"chr 0\") embedded in strings.  That\nmeant that, for instance, \"$m = \"a\\0b\"; foo->$m\" would call the \"a\" method, instead of the\nactual method name contained in $m.  These parts of perl have been fixed to support nulls:\n\n•   Method names\n\n•   Typeglob names (including filehandle and subroutine names)\n\n•   Package names, including the return value of \"ref()\"\n\n•   Typeglob elements (*foo{\"THING\\0stuff\"})\n\n•   Signal names\n\n•   Various warnings and error messages that mention variable names or values, methods, etc.\n\nOne side effect of these changes is that blessing into \"\\0\" no longer causes \"ref()\" to\nreturn false.\n"
                    },
                    {
                        "name": "Threading bugs",
                        "content": "•   Typeglobs returned from threads are no longer cloned if the parent thread already has a\nglob with the same name.  This means that returned subroutines will now assign to the\nright package variables [perl #107366].\n\n•   Some cases of threads crashing due to memory allocation during cloning have been fixed\n[perl #90006].\n\n•   Thread joining would sometimes emit \"Attempt to free unreferenced scalar\" warnings if\n\"caller\" had been used from the \"DB\" package before thread creation [perl #98092].\n\n•   Locking a subroutine (via \"lock &sub\") is no longer a compile-time error for regular\nsubs.  For lvalue subroutines, it no longer tries to return the sub as a scalar,\nresulting in strange side effects like \"ref \\$\" returning \"CODE\" in some instances.\n\n\"lock &sub\" is now a run-time error if threads::shared is loaded (a no-op otherwise), but\nthat may be rectified in a future version.\n"
                    },
                    {
                        "name": "Tied variables",
                        "content": "•   Various cases in which FETCH was being ignored or called too many times have been fixed:\n\n•   \"PerlIO::getlayers\" [perl #97956]\n\n•   \"$tied =~ y/a/b/\", \"chop $tied\" and \"chomp $tied\" when $tied holds a reference.\n\n•   When calling \"local $\" [perl #105912]\n\n•   Four-argument \"select\"\n\n•   A tied buffer passed to \"sysread\"\n\n•   \"$tied .= <>\"\n\n•   Three-argument \"open\", the third being a tied file handle (as in \"open $fh, \">&\",\n$tied\")\n\n•   \"sort\" with a reference to a tied glob for the comparison routine.\n\n•   \"..\" and \"...\" in list context [perl #53554].\n\n•   \"${$tied}\", \"@{$tied}\", \"%{$tied}\" and \"*{$tied}\" where the tied variable returns a\nstring (\"&{}\" was unaffected)\n\n•   \"defined ${ $tiedvariable }\"\n\n•   Various functions that take a filehandle argument in rvalue context (\"close\",\n\"readline\", etc.) [perl #97482]\n\n•   Some cases of dereferencing a complex expression, such as \"${ (), $tied } = 1\", used\nto call \"FETCH\" multiple times, but now call it once.\n\n•   \"$tied->method\" where $tied returns a package name--even resulting in a failure to\ncall the method, due to memory corruption\n\n•   Assignments like \"*$tied = \\&{\"...\"}\" and \"*glob = $tied\"\n\n•   \"chdir\", \"chmod\", \"chown\", \"utime\", \"truncate\", \"stat\", \"lstat\" and the filetest ops\n(\"-r\", \"-x\", etc.)\n\n•   \"caller\" sets @DB::args to the subroutine arguments when called from the DB package.  It\nused to crash when doing so if @DB::args happened to be tied.  Now it croaks instead.\n\n•   Tying an element of %ENV or \"%^H\" and then deleting that element would result in a call\nto the tie object's DELETE method, even though tying the element itself is supposed to be\nequivalent to tying a scalar (the element is, of course, a scalar) [perl #67490].\n\n•   When Perl autovivifies an element of a tied array or hash (which entails calling STORE\nwith a new reference), it now calls FETCH immediately after the STORE, instead of\nassuming that FETCH would have returned the same reference.  This can make it easier to\nimplement tied objects [perl #35865, #43011].\n\n•   Four-argument \"select\" no longer produces its \"Non-string passed as bitmask\" warning on\ntied or tainted variables that are strings.\n\n•   Localizing a tied scalar that returns a typeglob no longer stops it from being tied till\nthe end of the scope.\n\n•   Attempting to \"goto\" out of a tied handle method used to cause memory corruption or\ncrashes.  Now it produces an error message instead [perl #8611].\n\n•   A bug has been fixed that occurs when a tied variable is used as a subroutine reference:\nif the last thing assigned to or returned from the variable was a reference or typeglob,\nthe \"\\&$tied\" could either crash or return the wrong subroutine.  The reference case is a\nregression introduced in Perl 5.10.0.  For typeglobs, it has probably never worked till\nnow.\n"
                    },
                    {
                        "name": "Version objects and vstrings",
                        "content": "•   The bitwise complement operator (and possibly other operators, too) when passed a vstring\nwould leave vstring magic attached to the return value, even though the string had\nchanged.  This meant that \"version->new(~v1.2.3)\" would create a version looking like\n\"v1.2.3\" even though the string passed to \"version->new\" was actually \"\\376\\375\\374\".\nThis also caused B::Deparse to deparse \"~v1.2.3\" incorrectly, without the \"~\" [perl\n#29070].\n\n•   Assigning a vstring to a magic (e.g., tied, $!) variable and then assigning something\nelse used to blow away all magic.  This meant that tied variables would come undone, $!\nwould stop getting updated on failed system calls, $| would stop setting autoflush, and\nother mischief would take place.  This has been fixed.\n\n•   \"version->new(\"version\")\" and \"printf \"%vd\", \"version\"\" no longer crash [perl #102586].\n\n•   Version comparisons, such as those that happen implicitly with \"use v5.43\", no longer\ncause locale settings to change [perl #105784].\n\n•   Version objects no longer cause memory leaks in boolean context [perl #109762].\n"
                    },
                    {
                        "name": "Warnings, redefinition",
                        "content": "•   Subroutines from the \"autouse\" namespace are once more exempt from redefinition warnings.\nThis used to work in 5.005, but was broken in 5.6 for most subroutines.  For subs created\nvia XS that redefine subroutines from the \"autouse\" package, this stopped working in\n5.10.\n\n•   New XSUBs now produce redefinition warnings if they overwrite existing subs, as they did\nin 5.8.x.  (The \"autouse\" logic was reversed in 5.10-14.  Only subroutines from the\n\"autouse\" namespace would warn when clobbered.)\n\n•   \"newCONSTSUB\" used to use compile-time warning hints, instead of run-time hints.  The\nfollowing code should never produce a redefinition warning, but it used to, if\n\"newCONSTSUB\" redefined an existing subroutine:\n\nuse warnings;\nBEGIN {\nno warnings;\nsomeXSfunctionthatcallsnewCONSTSUB();\n}\n\n•   Redefinition warnings for constant subroutines are on by default (what are known as\nsevere warnings in perldiag).  This occurred only when it was a glob assignment or\ndeclaration of a Perl subroutine that caused the warning.  If the creation of XSUBs\ntriggered the warning, it was not a default warning.  This has been corrected.\n\n•   The internal check to see whether a redefinition warning should occur used to emit\n\"uninitialized\" warnings in cases like this:\n\nuse warnings \"uninitialized\";\nuse constant {u => undef, v => undef};\nsub foo(){u}\nsub foo(){v}\n"
                    },
                    {
                        "name": "Warnings, \"Uninitialized\"",
                        "content": "•   Various functions that take a filehandle argument in rvalue context (\"close\", \"readline\",\netc.) used to warn twice for an undefined handle [perl #97482].\n\n•   \"dbmopen\" now only warns once, rather than three times, if the mode argument is \"undef\"\n[perl #90064].\n\n•   The \"+=\" operator does not usually warn when the left-hand side is \"undef\", but it was\ndoing so for tied variables.  This has been fixed [perl #44895].\n\n•   A bug fix in Perl 5.14 introduced a new bug, causing \"uninitialized\" warnings to report\nthe wrong variable if the operator in question had two operands and one was \"%{...}\" or\n\"@{...}\".  This has been fixed [perl #103766].\n\n•   \"..\" and \"...\" in list context now mention the name of the variable in \"uninitialized\"\nwarnings for string (as opposed to numeric) ranges.\n"
                    },
                    {
                        "name": "Weak references",
                        "content": "•   Weakening the first argument to an automatically-invoked \"DESTROY\" method could result in\nerroneous \"DESTROY created new reference\" errors or crashes.  Now it is an error to\nweaken a read-only reference.\n\n•   Weak references to lexical hashes going out of scope were not going stale (becoming\nundefined), but continued to point to the hash.\n\n•   Weak references to lexical variables going out of scope are now broken before any magical\nmethods (e.g., DESTROY on a tie object) are called.  This prevents such methods from\nmodifying the variable that will be seen the next time the scope is entered.\n\n•   Creating a weak reference to an @ISA array or accessing the array index ($#ISA) could\nresult in confused internal bookkeeping for elements later added to the @ISA array.  For\ninstance, creating a weak reference to the element itself could push that weak reference\non to @ISA; and elements added after use of $#ISA would be ignored by method lookup [perl\n#85670].\n"
                    },
                    {
                        "name": "Other notable fixes",
                        "content": "•   \"quotemeta\" now quotes consistently the same non-ASCII characters under \"use feature\n'unicodestrings'\", regardless of whether the string is encoded in UTF-8 or not, hence\nfixing the last vestiges (we hope) of the notorious \"The \"Unicode Bug\"\" in perlunicode.\n[perl #77654].\n\nWhich of these code points is quoted has changed, based on Unicode's recommendations.\nSee \"quotemeta\" in perlfunc for details.\n\n•   \"study\" is now a no-op, presumably fixing all outstanding bugs related to study causing\nregex matches to behave incorrectly!\n\n•   When one writes \"open foo || die\", which used to work in Perl 4, a \"Precedence problem\"\nwarning is produced.  This warning used erroneously to apply to fully-qualified bareword\nhandle names not followed by \"||\".  This has been corrected.\n\n•   After package aliasing (\"*foo:: = *bar::\"), \"select\" with 0 or 1 argument would sometimes\nreturn a name that could not be used to refer to the filehandle, or sometimes it would\nreturn \"undef\" even when a filehandle was selected.  Now it returns a typeglob reference\nin such cases.\n\n•   \"PerlIO::getlayers\" no longer ignores some arguments that it thinks are numeric, while\ntreating others as filehandle names.  It is now consistent for flat scalars (i.e., not\nreferences).\n\n•   Unrecognized switches on \"#!\" line\n\nIf a switch, such as -x, that cannot occur on the \"#!\" line is used there, perl dies with\n\"Can't emulate...\".\n\nIt used to produce the same message for switches that perl did not recognize at all,\nwhether on the command line or the \"#!\" line.\n\nNow it produces the \"Unrecognized switch\" error message [perl #104288].\n\n•   \"system\" now temporarily blocks the SIGCHLD signal handler, to prevent the signal handler\nfrom stealing the exit status [perl #105700].\n\n•   The %n formatting code for \"printf\" and \"sprintf\", which causes the number of characters\nto be assigned to the next argument, now actually assigns the number of characters,\ninstead of the number of bytes.\n\nIt also works now with special lvalue functions like \"substr\" and with nonexistent hash\nand array elements [perl #3471, #103492].\n\n•   Perl skips copying values returned from a subroutine, for the sake of speed, if doing so\nwould make no observable difference.  Because of faulty logic, this would happen with the\nresult of \"delete\", \"shift\" or \"splice\", even if the result was referenced elsewhere.  It\nalso did so with tied variables about to be freed [perl #91844, #95548].\n\n•   \"utf8::decode\" now refuses to modify read-only scalars [perl #91850].\n\n•   Freeing $ inside a \"grep\" or \"map\" block, a code block embedded in a regular expression,\nor an @INC filter (a subroutine returned by a subroutine in @INC) used to result in\ndouble frees or crashes [perl #91880, #92254, #92256].\n\n•   \"eval\" returns \"undef\" in scalar context or an empty list in list context when there is a\nrun-time error.  When \"eval\" was passed a string in list context and a syntax error\noccurred, it used to return a list containing a single undefined element.  Now it returns\nan empty list in list context for all errors [perl #80630].\n\n•   \"goto &func\" no longer crashes, but produces an error message, when the unwinding of the\ncurrent subroutine's scope fires a destructor that undefines the subroutine being\n\"goneto\" [perl #99850].\n\n•   Perl now holds an extra reference count on the package that code is currently compiling\nin.  This means that the following code no longer crashes [perl #101486]:\n\npackage Foo;\nBEGIN {*Foo:: = *Bar::}\nsub foo;\n\n•   The \"x\" repetition operator no longer crashes on 64-bit builds with large repeat counts\n[perl #94560].\n\n•   Calling \"require\" on an implicit $ when *CORE::GLOBAL::require has been overridden does\nnot segfault anymore, and $ is now passed to the overriding subroutine [perl #78260].\n\n•   \"use\" and \"require\" are no longer affected by the I/O layers active in the caller's scope\n(enabled by open.pm) [perl #96008].\n\n•   \"our $::é; $é\" (which is invalid) no longer produces the \"Compilation error at\nlib/utf8heavy.pl...\" error message, which it started emitting in 5.10.0 [perl #99984].\n\n•   On 64-bit systems, \"read()\" now understands large string offsets beyond the 32-bit range.\n\n•   Errors that occur when processing subroutine attributes no longer cause the subroutine's\nop tree to leak.\n\n•   Passing the same constant subroutine to both \"index\" and \"formline\" no longer causes one\nor the other to fail [perl #89218]. (5.14.1)\n\n•   List assignment to lexical variables declared with attributes in the same statement (\"my\n($x,@y) : blimp = (72,94)\") stopped working in Perl 5.8.0.  It has now been fixed.\n\n•   Perl 5.10.0 introduced some faulty logic that made \"U*\" in the middle of a pack template\nequivalent to \"U0\" if the input string was empty.  This has been fixed [perl #90160].\n(5.14.2)\n\n•   Destructors on objects were not called during global destruction on objects that were not\nreferenced by any scalars.  This could happen if an array element were blessed (e.g.,\n\"bless \\$a[0]\") or if a closure referenced a blessed variable (\"bless \\my @a; sub foo {\n@a }\").\n\nNow there is an extra pass during global destruction to fire destructors on any objects\nthat might be left after the usual passes that check for objects referenced by scalars\n[perl #36347].\n\n•   Fixed a case where it was possible that a freed buffer may have been read from when\nparsing a here document [perl #90128]. (5.14.1)\n\n•   \"each(ARRAY)\" is now wrapped in \"defined(...)\", like \"each(HASH)\", inside a \"while\"\ncondition [perl #90888].\n\n•   A problem with context propagation when a \"do\" block is an argument to \"return\" has been\nfixed.  It used to cause \"undef\" to be returned in certain cases of a \"return\" inside an\n\"if\" block which itself is followed by another \"return\".\n\n•   Calling \"index\" with a tainted constant no longer causes constants in subsequently\ncompiled code to become tainted [perl #64804].\n\n•   Infinite loops like \"1 while 1\" used to stop \"strict 'subs'\" mode from working for the\nrest of the block.\n\n•   For list assignments like \"($a,$b) = ($b,$a)\", Perl has to make a copy of the items on\nthe right-hand side before assignment them to the left.  For efficiency's sake, it\nassigns the values on the right straight to the items on the left if no one variable is\nmentioned on both sides, as in \"($a,$b) = ($c,$d)\".  The logic for determining when it\ncan cheat was faulty, in that \"&&\" and \"||\" on the right-hand side could fool it.  So\n\"($a,$b) = $sometruevalue && ($b,$a)\" would end up assigning the value of $b to both\nscalars.\n\n•   Perl no longer tries to apply lvalue context to the string in \"(\"string\", $variable) ||=\n1\" (which used to be an error).  Since the left-hand side of \"||=\" is evaluated in scalar\ncontext, that's a scalar comma operator, which gives all but the last item void context.\nThere is no such thing as void lvalue context, so it was a mistake for Perl to try to\nforce it [perl #96942].\n\n•   \"caller\" no longer leaks memory when called from the DB package if @DB::args was assigned\nto after the first call to \"caller\".  Carp was triggering this bug [perl #97010].\n(5.14.2)\n\n•   \"close\" and similar filehandle functions, when called on built-in global variables (like\n$+), used to die if the variable happened to hold the undefined value, instead of\nproducing the usual \"Use of uninitialized value\" warning.\n\n•   When autovivified file handles were introduced in Perl 5.6.0, \"readline\" was\ninadvertently made to autovivify when called as \"readline($foo)\" (but not as \"<$foo>\").\nIt has now been fixed never to autovivify.\n\n•   Calling an undefined anonymous subroutine (e.g., what $x holds after \"undef &{$x =\nsub{}}\") used to cause a \"Not a CODE reference\" error, which has been corrected to\n\"Undefined subroutine called\" [perl #71154].\n\n•   Causing @DB::args to be freed between uses of \"caller\" no longer results in a crash [perl\n#93320].\n\n•   \"setpgrp($foo)\" used to be equivalent to \"($foo, setpgrp)\", because \"setpgrp\" was\nignoring its argument if there was just one.  Now it is equivalent to \"setpgrp($foo,0)\".\n\n•   \"shmread\" was not setting the scalar flags correctly when reading from shared memory,\ncausing the existing cached numeric representation in the scalar to persist [perl\n#98480].\n\n•   \"++\" and \"--\" now work on copies of globs, instead of dying.\n\n•   \"splice()\" doesn't warn when truncating\n\nYou can now limit the size of an array using \"splice(@a,MAXLEN)\" without worrying about\nwarnings.\n\n•   $$ is no longer tainted.  Since this value comes directly from \"getpid()\", it is always\nsafe.\n\n•   The parser no longer leaks a filehandle if STDIN was closed before parsing started [perl\n#37033].\n\n•   \"die;\" with a non-reference, non-string, or magical (e.g., tainted) value in $@ now\nproperly propagates that value [perl #111654].\n"
                    },
                    {
                        "name": "Known Problems",
                        "content": "•   On Solaris, we have two kinds of failure.\n\nIf make is Sun's make, we get an error about a badly formed macro assignment in the\nMakefile.  That happens when ./Configure tries to make depends.  Configure then exits 0,\nbut further make-ing fails.\n\nIf make is gmake, Configure completes, then we get errors related to\n/usr/include/stdbool.h\n\n•   On Win32, a number of tests hang unless STDERR is redirected.  The cause of this is still\nunder investigation.\n\n•   When building as root with a umask that prevents files from being other-readable,\nt/op/filetest.t will fail.  This is a test bug, not a bug in perl's behavior.\n\n•   Configuring with a recent gcc and link-time-optimization, such as \"Configure\n-Doptimize='-O2 -flto'\" fails because the optimizer optimizes away some of Configure's\ntests.  A workaround is to omit the \"-flto\" flag when running Configure, but add it back\nin while actually building, something like\n\nsh Configure -Doptimize=-O2\nmake OPTIMIZE='-O2 -flto'\n\n•   The following CPAN modules have test failures with perl 5.16.  Patches have been\nsubmitted for all of these, so hopefully there will be new releases soon:\n\n•   Date::Pcalc version 6.1\n\n•   Module::CPANTS::Analyse version 0.85\n\nThis fails due to problems in Module::Find 0.10 and File::MMagic 1.27.\n\n•   PerlIO::Util version 0.72\n"
                    }
                ]
            },
            "Acknowledgements": {
                "content": "Perl 5.16.0 represents approximately 12 months of development since Perl 5.14.0 and contains\napproximately 590,000 lines of changes across 2,500 files from 139 authors.\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.16.0:\n\nAaron Crane, Abhijit Menon-Sen, Abigail, Alan Haggai Alavi, Alberto Simões, Alexandr Ciornii,\nAndreas König, Andy Dougherty, Aristotle Pagaltzis, Bo Johansson, Bo Lindbergh, Breno G. de\nOliveira, brian d foy, Brian Fraser, Brian Greenfield, Carl Hayter, Chas. Owens, Chia-liang\nKao, Chip Salzenberg, Chris 'BinGOs' Williams, Christian Hansen, Christopher J. Madsen,\nchromatic, Claes Jacobsson, Claudio Ramirez, Craig A. Berry, Damian Conway, Daniel Kahn\nGillmor, Darin McBride, Dave Rolsky, David Cantrell, David Golden, David Leadbeater, David\nMitchell, Dee Newcum, Dennis Kaarsemaker, Dominic Hargreaves, Douglas Christopher Wilson,\nEric Brine, Father Chrysostomos, Florian Ragwitz, Frederic Briere, George Greer, Gerard\nGoossen, Gisle Aas, H.Merijn Brand, Hojung Youn, Ian Goodacre, James E Keenan, Jan Dubois,\nJerry D. Hedden, Jesse Luehrs, Jesse Vincent, Jilles Tjoelker, Jim Cromie, Jim Meyering, Joel\nBerger, Johan Vromans, Johannes Plunien, John Hawkinson, John P. Linderman, John Peacock,\nJoshua ben Jore, Juerd Waalboer, Karl Williamson, Karthik Rajagopalan, Keith Thompson, Kevin\nJ.  Woolley, Kevin Ryde, Laurent Dami, Leo Lapworth, Leon Brocard, Leon Timmermans, Louis\nStrous, Lukas Mai, Marc Green, Marcel Grünauer, Mark A.  Stratman, Mark Dootson, Mark Jason\nDominus, Martin Hasch, Matthew Horsfall, Max Maischein, Michael G Schwern, Michael Witten,\nMike Sheldrake, Moritz Lenz, Nicholas Clark, Niko Tyni, Nuno Carvalho, Pau Amma, Paul Evans,\nPaul Green, Paul Johnson, Perlover, Peter John Acklam, Peter Martini, Peter Scott, Phil\nMonsen, Pino Toscano, Rafael Garcia-Suarez, Rainer Tammer, Reini Urban, Ricardo Signes, Robin\nBarker, Rodolfo Carvalho, Salvador Fandiño, Sam Kimbrel, Samuel Thibault, Shawn M Moore,\nShigeya Suzuki, Shirakata Kentaro, Shlomi Fish, Sisyphus, Slaven Rezic, Spiros Denaxas,\nSteffen Müller, Steffen Schwigon, Stephen Bennett, Stephen Oberholtzer, Stevan Little, Steve\nHay, Steve Peters, Thomas Sibley, Thorsten Glaser, Timothe Litt, Todd Rinaldo, Tom\nChristiansen, Tom Hukins, Tony Cook, Vadim Konovalov, Vincent Pit, Vladimir Timofeev, Walt\nMankowski, Yves Orton, 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": [
                    {
                        "name": "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 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 use this address only for security issues in\nthe Perl core, not for modules independently distributed on CPAN.\n"
                    }
                ]
            },
            "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\n\n\nperl v5.34.0                                 2025-07-25                             PERL5160DELTA(1)",
                "subsections": []
            }
        }
    }
}