This is supposed to be the final data for 6.2,
unless glitches are found.
The earlier experimental 6.2 beta data has been reverted,
and this used instead.
Not all the changes that were proposed for 6.2 and that were in the earlier beta versions are actually going into 6.2.
In particular,
there are no changes from 6.1 in the General_Category of any characters.
6.2 does revise the \X handling for the REGIONAL INDICATOR characters that were added in Unicode 6.0.
Perl now for the first time fully handles this revision.

no warnings "experimental:feature_name";
use feature "feature_name"; # would warn without the prev line

There is a new warnings category, called "experimental", containing warnings that the feature pragma emits when enabling experimental features.

Newly-added experimental features will also be given special warning IDs, which consist of "experimental:" followed by the name of the feature. (The plan is to extend this mechanism eventually to all warnings, to allow them to be enabled or disabled individually, and not just by category.)

By saying

no warnings "experimental:feature_name";

you are taking responsibility for any breakage that future changes to, or removal of, the feature may cause.

The body of a here-document inside a quote-like operator now always begins on the line after the "<<foo" marker. Previously, it was documented to begin on the line following the containing quote-like operator, but that was only sometimes the case [perl #114040].

Now, the debugging, deprecated, glob, inplace and malloc warnings categories are left on when turning on lexical warnings (unless they are turned off by no warnings, of course).

This may cause deprecation warnings to occur in code that used to be free of warnings.

Those are the only categories consisting only of default warnings. Default warnings in other categories are still disabled by use warnings "category", as we do not yet have the infrastructure for controlling individual warnings.

Due to an accident of history, state sub and our sub were equivalent to a plain sub, so one could even create an anonymous sub with our sub { ... }. These are now disallowed outside of the "lexical_subs" feature. Under the "lexical_subs" feature they have new meanings described in "Lexical Subroutines" in perlsub.

The various gv_fetchmeth_* XS functions used to treat a package whose named ended with ::SUPER specially. A method lookup on the Foo::SUPER package would be treated as a SUPER method lookup on the Foo package. This is no longer the case. To do a SUPER lookup, pass the Foo stash and the GV_SUPER flag.

Speed up in regular expression matching against Unicode properties. The largest gain is for \X, the Unicode "extended grapheme cluster". The gain for it is about 35% - 40%. Bracketed character classes, e.g., [0-9\x{100}] containing code points above 255 are also now faster.

On platforms supporting it, several former macros are now implemented as static inline functions. This should speed things up slightly on non-GCC platforms.

Apply the optimisation of hashes in boolean context, such as in if or and, to constructs in non-void context.

When making a copy of the string being matched against (so that $1, $& et al continue to show the correct value even if the original string is subsequently modified), only copy that substring of the original string needed for the capture variables, rather than copying the whole string.

This is a big win for code like

$&;
$_ = 'x' x 1_000_000;
1 while /(.)/;

Also, when pessimizing if the code contains $`, $& or $', record the presence of each variable separately, so that the determination of the substring range is based on each variable separately. So performance-wise,

Archive::Tar has been upgraded from version 1.88 to 1.90. This adds documentation fixes.

B has been upgraded from version 1.37 to 1.38. This makes the module work with the new pad API.

B::Concise has been upgraded from version 0.92 to 0.93. This adds support for the new OpMAYBE_TRUEBOOL and OPpTRUEBOOL flags.

B::Deparse has been upgraded from version 1.16 to 1.17. This suppresses trailing semicolons in formats.

CPANPLUS has been upgraded from version 0.9130 to 0.9131. This resolves issues with the SQLite source engine.

DB_File has been upgraded from version 1.826 to 1.827. The main Perl module no longer uses the "@_" construct.

Devel::Peek has been upgraded from version 1.09 to 1.10. This fixes compilation with C++ compilers and makes the module work with the new pad API.

DynaLoader has been upgraded from version 1.15 to 1.16. This fixes warnings about using CODE sections without an OUTPUT section.

ExtUtils::ParseXS has been upgraded from version 3.17 to 3.18. This avoids a bogus warning for initialised XSUB non-parameters [perl #112776].

File::Copy has been upgraded from version 2.23 to 2.24. copy() no longer zeros files when copying into the same directory, and also now fails (as it has long been documented to do) when attempting to copy a file over itself.

File::Find has been upgraded from version 1.21 to 1.22. This fixes inconsistent unixy path handling on VMS.

IPC::Open3 has been upgraded from version 1.12 to 1.13. The open3() function no longer uses POSIX::close() to close file descriptors since that breaks the ref-counting of file descriptors done by PerlIO in cases where the file descriptors are shared by PerlIO streams, leading to attempts to close the file descriptors a second time when any such PerlIO streams are closed later on.

Locale::Codes has been upgraded from version 3.22 to 3.23. It includes some new codes.

Module::CoreList has been upgraded from version 2.71 to 2.73. This restores compatibility with older versions of perl and cleans up the corelist data for various modules.

Opcode has been upgraded from version 1.23 to 1.24 to reflect the removal of the boolkeys opcode and the addition of the clonecv, introcv and padcv opcodes.

Socket has been upgraded from version 2.004 to 2.006. unpack_sockaddr_in() and unpack_sockaddr_in6() now return just the IP address in scalar context, and inet_ntop() now guards against incorrect length scalars being passed in.

Storable has been upgraded from version 2.38 to 2.39. This contains various bugfixes, including compatibility fixes for older versions of Perl and vstring handling.

Sys::Syslog has been upgraded from version 0.31 to 0.32. This includes several documentation and bug fixes.

threads::shared has been upgraded from version 1.40 to 1.41. This adds the option to warn about or ignore attempts to clone structures that can't be cloned, as opposed to just unconditionally dying in that case.

(W closure) During compilation, an inner named subroutine or eval is attempting to capture an outer lexical subroutine that is not currently available. This can happen for one of two reasons. First, the lexical subroutine may be declared in an outer anonymous subroutine that has not yet been created. (Remember that named subs are created at compile time, while anonymous subs are created at run-time.) For example,

sub { my sub a {...} sub f { \&a } }

At the time that f is created, it can't capture the current the "a" sub, since the anonymous subroutine hasn't been created yet. Conversely, the following won't give a warning since the anonymous subroutine has by now been created and is live:

sub { my sub a {...} eval 'sub f { \&a }' }->();

The second situation is caused by an eval accessing a variable that has gone out of scope, for example,

sub f {
my sub a {...}
sub { eval '\&a' }
}
f()->();

Here, when the '\&a' in the eval is being compiled, f() is not currently being executed, so its &a is not available for capture.

(W misc) A "my" or "state" subroutine has been redeclared in the current scope or statement, effectively eliminating all access to the previous instance. This is almost always a typographical error. Note that the earlier subroutine will still exist until the end of the scope or until all closure references to it are destroyed.

(S experimental) This warning is emitted if you enable an experimental feature via use feature. Simply suppress the warning if you want to use the feature, but know that in doing so you are taking the risk of using an experimental feature which may change or be removed in a future Perl version:

Support for VM/ESA has been removed. The port was tested on 2.3.0, which IBM ended service on in March 2002. 2.4.0 ended service in June 2003, and was superseded by Z/VM. The current version of Z/VM is V6.2.0, and scheduled for end of service on 2015/04/30.

PADLISTs are now longer AVs, but their own type instead. PADLISTs now contain a PAD and a PADNAMELIST of PADNAMEs, rather than AVs for the pad and the list of pad names. PADs, PADNAMELISTs, and PADNAMEs are to be accessed as such through the newly added pad API instead of the plain AV and SV APIs. See perlapi for details.

In the regex API, the numbered capture callbacks are passed an index indicating what match variable is being accessed. There are special index values for the $`, $&, $& variables. Previously the same three values were used to retrieve ${^PREMATCH}, ${^MATCH}, ${^POSTMATCH} too, but these have now been assigned three separate values. See "Numbered capture callbacks" in perlreapi.

PL_sawampersand was previously a boolean indicating that any of $`, $&, $& had been seen; it now contains three one-bit flags indicating the presence of each of the variables individually.

The error "Can't localize through a reference" had disappeared in 5.16.0 when local %$ref appeared on the last line of an lvalue subroutine. This error disappeared for \local %$ref in perl 5.8.1. It has now been restored.

The parsing of here-docs has been improved significantly, fixing several parsing bugs and crashes and one memory leak, and correcting wrong subsequent line numbers under certain conditions.

Inside an eval, the error message for an unterminated here-doc no longer has a newline in the middle of it [perl #70836].

A substitution inside a substitution pattern (s/${s|||}//) no longer confuses the parser.

It may be an odd place to allow comments, but s//"" # hello/e has always worked, unless there happens to be a null character before the first #. Now it works even in the presence of nulls.

An invalid range in tr/// or y/// no longer results in a memory leak.

String eval no longer treats a semicolon-delimited quote-like operator at the very end (eval 'q;;') as a syntax error.

warn {$_ => 1} + 1 is no longer a syntax error. The parser used to get confused with certain list operators followed by an anonymous hash and then an infix operator that shares its form with a unary operator.

(caller $n)[6] (which gives the text of the eval) used to return the actual parser buffer. Modifying it could result in crashes. Now it always returns a copy. The string returned no longer has "\n;" tacked on to the end. The returned text also includes here-doc bodies, which used to be omitted.

Reset the utf8 position cache when accessing magical variables to avoid the string buffer and the utf8 position cache getting out of sync [perl #114410].

Various cases of get magic being called twice for magical utf8 strings have been fixed.

This code (when not in the presence of $& etc)

$_ = 'x' x 1_000_000;
1 while /(.)/;

used to skip the buffer copy for performance reasons, but suffered from $1 etc changing if the original string changed. That's now been fixed.

Perl doesn't use PerlIO anymore to report out of memory messages, as PerlIO might attempt to allocate more memory.

In a regular expression, if something is quantified with {n,m} where n > m, it can't possibly match. Previously this was a fatal error, but now is merely a warning (and that something won't match). [perl #82954].

It used to be possible for formats defined in subroutines that have subsequently been undefined and redefined to close over variables in the wrong pad (the newly-defined enclosing sub), resulting in crashes or "Bizarre copy" errors.

Redefinition of XSUBs at run time could produce warnings with the wrong line number.

The %vd sprintf format does not support version objects for alpha versions. It used to output the format itself (%vd) when passed an alpha version, and also emit an "Invalid conversion in printf" warning. It no longer does, but produces the empty string in the output. It also no longer leaks memory in this case.

A bug fix in an earlier 5.17.x release caused no a a 3 (a syntax error) to result in a bad read or assertion failure, because an op was being freed twice.

$obj->SUPER::method calls in the main package could fail if the SUPER package had already been accessed by other means.

Stash aliasing (*foo:: = *bar::) no longer causes SUPER calls to ignore changes to methods or @ISA or use the wrong package.

Method calls on packages whose names end in ::SUPER are no longer treated as SUPER method calls, resulting in failure to find the method. Furthermore, defining subroutines in such packages no longer causes them to be found by SUPER method calls on the containing package [perl #114924].

The list above is almost certainly incomplete as it is automatically generated from version control history. In particular, it does not include the names of the (very much appreciated) contributors who reported issues to the Perl bug tracker.

Many of the changes included in this version originated in the CPAN modules included in Perl's core. We're grateful to the entire CPAN community for helping Perl to flourish.

For a more complete list of all of Perl's historical contributors, please see the AUTHORS file in the Perl source distribution.

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

If you believe you have an unreported bug, please run the perlbug program included with your release. Be sure to trim your bug down to a tiny but sufficient test case. Your bug report, along with the output of perl -V, will be sent off to perlbug@perl.org to be analysed by the Perl porting team.

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