summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSawyer X <xsawyerx@cpan.org>2020-05-30 16:21:17 +0300
committerSawyer X <xsawyerx@cpan.org>2020-05-30 17:37:16 +0300
commit7b0fb6930244012911e3ec5ad5b23257567141f8 (patch)
tree12ba12907e224e83b94cfa2062b4e9420f929ed9
parent9fc795646c0370ccbd09866d7cd48c9737e5cc22 (diff)
downloadperl-7b0fb6930244012911e3ec5ad5b23257567141f8.tar.gz
Merge all perldelta files
-rw-r--r--pod/perldelta.pod1760
1 files changed, 1602 insertions, 158 deletions
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index d3a16b448b..8a69dad0e0 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -2,56 +2,243 @@
=head1 NAME
-[ this is a template for a new perldelta file. Any text flagged as XXX needs
-to be processed before release. ]
-
-perldelta - what is new for perl v5.31.12
+perldelta - what is new for perl v5.32.0
=head1 DESCRIPTION
-This document describes differences between the 5.31.11 release and the 5.31.12
+This document describes differences between the 5.30.0 release and the 5.32.0
release.
-If you are upgrading from an earlier release such as 5.31.10, first read
-L<perl53111delta>, which describes differences between 5.31.10 and 5.31.11.
+If you are upgrading from an earlier release such as 5.28.0, first read
+L<perl5300delta>, which describes differences between 5.28.0 and 5.30.0.
-=head1 Notice
+=head1 Core Enhancements
-XXX Any important notices here
+=head2 Unicode 13.0 is supported
-=head1 Core Enhancements
+See L<https://www.unicode.org/versions/Unicode13.0.0/> for details.
-XXX New core language features go here. Summarize user-visible core language
-enhancements. Particularly prominent performance optimisations could go
-here, but most should go in the L</Performance Enhancements> section.
+=head2 It is now possible to write C<qr/\p{Name=...}/>, or
+C<qr!\p{na=/(SMILING|GRINNING) FACE/}!>
-[ List each enhancement as a =head2 entry ]
+The Unicode Name property is now accessible in regular expression
+patterns, as an alternative to C<\N{...}>.
+A comparison of the two methods is given in
+L<perlunicode/Comparison of \N{...} and \p{name=...}>.
-=head1 Security
+The second example above shows that wildcard subpatterns are also usable
+in this property. See L<perlunicode/Wildcards in Property Values>.
+
+=head2 Chained comparisons capability
+
+Some comparison operators, as their associativity, I<chain> with some
+operators of the same precedence (but never with operators of different
+precedence).
+
+ if ( $x < $y <= $z ) {...}
+
+behaves exactly like:
+
+ if ( $x < $y && $y <= $z ) {...}
+
+(assuming that C<"$y"> is as simple a scalar as it looks.)
+
+You can read more about this in L<perlop> under
+L<perlop/Operator Precedence and Associativity>.
+
+=head2 Unicode 13.0 (beta) is supported
+
+Using the beta causes us to participate in the soak cycle for
+Unicode. Final approval for the existing changes has been made by the
+Unicode consortium, and there are few possibilities that this could
+break existing programs, as there are few changes to already existing
+characters.
+
+Information about the changes is at
+L<https://unicode.org/versions/beta-13.0.0.html>.
+
+=head2 New Unicode properties C<Identifier_Status> and C<Identifier_Type> supported
+
+Unicode is in the process of revising its regular expression
+requirements: L<https://www.unicode.org/draft/reports/tr18/tr18.html>.
+As part of that they are wanting more properties to be exposed, ones
+that aren't part of the strict UCD (Unicode character database). These
+two are used for examining inputs for security purposes. Details on
+their usage is at L<https://www.unicode.org/reports/tr39/proposed.html>.
+
+=head2 It is now possible to write C<qr/\p{Name=...}/>, or C<\p{Na=...}>
+
+The Unicode Name property is now accessible in regular expression
+patterns using the above syntaxes, as an alternative to C<\N{...}>.
+A comparison of the two methods is given in
+L<perlunicode/Comparison of \N{...} and \p{name=...}>.
+
+=head2 The C<POSIX::mblen()>, C<mbtowc>, and C<wctomb> functions now
+work on shift state locales and are thread-safe on C99 and above
+compilers when executed on a platform that has locale thread-safety; the
+length parameters are now optional.
+
+These functions are always executed under the current C language locale.
+(See L<perllocale>.) Most locales are stateless, but a few, notably the
+very rarely encountered ISO 2022, maintain a state between calls to
+these functions. Previously the state was cleared on every call, but
+now the state is not reset unless the appropriate parameter is C<undef>.
+
+On threaded perls, the C99 functions L<mbrlen(3)>, L<mbrtowc(3)>, and
+L<wcrtomb(3)>, when available, are substituted for the plain functions.
+This makes these functions thread-safe when executing on a locale
+thread-safe platform.
+
+The string length parameters in C<mblen> and C<mbtowc> are now optional;
+useful only if you wish to restrict the length parsed in the source
+string to less than the actual length.
+
+=head2 The isa Operator
+
+A new experimental infix operator called C<isa> tests whether a given object
+is an instance of a given class or a class derived from it:
+
+ if( $obj isa Package::Name ) { ... }
+
+For more detail see L<perlop/Class Instance Operator>.
+
+=head2 Alpha assertions are no longer experimental
-XXX Any security-related notices go here. In particular, any security
-vulnerabilities closed should be noted here rather than in the
-L</Selected Bug Fixes> section.
+See L<perlre/(*pla:pattern)>, L<perlre/(*plb:pattern)>,
+L<perlre/(*nla:pattern)>>, and L<perlre/(*nlb:pattern)>.
+Use of these no longer generates a warning; existing code that disables
+the warning category C<experimental::script_run> will continue to work
+without any changes needed. Enabling the category has no effect.
-[ List each security issue as a =head2 entry ]
+=head2 Script runs are no longer experimental
+
+See L<perlre/Script Runs>. Use of these no longer generates a warning;
+existing code that disables the warning category
+C<experimental::alpha_assertions> will continue to work without any
+changes needed. Enabling the category has no effect.
+
+=head2 Feature checks are now faster
+
+Previously feature checks in the parser required a hash lookup when
+features we set outside of a feature bundle, this has been optimized
+to a bit mask check. [#17229]
+
+=head2 Perl is now developed on GitHub
+
+Perl is now developed on Github, you can find us at
+L<https://github.com/Perl/perl5>.
+
+Non-security bugs should now be reported via Github.
+
+=head2 Now can dump compiled patterns before optimization
+
+This is primarily useful for tracking down bugs in the regular
+expression compiler. This dump happens on C<-DDEBUGGING> perls, if you
+specify C<-Drv> on the command line; or on any perl if the pattern is
+compiled within the scope of S<C<use re qw(Debug DUMP_PRE_OPTIMIZE)>> or
+S<C<use re qw(Debug COMPILE EXTRA)>>. (All but the 2nd case display
+other information as well.)
+
+=head1 Security
+
+No security-related changes.
=head1 Incompatible Changes
-XXX For a release on a stable branch, this section aspires to be:
+=head2 Certain pattern matching features are now prohibited in compiling
+Unicode property value wildcard subpatterns
- There are no changes intentionally incompatible with 5.XXX.XXX
- If any exist, they are bugs, and we request that you submit a
- report. See L</Reporting Bugs> below.
+These few features are either inappropriate or interfere with the
+algorithm used to accomplish this task. The complete list is in
+L<perlunicode/Wildcards in Property Values>.
-[ List each incompatible change as a =head2 entry ]
+=head2 Stop pretending C<POSIX::mbstowcs> and C<POSIX::wcstombs> are
+supported
-=head1 Deprecations
+These functions could never have worked due to a defective interface
+specification. There is clearly no demand for them, given that no one
+has ever complained in the many years the functions were claimed to be
+available, hence so-called "support" for them is now dropped.
-XXX Any deprecated features, syntax, modules etc. should be listed here.
+=head2 A bug fix for C<(?[...])> may have caused some patterns to no
+longer compile
-=head2 Module removals
+See L</Selected Bug Fixes>. The heuristics previously used may have let
+some constructs compile (perhaps not with the programmer's intended
+effect) that should have been errors. None are known, but it is
+possible that some erroneous constructs no longer compile.
+
+=head2 C<\p{I<user-defined>}> properties now always override official
+Unicode ones
+
+Previously, if and only if a user-defined property was declared prior to
+the compilation of the regular expression pattern containing it, its
+definition was used instead of any official Unicode property with the
+same name. Now, it always overrides the official property. This
+change could break existing code that relied (likely unwittingly) on the
+previous behavior. Without this fix, if Unicode released a new version
+with a new property that happens to have the same name as the one you
+had long been using, your program would break when you upgraded to a
+perl that used that new Unicode version. See L<perlunicode/User-Defined
+Character Properties>. [L<GH #17205|https://github.com/Perl/perl5/issues/17205>]
+
+=head2 Modifiable variables are no longer permitted in constants
+
+Code like:
+
+ my $var;
+ $sub = sub () { $var };
+
+where C<$var> is referenced elsewhere in some sort of modifiable context now
+produces an exception when the sub is defined.
+
+This error can be avoided by adding a return to the sub definition:
+
+ $sub = sub () { return $var };
+
+This has been deprecated since Perl 5.22.
+
+L<[perl #131138]|https://rt.perl.org/Ticket/Display.html?id=131138>.
+
+=head2 Use of L<C<vec>|perlfunc/vec EXPR,OFFSET,BITS> on strings with code points above 0xFF is forbidden
+
+Such strings are represented internally in UTF-8, and C<vec> is a
+bit-oriented operation that will likely give unexpected results on those
+strings. This was deprecated in perl 5.28.0.
+
+=head2 Use of code points over 0xFF in string bitwise operators
+
+Some uses of these were already illegal after a previous deprecation
+cycle. The remaining uses are now prohibited, having been deprecated in perl
+5.28.0. See L<perldeprecation>.
-XXX Remove this section if not applicable.
+=head2 C<Sys::Hostname::hostname()> does not accept arguments
+
+This usage was deprecated in perl 5.28.0 and is now fatal.
+
+=head2 Plain "0" string now treated as a number for range operator
+
+Previously a range C<"0" .. "-1"> would produce a range of numeric
+strings from "0" through "99"; this now produces an empty list, just
+as C<0 .. -1> does. This also means that C<"0" .. "9"> now produces a
+list of integers, where previously it would produce a list of strings.
+
+This was due to a special case that treated strings starting with "0"
+as strings so ranges like C<"00" .. "03"> produced C<"00", "01", "02", "03">,
+but didn't specially handle the string C<"0">.
+
+L<[perl #133695]|https://rt.perl.org/Ticket/Display.html?id=133695>
+
+=head2 C<\K> now disallowed in look-ahead and look-behind assertions
+
+This was disallowed because it causes unexpected behaviour, and no-one
+could define what the desired behaviour was.
+
+L<[perl #124256]|https://rt.perl.org/Ticket/Display.html?id=124256>
+
+=head1 Deprecations
+
+=head2 Module removals
The following modules will be removed from the core distribution in a
future release, and will at that time need to be installed from CPAN.
@@ -69,110 +256,721 @@ not usually on concerns over their design.
=over
-=item XXX
+=item B::Debug
-XXX Note that deprecated modules should be listed here even if they are listed
-as an updated module in the L</Modules and Pragmata> section.
+C<B::Debug> is no longer shipped with Perl, you can still install it from CPAN.
=back
-[ List each other deprecation as a =head2 entry ]
-
=head1 Performance Enhancements
-XXX Changes which enhance performance without changing behaviour go here.
-There may well be none in a stable release.
+=over 4
-[ List each enhancement as an =item entry ]
+=item *
-=over 4
+C<my_strnlen> has been sped up for systems that don't have their own
+C<strnlen> implementation.
=item *
-XXX
+C<grok_bin_oct_hex> (and so, C<grok_bin>, C<grok_oct>, and C<grok_hex>)
+have been sped up.
+
+=item *
+
+C<grok_number_flags> has been sped up.
=back
=head1 Modules and Pragmata
-XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/>
-go here. If Module::CoreList is updated, generate an initial draft of the
-following sections using F<Porting/corelist-perldelta.pl>. A paragraph summary
-for important changes should then be added by hand. In an ideal world,
-dual-life modules would have a F<Changes> file that could be cribbed.
-
The list of new and updated modules is modified automatically as part of
preparing a Perl release, so the only reason to manually add entries here is if
you're summarising the important changes in the module update. (Also, if the
manually-added details don't match the automatically-generated ones, the
release manager will have to investigate the situation carefully.)
-[ Within each section, list entries as an =item entry ]
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Archive::Tar> has been upgraded from version 2.32 to 2.36.
+
+=item *
+
+L<autodie> has been upgraded from version 2.29 to 2.32.
+
+=item *
+
+L<B> has been upgraded from version 1.76 to 1.80.
+
+=item *
+
+L<B::Deparse> has been upgraded from version 1.49 to 1.54.
+
+=item *
+
+L<Benchmark> has been upgraded from version 1.22 to 1.23.
+
+=item *
+
+L<charnames> has been upgraded from version 1.45 to 1.48.
+
+=item *
+
+L<Class::Struct> has been upgraded from version 0.65 to 0.66.
+
+=item *
+
+L<Compress::Raw::Bzip2> has been upgraded from version 2.084 to 2.093.
+
+=item *
+
+L<Compress::Raw::Zlib> has been upgraded from version 2.084 to 2.093.
+
+=item *
+
+L<CPAN> has been upgraded from version 2.22 to 2.27.
+
+=item *
+
+L<DB_File> has been upgraded from version 1.843 to 1.853.
+
+=item *
+
+L<Devel::PPPort> has been upgraded from version 3.52 to 3.57.
+
+The test files generated on Win32 are now identical to when they are
+generated on POSIX-like systems.
+
+=item *
+
+L<diagnostics> has been upgraded from version 1.36 to 1.37.
+
+=item *
+
+L<Digest::MD5> has been upgraded from version 2.55 to 2.55_01.
+
+=item *
+
+L<Dumpvalue> has been upgraded from version 1.18 to 1.21.
+
+Previously, when dumping elements of an array and encountering an undefined
+value, the string printed would have been C<empty array>. This has been
+changed to what was apparently originally intended: C<empty slot>.
+
+=item *
+
+L<DynaLoader> has been upgraded from version 1.45 to 1.47.
+
+=item *
+
+L<Encode> has been upgraded from version 3.01 to 3.06.
+
+=item *
+
+L<encoding> has been upgraded from version 2.22 to 3.00.
+
+=item *
+
+L<English> has been upgraded from version 1.10 to 1.11.
+
+=item *
+
+L<Exporter> has been upgraded from version 5.73 to 5.74.
+
+=item *
+
+L<ExtUtils::CBuilder> has been upgraded from version 0.280231 to 0.280234.
+
+=item *
+
+L<ExtUtils::MakeMaker> has been upgraded from version 7.34 to 7.44.
+
+=item *
+
+L<feature> has been upgraded from version 1.54 to 1.58.
+
+A new C<indirect> feature has been added, which is enabled by default
+but allows turning off L<indirect object syntax|perlobj/Indirect
+Object Syntax>.
+
+=item *
+
+L<File::Find> has been upgraded from version 1.36 to 1.37.
+
+On Win32, the tests no longer require either a file in the drive root
+directory, or a writable root directory.
+
+=item *
+
+L<File::Glob> has been upgraded from version 1.32 to 1.33.
+
+=item *
+
+L<File::stat> has been upgraded from version 1.08 to 1.09.
+
+=item *
+
+L<Filter::Simple> has been upgraded from version 0.95 to 0.96.
+
+=item *
+
+L<Getopt::Long> has been upgraded from version 2.5 to 2.51.
+
+=item *
+
+L<Hash::Util> has been upgraded from version 0.22 to 0.23.
+
+The Synopsis has been updated as the example code stopped working with
+newer perls.
+
+[L<GH #17399|https://github.com/Perl/perl5/issues/17399>]
+
+=item *
+
+L<I18N::Langinfo> has been upgraded from version 0.18 to 0.19.
+
+=item *
+
+L<I18N::LangTags> has been upgraded from version 0.43 to 0.44.
+
+Document the C<IGNORE_WIN32_LOCALE> environment variable.
+
+=item *
+
+L<IO> has been upgraded from version 1.40 to 1.43.
+
+L<IO::Socket> no longer caches a zero protocol value, since this
+indicates that the implementation will select a protocol. This means
+that on platforms that don't implement C<SO_PROTOCOL> for a given
+socket type the protocol method may return C<undef>.
+
+The supplied I<TO> is now always honoured on calls to the send()
+method. L<[perl #133936]|https://rt.perl.org/Ticket/Display.html?id=133936>
+
+=item *
+
+IO-Compress has been upgraded from version 2.084 to 2.093.
+
+=item *
+
+L<IPC::Cmd> has been upgraded from version 1.02 to 1.04.
+
+=item *
+
+L<IPC::Open3> has been upgraded from version 1.20 to 1.21.
+
+=item *
+
+L<JSON::PP> has been upgraded from version 4.02 to 4.04.
+
+=item *
+
+L<Math::BigInt> has been upgraded from version 1.999816 to 1.999818.
+
+=item *
+
+L<Math::BigInt::FastCalc> has been upgraded from version 0.5008 to 0.5009.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20190522 to 5.20200620.
+
+=item *
+
+L<Module::Load::Conditional> has been upgraded from version 0.68 to 0.70.
+
+=item *
+
+L<Module::Metadata> has been upgraded from version 1.000036 to 1.000037.
+
+=item *
+
+L<mro> has been upgraded from version 1.22 to 1.23.
+
+=item *
+
+L<Net::Ping> has been upgraded from version 2.71 to 2.72.
-=head2 New Modules and Pragmata
+=item *
+
+L<Opcode> has been upgraded from version 1.43 to 1.47.
+
+=item *
+
+L<open> has been upgraded from version 1.11 to 1.12.
+
+=item *
+
+L<overload> has been upgraded from version 1.30 to 1.31.
+
+=item *
+
+L<parent> has been upgraded from version 0.237 to 0.238.
+
+=item *
+
+L<perlfaq> has been upgraded from version 5.20190126 to 5.20200523.
+
+=item *
+
+L<PerlIO> has been upgraded from version 1.10 to 1.11.
+
+=item *
+
+L<PerlIO::encoding> has been upgraded from version 0.27 to 0.28.
+
+=item *
+
+L<PerlIO::via> has been upgraded from version 0.17 to 0.18.
+
+=item *
+
+L<Pod::Html> has been upgraded from version 1.24 to 1.25.
+
+=item *
+
+L<Pod::Simple> has been upgraded from version 3.35 to 3.40.
+
+=item *
+
+L<podlators> has been upgraded from version 4.11 to 4.14.
+
+=item *
+
+L<POSIX> has been upgraded from version 1.88 to 1.94.
+
+=item *
+
+L<re> has been upgraded from version 0.37 to 0.40.
+
+=item *
+
+L<Safe> has been upgraded from version 2.40 to 2.41.
+
+=item *
+
+L<Scalar::Util> has been upgraded from version 1.50 to 1.53.
+
+=item *
+
+L<SelfLoader> has been upgraded from version 1.25 to 1.26.
+
+=item *
+
+L<Socket> has been upgraded from version 2.027 to 2.029.
+
+=item *
+
+L<Storable> has been upgraded from version 3.15 to 3.21.
+
+Use of C<note()> from L<Test::More> is now optional in tests. This works
+around a circular dependency with L<Test::More> when installing on very
+old perls from CPAN.
+
+Fix to disallow vstring magic strings over 2GB.
+
+Regular expressions objects weren't properly counted for object id
+purposes on retrieve. This would corrupt the resulting structure, or
+cause a runtime error in some cases. L<[perl #134179]|https://rt.perl.org/Ticket/Display.html?id=134179>
+
+=item *
+
+L<Sys::Hostname> has been upgraded from version 1.22 to 1.23.
+
+=item *
+
+L<Sys::Syslog> has been upgraded from version 0.35 to 0.36.
+
+=item *
+
+L<Term::ANSIColor> has been upgraded from version 4.06 to 5.01.
+
+=item *
+
+L<Test::Simple> has been upgraded from version 1.302162 to 1.302175.
+
+=item *
+
+L<Thread> has been upgraded from version 3.04 to 3.05.
+
+=item *
+
+L<Thread::Queue> has been upgraded from version 3.13 to 3.14.
+
+=item *
+
+L<threads> has been upgraded from version 2.22 to 2.25.
+
+=item *
+
+L<threads::shared> has been upgraded from version 1.60 to 1.61.
+
+=item *
+
+L<Tie::File> has been upgraded from version 1.02 to 1.06.
+
+=item *
+
+L<Tie::Hash::NamedCapture> has been upgraded from version 0.10 to 0.13.
+
+=item *
+
+L<Tie::Scalar> has been upgraded from version 1.04 to 1.05.
+
+=item *
+
+L<Tie::StdHandle> has been upgraded from version 4.5 to 4.6.
+
+=item *
+
+L<Time::HiRes> has been upgraded from version 1.9760 to 1.9764.
+
+Removed obsolete code such as support for pre-5.6 perl and classic
+MacOS. L<[perl #134288]|https://rt.perl.org/Ticket/Display.html?id=134288>
+
+=item *
+
+L<Time::Piece> has been upgraded from version 1.33 to 1.3401.
+
+=item *
+
+L<Unicode::Normalize> has been upgraded from version 1.26 to 1.27.
+
+=item *
+
+L<Unicode::UCD> has been upgraded from version 0.72 to 0.75.
+
+=item *
+
+L<VMS::Stdio> has been upgraded from version 2.44 to 2.45.
+
+=item *
+
+L<warnings> has been upgraded from version 1.44 to 1.47.
+
+=item *
+
+L<Win32> has been upgraded from version 0.52 to 0.53.
+
+=item *
+
+L<Win32API::File> has been upgraded from version 0.1203 to 0.1203_01.
+
+=item *
+
+L<XS::APItest> has been upgraded from version 1.00 to 1.09.
+
+=back
+
+=head2 Removed Modules and Pragmata
=over 4
=item *
-XXX Remove this section if not applicable.
+Pod::Parser has been removed from the core distribution.
+It still is available for download from CPAN. This resolves L<[perl
+#119439]|https://rt.perl.org/Ticket/Display.html?id=119439>.
=back
-=head2 Updated Modules and Pragmata
+=head1 Documentation
+
+=head2 Changes to Existing Documentation
+
+We have attempted to update the documentation to reflect the changes
+listed in this document. If you find any we have missed, open an issue
+at L<https://github.com/Perl/perl5/issues>.
+
+Additionally, the following selected changes have been made:
+
+=head3 L<perldebguts>
+
+=over 4
+
+=item Simplify a couple regnode definitions
+
+Update BOUND and NBOUND definitions.
+
+=item Add ANYOFHs regnode
+
+This node is like ANYOFHb, but is used when more than one leading byte
+is the same in all the matched code points.
+
+ANYOFHb is used to avoid having to convert from UTF-8 to code point for
+something that won't match. It checks that the first byte in the UTF-8
+encoded target is the desired one, thus ruling out most of the possible
+code points.
+
+=back
+
+=head3 L<perlapi>
=over 4
=item *
-L<XXX> has been upgraded from version A.xx to B.yy.
+C<sv_2pvbyte> updated to mention it will croak if the SV cannot be
+downgraded.
-If there was something important to note about this change, include that here.
+=item *
+
+C<sv_setpvn> updated to mention that the UTF-8 flag will not be changed by
+this function, and a terminating NUL byte is guaranteed.
+
+=item *
+
+Documentation for C<PL_phase> has been added.
+
+=item *
+
+The documentation for C<grok_bin>, C<grok_oct>, and C<grok_hex> has been
+updated and clarified.
=back
-=head2 Removed Modules and Pragmata
+=head3 L<perldiag>
+
+=over 4
+
+=item Add documentation for experimental 'isa' operator
+
+(S experimental::isa) This warning is emitted if you use the (C<isa>)
+operator. This operator is currently experimental and its behaviour may
+change in future releases of Perl.
+
+=back
+
+=head3 L<perlfunc>
+
+=over 4
+
+=item C<caller>
+
+Like L<C<__FILE__>|/__FILE__> and L<C<__LINE__>|/__LINE__>, the filename and
+line number returned here may be altered by the mechanism described at
+L<perlsyn/"Plain Old Comments (Not!)">.
+
+=item C<__FILE__>
+
+It can be altered by the mechanism described at
+L<perlsyn/"Plain Old Comments (Not!)">.
+
+=item C<__LINE__>
+
+It can be altered by the mechanism described at
+L<perlsyn/"Plain Old Comments (Not!)">.
+
+=item C<return>
+
+Mention that you cannot return from do BLOCK
+
+=item C<open>
+
+The C<open()> section had been renovated significantly.
+
+=back
+
+=head3 L<perlguts>
=over 4
=item *
-XXX
+Don't suggest using perl's C<malloc> anymore. Modern system C<malloc> is
+assumed to be much better than perl's implementation at this point.
+
+=item *
+
+Documentation about embed.fnc flags has been removed. F<embed.fnc> now has
+sufficient comments within it. Anyone changing that file will see those
+comments first, so entries here are now redundant.
+
+=item *
+
+Update documentation for UTF8f
+
+=item *
+
+Add missing '=for apidoc' lines
=back
-=head1 Documentation
+=head3 L<perlhacktips>
-XXX Changes to files in F<pod/> go here. Consider grouping entries by
-file and be sure to link to the appropriate page, e.g. L<perlfunc>.
+=over 4
-=head2 New Documentation
+=item *
-XXX Changes which create B<new> files in F<pod/> go here.
+Perl strings are NOT the same as C strings
-=head3 L<XXX>
+=back
-XXX Description of the purpose of the new file here
+=head3 L<perlintro>
-=head2 Changes to Existing Documentation
+=over 4
-We have attempted to update the documentation to reflect the changes
-listed in this document. If you find any we have missed, open an issue
-at L<https://github.com/Perl/perl5/issues>.
+=item *
+
+The docs for the repetition operator C<x> have been clarified
+
+[L<GH #17335|https://github.com/Perl/perl5/issues/17335>]
+
+=back
+
+=head3 L<perlipc>
+
+=over 4
+
+=item *
+
+The documentation surrounding C<open> and handle usage has been modernized
+to prefer 3-arg open and lexical variables instead of barewords.
+
+=item *
+
+Various updates and fixes including making all examples strict-safe and
+replacing C<-w> with C<use warnings>.
+
+=back
+
+=head3 L<perlop>
+
+=over 4
+
+=item 'isa' operator is experimental
+
+This is an experimental feature and is available from Perl 5.31.7 when enabled
+by C<use feature 'isa'>. It emits a warning in the C<experimental::isa>
+category.
-XXX Changes which significantly change existing files in F<pod/> go here.
-However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
-section.
+=back
+
+=head3 L<perlpod>
+
+=over 4
+
+=item *
+
+Details of the various stacks within the perl interpreter are now explained
+here.
+
+=item *
+
+Advice has been added regarding the usage of C<< ZE<lt>E<gt> >>.
+
+=back
+
+=head3 L<perlport>
+
+=over 4
+
+=item *
+
+Update C<timegm> example to use correct year format I<1970> instead of I<70>.
+
+[L<GH #16431|https://github.com/Perl/perl5/issues/16431>]
+
+=back
+
+=head3 L<perlreref>
+
+=over 4
+
+=item *
+
+Fix some typos.
+
+=back
+
+=head3 L<perlvar>
+
+=over 4
+
+=item *
+
+Recommend stringifying C<$]> and comparing it numerically.
+
+=item *
+
+Remove C<${^FEATURE_BITS}>.
+
+=back
+
+=head3 L<perlapi>, L<perlintern>
+
+=over 4
+
+=item *
+
+Documentation has been added for a dozen or two functions that were
+lacking it before.
+
+=back
+
+=head3 L<perlxs>
+
+=over 4
+
+=item *
+
+Suggest using libffi for simple library bindings.
+
+=back
+
+=head3 L<POSIX>
+
+=over 4
+
+=item *
+
+C<setlocale> warning about threaded builds updated to note it does not
+apply on Perl 5.28.X and later.
+
+=item *
+
+C<< Posix::SigSet->new(...) >> updated to state it throws an error if any of
+the supplied signals cannot be added to the set.
+
+=back
Additionally, the following selected changes have been made:
-=head3 L<XXX>
+=head3 Updating of links
=over 4
=item *
-XXX Description of the change here
+Links to the now defunct L<https://search.cpan.org> site now point at
+the equivalent L<https://metacpan.org> URL. [L<GH #17393|https://github.com/Perl/perl5/issues/17393>]
+
+=item *
+
+The man page for L<ExtUtils::XSSymSet> is now only installed on VMS,
+which is the only platform the module is installed on. [L<GH #17424|https://github.com/Perl/perl5/issues/17424>]
+
+=item *
+
+URLs have been changed to https:// and stale links have been updated.
+
+Where applicable, the URLs in the documentation have been moved from using the
+http:// protocol to https:// . This also affects the location of the bug
+tracker at L<https://rt.perl.org>.
+
+=item *
+
+Some links to OS/2 libraries, Address Sanitizer and other system tools had gone
+stale. These have been updated with working links.
+
+=item *
+
+Some links to old mails on perl5-porters had gone stale. These have been
+updated with working links.
=back
@@ -182,21 +980,26 @@ The following additions or changes have been made to diagnostic output,
including warnings and fatal error messages. For the complete list of
diagnostic messages, see L<perldiag>.
-XXX New or changed warnings emitted by the core's C<C> code go here. Also
-include any changes in L<perldiag> that reconcile it to the C<C> code.
-
=head2 New Diagnostics
-XXX Newly added diagnostic messages go under here, separated into New Errors
-and New Warnings
-
=head3 New Errors
=over 4
=item *
-XXX L<message|perldiag/"message">
+L<Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>
+|perldiag/"Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>">
+
+This is a replacement for several error messages listed under
+L</Changes to Existing Diagnostics>.
+
+=item *
+
+C<L<No digits found for %s literal|perldiag/"No digits found for %s literal">>
+
+(F) No hexadecimal digits were found following C<0x> or no binary digits were
+found following C<0b>.
=back
@@ -206,204 +1009,845 @@ XXX L<message|perldiag/"message">
=item *
-XXX L<message|perldiag/"message">
+L<Code point 0x%X is not Unicode, and not portable|perldiag/"Code point 0x%X is not Unicode, and not portable">
+
+This is actually not a new message, but it is now output when the
+warnings category C<portable> is enabled.
+
+When raised during regular expression pattern compilation, the warning
+has extra text added at the end marking where precisely in the pattern
+it occurred.
+
+=item *
+
+L<Non-hex character '%c' terminates \x early. Resolved as "%s"|perldiag/"Non-hex character '%c' terminates \x early. Resolved as "%s"">
+
+This replaces a warning that was much less specific, and which gave
+false information. This new warning parallels the similar
+already-existing one raised for C<\o{}>.
=back
=head2 Changes to Existing Diagnostics
-XXX Changes (i.e. rewording) of diagnostic messages go here
-
=over 4
=item *
-XXX Describe change here
+L<Character following "\c" must be printable ASCII|perldiag/"Character following "\c" must be printable ASCII">
+
+now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occured.
+
+=item *
+
+L<Use "%s" instead of "%s"|perldiag/"Use "%s" instead of "%s"">
+
+now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occured.
+
+=item *
+
+L<Sequence "\c{" invalid|perldiag/"Sequence "\c{" invalid">
+
+now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occured.
+
+=item *
+
+L<"\c%c" is more clearly written simply as "%s"|perldiag/""\c%c" is more clearly written simply as "%s"">
+
+now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occured.
+
+=item *
+
+L<Non-octal character '%c' terminates \o early. Resolved as "%s"|perldiag/"Non-octal character '%c' terminates \o early. Resolved as "%s"">
+
+now includes the phrase "terminates \o early", and has extra text added
+at the end, when raised during regular expression pattern compilation,
+marking where precisely in the pattern it occured. In some instances
+the text of the resolution has been clarified.
+
+=item *
+
+L<'%s' resolved to '\o{%s}%d'|perldiag/'%s' resolved to '\o{%s}%d'>
+
+As of Perl 5.32, this message is no longer generated. Instead,
+L<perldiag/Non-octal character '%c' terminates \o early. Resolved as "%s">
+is.
+
+=item *
+
+
+L<Use of code point 0x%s is not allowed; the permissible max is 0x%X|perldiag/"Use of code point 0x%s is not allowed; the permissible max is 0x%X">
+
+Some instances of this message previously output the hex digits C<A>,
+C<B>, C<C>, C<D>, C<E>, and C<F> in lower case. Now they are all
+consistently upper case.
+
+=item *
+
+The following three diagnostics have been removed, and replaced by
+L<C<Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>>
+|perldiag/"Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>">:
+C<Expecting close paren for nested extended charclass in regex; marked
+by <-- HERE in mE<sol>%sE<sol>>,
+C<Expecting close paren for wrapper for nested extended charclass in
+regex; marked by <-- HERE in mE<sol>%sE<sol>>,
+and
+C<Expecting '(?flags:(?[...' in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>>.
+
+=item *
+
+The C<Code point 0x%X is not Unicode, and not portable> warning removed
+the line C<Code points above 0xFFFF_FFFF require larger than a 32 bit word.>
+as code points that large are no longer legal on 32-bit platforms.
+
+=item *
+
+L<Can't use global %s in %s|perldiag/"Can't use global %s in %s">
+
+This error message has been slightly reformatted from the original C<Can't use
+global %s in "%s">, and in particular misleading error messages like C<Can't
+use global $_ in "my"> are now rendered as C<Can't use global $_ in subroutine
+signature>.
+
+=item *
+
+L<Constants from lexical variables potentially modified elsewhere are no longer permitted|perldiag/"Constants from lexical variables potentially modified elsewhere are no longer permitted">
+
+This error message replaces the former C<Constants from lexical variables
+potentially modified elsewhere are deprecated. This will not be allowed in Perl
+5.32> to reflect the fact that this previously deprecated usage has now been
+transformed into an exception. The message's classification has also been
+updated from D (deprecated) to F (fatal).
+
+See also L</Incompatible Changes>.
+
+=item *
+
+C<\N{} here is restricted to one character> is now emitted in the same
+circumstances where previously C<\N{} in inverted character class or as a range
+end-point is restricted to one character> was.
+
+This is due to new circumstances having been added in Perl 5.30 that weren't
+covered by the earlier wording.
=back
=head1 Utility Changes
-XXX Changes to installed programs such as F<perldoc> and F<xsubpp> go here.
-Most of these are built within the directory F<utils>.
+=head2 L<perlbug>
+
+=over 4
+
+=item Adjust bug tracker homepage URL to point to GitHub.
-[ List utility changes as a =head2 entry for each utility and =item
-entries for each change
-Use L<XXX> with program names to get proper documentation linking. ]
+=back
+
+=head1 Configuration and Compilation
-=head2 L<XXX>
+=head2 F<Configure>
=over 4
=item *
-XXX
+For clang++, add C<< #include <stdlib.h> >> to Configure's probes for
+C<futimes>, C<strtoll>, C<strtoul>, C<strtoull>, C<strtouq>, otherwise the
+probes would fail to compile.
-=back
+=item *
-=head1 Configuration and Compilation
+Use a compile and run test for C<lchown> to satisfy clang++ which should
+more reliably detect it.
-XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools
-go here. Any other changes to the Perl build process should be listed here.
-However, any platform-specific changes should be listed in the
-L</Platform Support> section, instead.
+=item *
-[ List changes as an =item entry ].
+For C++ compilers, add C<< #include <stdio.h> >> to Configure's probes for
+C<getpgrp> and C<setpgrp> as they use printf and C++ compilers may fail
+compilation instead of just warning.
-=over 4
+=item *
+
+Check if the compiler can handle inline attribute.
=item *
-XXX
+Check for character data alignment.
=back
-=head1 Testing
+=head2 L<streamzip>
-XXX Any significant changes to the testing of a freshly built perl should be
-listed here. Changes which create B<new> files in F<t/> go here as do any
-large changes to the testing harness (e.g. when parallel testing was added).
-Changes to existing files in F<t/> aren't worth summarizing, although the bugs
-that they represent may be covered elsewhere.
+=over 4
-XXX If there were no significant test changes, say this:
+=item *
-Tests were added and changed to reflect the other additions and changes
-in this release.
+This is a new utility, included as part of an
+L<IO::Compress::Base> upgrade.
-XXX If instead there were significant changes, say this:
+L<streamzip> creates a zip file from stdin. The program will read data
+from stdin, compress it into a zip container and, by default, write a
+streamed zip file to stdout.
+
+=item *
+
+F<Configure> now correctly handles gcc-10. Previously it was interpreting it
+as gcc-1 and turned on C<-fpcc-struct-return>.
+
+=item *
+
+Perl now no longer probes for C<d_u32align>, defaulting to C<define> on all
+platforms. This check was error prone when it was done, which was on 32-bit
+platforms only.
+L<[perl #133495]|https://rt.perl.org/Ticket/Display.html?id=133495>.
+
+=item *
+
+Documentation and hints for building perl on Z/OS (native EBCDIC) have been
+updated. Still work in progress.
+
+=item *
+
+A new probe for C<malloc_usable_size> has been added.
+
+=item *
+
+Improvements in F<Configure> to detection in C++ and clang++. Work ongoing by
+Andy Dougherty. [perl #134171]
+
+=item *
+
+F<autodoc.pl>
+
+This tool that regenerates L<perlintern> and L<perlapi> has been overhauled
+significantly, restoring consistency in flags used in F<embed.fnc> and
+L<Devel::PPPort> and allowing removal of many redundant C<=for apidoc>
+entries in code.
+
+=item *
+
+The C<ECHO> macro is now defined. This is used in a C<dtrace> rule that was
+originally changed for FreeBSD, and the FreeBSD make apparently predefines it.
+The Solaris make does not predefine C<ECHO> which broke this rule on Solaris.
+L<[perl #134218]|https://rt.perl.org/Ticket/Display.html?id=134218>
+
+=item *
+
+Bison versions 3.1 through 3.4 are now supported.
+
+=back
+
+=head1 Testing
Tests were added and changed to reflect the other additions and
changes in this release. Furthermore, these significant changes were
made:
-[ List each test improvement as an =item entry ]
-
=over 4
=item *
-XXX
+F<t/run/switches.t> no longer uses (and re-uses) the F<tmpinplace/>
+directory under F<t/>. This may prevent spurious failures. [L<GH #17424|https://github.com/Perl/perl5/issues/17424>]
+
+=item *
+
+Various bugs in C<POSIX::mbtowc> were fixed. Potential races with
+other threads are now avoided, and previously the returned wide
+character could well be garbage.
+
+=item *
+
+Various bugs in C<POSIX::wctomb> were fixed. Potential races with other
+threads are now avoided, and previously it would segfault if the string
+parameter was shared or hadn't been pre-allocated with a string of
+sufficient length to hold the result.
+
+=item *
+
+Certain test output of scalars containing control characters and Unicode
+has been fixed on EBCDIC.
+
+=item *
+
+F<t/charset_tools.pl>: Avoid some work on ASCII platforms.
+
+=item *
+
+F<t/re/regexp.t>: Speed up many regex tests on ASCII platform
+
+=item *
+
+F<t/re/pat.t>: Skip tests that don't work on EBCDIC.
=back
=head1 Platform Support
-XXX Any changes to platform support should be listed in the sections below.
+=head2 Discontinued Platforms
+
+=over 4
-[ Within the sections, list each platform as an =item entry with specific
-changes as paragraphs below it. ]
+=item Windows CE
-=head2 New Platforms
+Support for building perl on Windows CE has now been removed.
-XXX List any platforms that this version of perl compiles on, that previous
-versions did not. These will either be enabled by new files in the F<hints/>
-directories, or new subdirectories and F<README> files at the top level of the
-source tree.
+=back
+
+=head2 Platform-Specific Notes
=over 4
-=item XXX-some-platform
+=item Linux
-XXX
+C<cc> will be used to populate C<plibpth> if C<cc> is C<clang>.
+L<[perl #134189]|https://rt.perl.org/Ticket/Display.html?id=134189>
-=back
+=item NetBSD 8.0
-=head2 Discontinued Platforms
+Fix compilation of Perl on NetBSD 8.0 with g++.
+
+[L<GH #17381|https://github.com/Perl/perl5/issues/17381>]
-XXX List any platforms that this version of perl no longer compiles on.
+=item Windows
=over 4
-=item XXX-some-platform
+=item *
+
+The configuration for C<ccflags> and C<optimize> are now separate, as
+with POSIX platforms. [#17156]
+
+=item *
+
+Support for building perl with Visual C++ 6.0 has now been removed.
+
+=item *
+
+The locale tests could crash on Win32 due to a Windows bug, and
+separately due to the CRT throwing an exception if the locale name
+wasn't validly encoded in the current code page.
+
+For the second we now decode the locale name ourselves, and always
+decode it as UTF-8. [perl #133981]
+
+=item *
-XXX
+F<t/op/magic.t> could fail if environment variables starting with
+C<FOO> already existed.
=back
-=head2 Platform-Specific Notes
+=item Solaris
-XXX List any changes for specific platforms. This could include configuration
-and compilation changes or changes in portability/compatibility. However,
-changes within modules for platforms should generally be listed in the
-L</Modules and Pragmata> section.
+=over 4
+
+=item *
+
+C<Configure> will now find recent versions of the Oracle Developer Studio
+compiler, which are found under C</opt/developerstudio*>.
+
+=item *
+
+C<Configure> now uses the detected types for C<gethostby*> functions, allowing
+Perl to once again compile on certain configurations of Solaris.
+
+=back
+
+=item VMS
=over 4
-=item XXX-some-platform
+=item *
-XXX
+With the release of the patch kit C99 V2.0, VSI has provided support for a
+number of previously-missing C99 features. On systems with that patch kit
+installed, Perl's configuration process will now detect the presence of the
+header C<stdint.h> and the following functions: C<fpclassify>, C<isblank>, C<isless>,
+C<llrint>, C<llrintl>, C<llround>, C<llroundl>, C<nearbyint>, C<round>, C<scalbn>,
+and C<scalbnl>.
+
+=item *
+
+C<-Duse64bitint> is now the default on VMS.
+
+=back
=back
=head1 Internal Changes
-XXX Changes which affect the interface available to C<XS> code go here. Other
-significant internal changes for future core maintainers should be noted as
-well.
+=over 4
+
+=item *
-[ List each change as an =item entry ]
+C<savepvn>'s len parameter is now a C<Size_t> instead of an C<I32> since we
+can handle longer strings than 31 bits.
-=over 4
+=item *
+
+The lexer (C<Perl_yylex()> in F<toke.c>) was previously a single 4100-line
+function, relying heavily on C<goto> and a lot of widely-scoped local variables
+to do its work. It has now been pulled apart into a few dozen smaller static
+functions; the largest remaining chunk (C<yyl_word_or_keyword()>) is a little
+over 900 lines, and consists of a single C<switch> statement, all of whose
+C<case> groups are independent. This should be much easier to understand and
+maintain.
+
+=item *
+
+The OS-level signal handlers and type (Sighandler_t) used by the perl core
+were declared as having three parameters, but the OS was always told to
+call them with one argument. This has been fixed by declaring them to have
+one parameter. See the merge commit C<v5.31.5-346-g116e19abbf> for full
+details.
+
+=item *
+
+The code that handles C<tr///> has been extensively revised, fixing
+various bugs, especially when the source and/or replacement strings
+contain characters whose code points are above 255. Some of the bugs
+were undocumented, one being that under some circumstances (but not all)
+with C</s>, the squeezing was done based on the source, rather than the
+replacement. A documented bug that got fixed was [perl RT #125493].
+
+=item *
+
+A new macro for XS writers dealing with UTF-8-encoded Unicode strings
+has been created L<perlapi/C<UTF8_CHK_SKIP>> that is safer in the face
+of malformed UTF-8 input than L<perlapi/C<UTF8_SKIP>> (but not as safe
+as L<perlapi/C<UTF8_SAFE_SKIP>>). It won't read past a NUL character.
+It has been backported in L<Devel::PPPort> 3.55 and later.
+
+=item *
+
+Added the C<<PL_curstackinfo->si_cxsubix>> field. This records the stack index
+of the most recently pushed sub/format/eval context. It is set and restored
+automatically by C<cx_pushsub()>, C<cx_popsub()> etc., but would need to be
+manually managed if you do any unusual manipulation of the context stack.
+
+=item *
+
+Various macros dealing with character type classification and changing case
+where the input is encoded in UTF-8 now require an extra parameter to prevent
+potential reads beyond the end of the buffer. Use of these has generated a
+deprecation warning since Perl 5.26. Details are in
+L<perldeprecation/In XS code, use of various macros dealing with UTF-8.>
+
+=item *
+
+A new parser function L<parse_subsignature()|perlapi/parse_subsignature>
+allows a keyword plugin to parse a subroutine signature while C<use feature
+'signatures'> is in effect. This allows custom keywords to implement
+semantics similar to regular C<sub> declarations that include signatures.
+L<[perl #132474]|https://rt.perl.org/Ticket/Display.html?id=132474>
+
+=item *
+
+Since on some platforms we need to hold a mutex when temporarily
+switching locales, new macros (C<STORE_LC_NUMERIC_SET_TO_NEEDED_IN>,
+C<WITH_LC_NUMERIC_SET_TO_NEEDED> and C<WITH_LC_NUMERIC_SET_TO_NEEDED_IN>)
+have been added to make it easier to do this safely and efficiently
+as part of L<[perl #134172]|https://rt.perl.org/Ticket/Display.html?id=134172>.
+
+=item *
+
+The memory bookkeeping overhead for allocating an OP structure has been
+reduced by 8 bytes per OP on 64-bit systems.
+
+=item *
+
+L<eval_pv()|perlapi/eval_pv> no longer stringifies the exception when
+C<croak_on_error> is true. L<[perl #134175]|https://rt.perl.org/Ticket/Display.html?id=134175>
+
+=item *
+
+The PERL_DESTRUCT_LEVEL environment variable was formerly only honoured on perl
+binaries built with DEBUGGING support. It is now checked on all perl builds.
+Its normal use is to force perl to individually free every block of memory
+which it has allocated before exiting, which is useful when using automated
+leak detection tools such as valgrind.
=item *
-XXX
+The API eval_sv() now accepts a C<G_RETHROW> flag. If this flag is set and an
+exception is thrown while compiling or executing the supplied code, it will be
+rethrown, and eval_sv() will not return.
+L<[perl #134177]|https://rt.perl.org/Ticket/Display.html?id=134177>
+
+=item *
+
+As part of the fix for
+L<[perl #2754]|https://rt.perl.org/Ticket/Display.html?id=2754> perl_parse()
+now returns non-zero if exit(0) is called in a C<BEGIN>, C<UNITCHECK> or
+C<CHECK> block.
+
+=item *
+
+Most functions which recursively walked an op tree during compilation have been
+made non-recursive. This avoids SEGVs from stack overflow when the op tree is
+deeply nested, such as C<$n == 1 ? "one" : $n == 2 ? "two" : ....> (especially
+in code which is auto-generated).
+
+This is particularly noticeable where the code is compiled within a separate
+thread, as threads tend to have small stacks by default.
=back
=head1 Selected Bug Fixes
-XXX Important bug fixes in the core language are summarized here. Bug fixes in
-files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
+=over 4
-[ List each fix as an =item entry ]
+=item *
-=over 4
+Previously L<perlfunc/require> would only treat the special built-in
+SV C<&PL_sv_undef> as a value in C<%INC> as if a previous C<require>
+has failed, treating other undefined SVs as if the previous C<require>
+has succeeded. This could cause unexpected success from C<require>
+e.g., on C<local %INC = %INC;>. This has been fixed [L<GH #17428|https://github.com/Perl/perl5/issues/17428>]
=item *
-XXX
+C<(?{...})> eval groups in regular expressions no longer unintentionally
+trigger "EVAL without pos change exceeded limit in regex" [L<GH #17490|https://github.com/Perl/perl5/issues/17490>].
-=back
+=item *
-=head1 Known Problems
+C<(?[...])> extended bracketed character classes do not wrongly raise an
+error on some cases where a previously-compiled such class is
+interpolated into another. The heuristics previously used have been
+replaced by a reliable method, and hence the diagnostics generated have
+changed. See L</Diagnostics>.
-XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any
-tests that had to be C<TODO>ed for the release would be noted here. Unfixed
-platform specific bugs also go here.
+=item *
+The debug display (say by specifying C<-Dr> or S<C<use re>> (with
+appropriate options) of compiled Unicode property wildcard subpatterns no
+longer has extraneous output.
-[ List each fix as an =item entry ]
+=item *
-=over 4
+A heap-buffer-overflow has been fixed in the regular expression engine.
+
+[L<GH #17384|https://github.com/Perl/perl5/issues/17384>]
+
+=item *
+
+Fix an assertion failure in the regular expression engine.
+
+[L<GH #17372|https://github.com/Perl/perl5/issues/17372>]
=item *
-XXX
+Fix regression in C<tr///> added somewhere in v5.31.6.
+
+[L<GH #17391|https://github.com/Perl/perl5/issues/17391>]
+
+=item *
+
+Fix coredump in pp_hot.c after C<B::UNOP_AUX::aux_list()>.
+
+[L<GH #17301|https://github.com/Perl/perl5/issues/17301>]
+
+=item *
+
+Commit bc62bf8519 ("Add some defensive coding to av_store()" has been
+reverted as it broke I<List-UtilsBy-XS-0.05> in v5.31.2.
+
+[L<GH #17265|https://github.com/Perl/perl5/issues/17265>]
+
+=item *
+
+Loading IO is now threadsafe.
+
+[L<GH #14816|https://github.com/Perl/perl5/issues/14816>]
+
+=item *
+
+Fix MYMALLOC (PERL_MALLOC) build on Windows
+
+=item *
+
+C<\p{user-defined}> overrides official Unicode [L<GH #17025|https://github.com/Perl/perl5/issues/17025>]
+
+Prior to this patch, they only sometimes overrode.
+
+=item *
+
+Properly handle filled C</il> regnodes and multi-char folds
+
+=item *
+
+Compilation error during make minitest [L<GH #17293|https://github.com/Perl/perl5/issues/17293>]
+
+=item *
+
+Move the implementation of C<%->, C<%+> into core.
+
+=item *
+
+Read beyond buffer in C<grok_inf_nan> [L<GH #17370|https://github.com/Perl/perl5/issues/17370>]
+
+=item *
+
+Workaround glibc bug with C<LC_MESSAGES> [L<GH #17081|https://github.com/Perl/perl5/issues/17081>]
+
+=item *
+
+C<printf()> or C<sprintf()> with the C<%n> format could cause a panic on
+debugging builds, or report an incorrectly cached length value when
+producing C<SVfUTF8> flagged strings. [#17221]
+
+=item *
+
+The tokenizer has been extensively refactored. [#17241][#17189]
+
+=item *
+
+C<use strict "subs"> is now enforced for bareword constants optimized
+into a C<multiconcat> operator. [#17254]
+
+=item *
+
+A memory leak in regular expression patterns has been fixed [#17218].
+
+=item *
+
+Perl no longer treats strings starting with "0x" or "0b" as hex or
+binary numbers respectively when converting a string to a number.
+This reverts a change in behaviour inadvertently introduced in perl
+5.30.0 intended to improve precision when converting a string to a
+floating point number. [perl #134230]
+
+=item *
+
+Matching a non-C<SVf_UTF8> string against a regular expression
+containing unicode literals could leak a SV on each match attempt.
+[perl #134390]
+
+=item *
+
+Overloads for octal and binary floating point literals were always
+passed a string with a C<0x> prefix instead of the appropriate C<0> or
+C<0b> prefix. [perl #125557]
+
+=item *
+
+C<< $@ = 100; die; >> now correctly propagates the 100 as an exception
+instead of ignoring it. L<[perl #134291]|https://rt.perl.org/Ticket/Display.html?id=134291>
+
+=item *
+
+C<< 0 0x@ >> no longer asserts in S_no_op(). L<[perl #134310]|https://rt.perl.org/Ticket/Display.html?id=134310>
+
+=item *
+
+Exceptions thrown while C<$@> is read-only could result in infinite
+recursion as perl tried to update C<$@>, which throws another
+exception, resulting in a stack overflow. Perl now replaces C<$@>
+with a copy if it's not a simple writable SV. L<[perl #134266]|https://rt.perl.org/Ticket/Display.html?id=134266>
+
+=item *
+
+Setting C<$)> now properly sets supplementary group ids if you have
+the necessary privileges. L<[perl #134169]|https://rt.perl.org/Ticket/Display.html?id=134169>
+
+=item *
+
+close() on a pipe now preemptively clears the PerlIO object from the
+IO SV. This prevents a second attempt to close the already closed
+PerlIO object if a signal handler calls die() or exit() while close()
+is waiting for the child process to complete. L<[perl #122112]|https://rt.perl.org/Ticket/Display.html?id=122112>
+
+=item *
+
+C<< sprintf("%.*a", -10000, $x) >> would cause a buffer overflow due
+to mishandling of the negative precision value. L<[perl #134008]|https://rt.perl.org/Ticket/Display.html?id=134008>
+
+=item *
+
+scalar() on a reference could cause an erroneous assertion failure
+during compilation. L<[perl #134045]|https://rt.perl.org/Ticket/Display.html?id=134045>
+
+=item *
+
+C<%{^CAPTURE_ALL}> is now an alias to C<%-> as documented, rather than
+incorrectly an alias for C<%+>. L<[perl #131867]|https://rt.perl.org/Ticket/Display.html?id=131867>
+
+=item *
+
+C<%{^CAPTURE}> didn't work if C<@{^CAPTURE}> was mentioned first.
+Similarly for C<%{^CAPTURE_ALL}> and C<@{^CAPTURE_ALL}>, though
+C<@{^CAPTURE_ALL}> currently isn't used. L<[perl #131193]|https://rt.perl.org/Ticket/Display.html?id=131193>
+
+=item *
+
+Extraordinarily large (over 2GB) floating point format widths could
+cause an integer overflow in the underlying call to snprintf(),
+resulting in an assertion. Formatted floating point widths are now
+limited to the range of int, the return value of snprintf(). L<[perl
+#133913]|https://rt.perl.org/Ticket/Display.html?id=133913>
+
+=item *
+
+Parsing the following constructs within a sub-parse (such as with
+C<"${code here}"> or C<s/.../code here/e>) has changed to match how
+they're parsed normally:
+
+=over
+
+=item *
+
+C<print $fh ...> no longer produces a syntax error.
+
+=item *
+
+Code like C<s/.../ ${time} /e> now properly produces an "Ambiguous use
+of ${time} resolved to $time at ..." warning when warnings are enabled.
+
+=item *
+
+C<@x {"a"}> (with the space) in a sub-parse now properly produces a
+"better written as" warning when warnings are enabled.
+
+=item *
+
+attributes can now be used in a sub-parse.
=back
-=head1 Errata From Previous Releases
+L<[perl #133850]|https://rt.perl.org/Ticket/Display.html?id=133850>
-=over 4
+=item *
+
+Incomplete hex and binary literals like C<0x> and C<0b> are now
+treated as if the C<x> or C<b> is part of the next token. L<[perl
+#134125]|https://rt.perl.org/Ticket/Display.html?id=134125>
=item *
-XXX Add anything here that we forgot to add, or were mistaken about, in
-the perldelta of a previous release.
+A spurious C<)> in a subparse, such as in C<s/.../code here/e> or
+C<"...${code here}">, no longer confuses the parser.
+
+Previously a subparse was bracketed with generated C<(> and C<)>
+tokens, so a spurious C<)> would close the construct without doing the
+normal subparse clean up, confusing the parser and possible causing an
+assertion failure.
+
+Such constructs are now surrounded by artificial tokens that can't be
+included in the source. L<[perl #130585]|https://rt.perl.org/Ticket/Display.html?id=130585>
+
+=item *
+
+Reference assignment of a sub, such as C<\&foo = \&bar;>, silently did
+nothing in the C<main::> package. L<[perl #134072]|https://rt.perl.org/Ticket/Display.html?id=134072>
+
+=item *
+
+sv_gets() now recovers better if the target SV is modified by a signal
+handler. L<[perl #134035]|https://rt.perl.org/Ticket/Display.html?id=134035>
+
+=item *
+
+C<readline @foo> now evaluates C<@foo> in scalar context. Previously
+it would be evaluated in list context, and since readline() pops only
+one argument from the stack, the stack could underflow, or be left
+with unexpected values on the stack. L<[perl #133989]|https://rt.perl.org/Ticket/Display.html?id=133989>
+
+=item *
+
+Parsing incomplete hex or binary literals was changed in 5.31.1 to treat such a
+literal as just the 0, leaving the following C<x> or C<b> to be parsed as part
+of the next token. This could lead to some silent changes in behaviour, so now
+incomplete hex or binary literals produce a fatal error.
+L<[perl #134125]|https://rt.perl.org/Ticket/Display.html?id=134125>
+
+=item *
+
+eval_pv()'s I<croak_on_error> flag will now throw even if the exception is a
+false overloaded value.
+L<[perl #134177]|https://rt.perl.org/Ticket/Display.html?id=134177>
+
+=item *
+
+C<INIT> blocks and the program itself are no longer run if exit(0) is called
+within a C<BEGIN>, C<UNITCHECK> or C<CHECK> block.
+L<[perl #2754]|https://rt.perl.org/Ticket/Display.html?id=2754>
+
+=item *
+
+C<<< open my $fh, ">>+", undef >>> now opens the temporary file in append mode
+- writes will seek to the end of file before writing.
+L<[perl #134221]|https://rt.perl.org/Ticket/Display.html?id=134221>
+
+=item *
+
+Fixed a SEGV when searching for the source of an uninitialized value warning on
+an op whose subtree includes an OP_MULTIDEREF.
+L<[perl #134275]|https://rt.perl.org/Ticket/Display.html?id=134275>
=back
=head1 Obituary
-XXX If any significant core contributor or member of the CPAN community has
-died, add a short obituary here.
+Jeff Goff (JGOFF or DrForr), an integral part of the Perl and Raku
+communities and a dear friend to all of us, has passed away on March
+13th, 2020. DrForr was a prominent member of the communities, attending
+and speaking at countless events, contributing to numerous projects,
+and assisting and helping in any way he could.
-=head1 Acknowledgements
+His passing leaves a hole in our hearts and in our communities and he
+will be sorely missed.
-XXX Generate this with:
+=head1 Acknowledgements
- perl Porting/acknowledgements.pl v5.31.11..HEAD
+Perl 5.32.0 represents approximately 12 months of development since Perl
+5.30.0 and contains approximately 220,000 lines of changes across 1,800
+files from 86 authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 140,000 lines of changes to 860 .pm, .t, .c and .h files.
+
+Perl continues to flourish into its fourth decade thanks to a vibrant
+community of users and developers. The following people are known to have
+contributed the improvements that became Perl 5.32.0:
+
+Aaron Crane, Alberto Simões, Alexandr Savca, Andreas König, Andrew Fresh,
+Andy Dougherty, Ask Bjørn Hansen, Atsushi Sugawara, Bernhard M. Wiedemann,
+brian d foy, Bryan Stenson, Chad Granum, Chase Whitener, Chris 'BinGOs'
+Williams, Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan Book, Daniel
+Dragan, Dan Kogai, Dave Cross, Dave Rolsky, David Cantrell, David Mitchell,
+Dominic Hargreaves, E. Choroba, Felipe Gasper, Florian Weimer, Graham Knop,
+Håkon Hægland, Hauke D, H.Merijn Brand, Hugo van der Sanden, Ichinose
+Shogo, James E Keenan, Jason McIntosh, Jerome Duval, Johan Vromans, John
+Lightsey, Kang-min Liu, Karen Etheridge, Karl Williamson, Leon Timmermans,
+Manuel Mausz, Marc Green, Matthew Horsfall, Matt Turner, Max Maischein,
+Michael Haardt, Nicholas Clark, Nicolas R., Niko Tyni, Pali, Paul Evans,
+Paul Johnson, Paul Marquess, Peter Eisentraut, Peter John Acklam, Peter
+Oliver, Petr Písař, Renee Baecker, Ricardo Signes, Richard Leach, Russ
+Allbery, Samuel Smith, Santtu Ojanperä, Sawyer X, Sergey Aleynikov, Sergiy
+Borodych, Shlomi Fish, Sisyphus, Slaven Rezic, Smylers, Stefan Seifert,
+Steve Hay, Steve Peters, Svyatoslav, Todd Rinaldo, Tomasz Konojacki, Tom
+Hukins, Tony Cook, Unicode Consortium, VanL, Vickenty Fesunov, Vitali Peil,
+Yves Orton, Zefram.
+
+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 F<AUTHORS> file in the Perl source distribution.
=head1 Reporting Bugs