diff options
Diffstat (limited to 'upstream/fedora-40/man1/perl5320delta.1')
-rw-r--r-- | upstream/fedora-40/man1/perl5320delta.1 | 1401 |
1 files changed, 1401 insertions, 0 deletions
diff --git a/upstream/fedora-40/man1/perl5320delta.1 b/upstream/fedora-40/man1/perl5320delta.1 new file mode 100644 index 00000000..0b2db50a --- /dev/null +++ b/upstream/fedora-40/man1/perl5320delta.1 @@ -0,0 +1,1401 @@ +.\" -*- mode: troff; coding: utf-8 -*- +.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. +.ie n \{\ +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" ======================================================================== +.\" +.IX Title "PERL5320DELTA 1" +.TH PERL5320DELTA 1 2024-01-25 "perl v5.38.2" "Perl Programmers Reference Guide" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH NAME +perl5320delta \- what is new for perl v5.32.0 +.SH DESCRIPTION +.IX Header "DESCRIPTION" +This document describes differences between the 5.30.0 release and the 5.32.0 +release. +.PP +If you are upgrading from an earlier release such as 5.28.0, first read +perl5300delta, which describes differences between 5.28.0 and 5.30.0. +.SH "Core Enhancements" +.IX Header "Core Enhancements" +.SS "The isa Operator" +.IX Subsection "The isa Operator" +A new experimental infix operator called \f(CW\*(C`isa\*(C'\fR tests whether a given object +is an instance of a given class or a class derived from it: +.PP +.Vb 1 +\& if( $obj isa Package::Name ) { ... } +.Ve +.PP +For more detail see "Class Instance Operator" in perlop. +.SS "Unicode 13.0 is supported" +.IX Subsection "Unicode 13.0 is supported" +See <https://www.unicode.org/versions/Unicode13.0.0/> for details. +.SS "Chained comparisons capability" +.IX Subsection "Chained comparisons capability" +Some comparison operators, as their associativity, \fIchain\fR with some +operators of the same precedence (but never with operators of different +precedence). +.PP +.Vb 1 +\& if ( $x < $y <= $z ) {...} +.Ve +.PP +behaves exactly like: +.PP +.Vb 1 +\& if ( $x < $y && $y <= $z ) {...} +.Ve +.PP +(assuming that \f(CW"$y"\fR is as simple a scalar as it looks.) +.PP +You can read more about this in perlop under +"Operator Precedence and Associativity" in perlop. +.ie n .SS "New Unicode properties ""Identifier_Status"" and ""Identifier_Type"" supported" +.el .SS "New Unicode properties \f(CWIdentifier_Status\fP and \f(CWIdentifier_Type\fP supported" +.IX Subsection "New Unicode properties Identifier_Status and Identifier_Type supported" +Unicode has revised its regular expression requirements: +<https://www.unicode.org/reports/tr18/tr18\-21.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 <https://www.unicode.org/reports/tr39/>. +.ie n .SS "It is now possible to write ""qr/\ep{Name=...}/"", or ""qr!\ep{na=/(SMILING|GRINNING) FACE/}!""" +.el .SS "It is now possible to write \f(CWqr/\ep{Name=...}/\fP, or \f(CWqr!\ep{na=/(SMILING|GRINNING) FACE/}!\fP" +.IX Subsection "It is now possible to write qr/p{Name=...}/, or qr!p{na=/(SMILING|GRINNING) FACE/}!" +The Unicode Name property is now accessible in regular expression +patterns, as an alternative to \f(CW\*(C`\eN{...}\*(C'\fR. +A comparison of the two methods is given in +"Comparison of \eN{...} and \ep{name=...}" in perlunicode. +.PP +The second example above shows that wildcard subpatterns are also usable +in this property. See "Wildcards in Property Values" in perlunicode. +.ie n .SS "Improvement of POSIX::mblen(), ""mbtowc"", and ""wctomb""" +.el .SS "Improvement of \f(CWPOSIX::mblen()\fP, \f(CWmbtowc\fP, and \f(CWwctomb\fP" +.IX Subsection "Improvement of POSIX::mblen(), mbtowc, and wctomb" +The \f(CWPOSIX::mblen()\fR, \f(CW\*(C`mbtowc\*(C'\fR, and \f(CW\*(C`wctomb\*(C'\fR 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. +.PP +These functions are always executed under the current C language locale. +(See 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 \f(CW\*(C`undef\*(C'\fR. +.PP +On threaded perls, the C99 functions \fBmbrlen\fR\|(3), \fBmbrtowc\fR\|(3), and +\&\fBwcrtomb\fR\|(3), when available, are substituted for the plain functions. +This makes these functions thread-safe when executing on a locale +thread-safe platform. +.PP +The string length parameters in \f(CW\*(C`mblen\*(C'\fR and \f(CW\*(C`mbtowc\*(C'\fR are now optional; +useful only if you wish to restrict the length parsed in the source +string to less than the actual length. +.SS "Alpha assertions are no longer experimental" +.IX Subsection "Alpha assertions are no longer experimental" +See "(*pla:pattern)" in perlre, "(*plb:pattern)" in perlre, +"(*nla:pattern)" in perlre>, and "(*nlb:pattern)" in perlre. +Use of these no longer generates a warning; existing code that disables +the warning category \f(CW\*(C`experimental::alpha_assertions\*(C'\fR will continue to work +without any changes needed. Enabling the category has no effect. +.SS "Script runs are no longer experimental" +.IX Subsection "Script runs are no longer experimental" +See "Script Runs" in perlre. Use of these no longer generates a warning; +existing code that disables the warning category +\&\f(CW\*(C`experimental::script_run\*(C'\fR will continue to work without any +changes needed. Enabling the category has no effect. +.SS "Feature checks are now faster" +.IX Subsection "Feature checks are now faster" +Previously feature checks in the parser required a hash lookup when +features were set outside of a feature bundle, this has been optimized +to a bit mask check. [GH #17229 <https://github.com/Perl/perl5/issues/17229>] +.SS "Perl is now developed on GitHub" +.IX Subsection "Perl is now developed on GitHub" +Perl is now developed on GitHub. You can find us at +<https://github.com/Perl/perl5>. +.PP +Non-security bugs should now be reported via GitHub. Security issues should +continue to be reported as documented in perlsec. +.SS "Compiled patterns can now be dumped before optimization" +.IX Subsection "Compiled patterns can now be dumped before optimization" +This is primarily useful for tracking down bugs in the regular +expression compiler. This dump happens on \f(CW\*(C`\-DDEBUGGING\*(C'\fR perls, if you +specify \f(CW\*(C`\-Drv\*(C'\fR on the command line; or on any perl if the pattern is +compiled within the scope of \f(CW\*(C`use\ re\ qw(Debug\ DUMP_PRE_OPTIMIZE)\*(C'\fR or +\&\f(CW\*(C`use\ re\ qw(Debug\ COMPILE\ EXTRA)\*(C'\fR. (All but the second case display +other information as well.) +.SH Security +.IX Header "Security" +.SS "[CVE\-2020\-10543] Buffer overflow caused by a crafted regular expression" +.IX Subsection "[CVE-2020-10543] Buffer overflow caused by a crafted regular expression" +A signed \f(CW\*(C`size_t\*(C'\fR integer overflow in the storage space calculations for +nested regular expression quantifiers could cause a heap buffer overflow in +Perl's regular expression compiler that overwrites memory allocated after the +regular expression storage space with attacker supplied data. +.PP +The target system needs a sufficient amount of memory to allocate partial +expansions of the nested quantifiers prior to the overflow occurring. This +requirement is unlikely to be met on 64\-bit systems. +.PP +Discovered by: ManhND of The Tarantula Team, VinCSS (a member of Vingroup). +.SS "[CVE\-2020\-10878] Integer overflow via malformed bytecode produced by a crafted regular expression" +.IX Subsection "[CVE-2020-10878] Integer overflow via malformed bytecode produced by a crafted regular expression" +Integer overflows in the calculation of offsets between instructions for the +regular expression engine could cause corruption of the intermediate language +state of a compiled regular expression. An attacker could abuse this behaviour +to insert instructions into the compiled form of a Perl regular expression. +.PP +Discovered by: Hugo van der Sanden and Slaven Rezic. +.SS "[CVE\-2020\-12723] Buffer overflow caused by a crafted regular expression" +.IX Subsection "[CVE-2020-12723] Buffer overflow caused by a crafted regular expression" +Recursive calls to \f(CWS_study_chunk()\fR by Perl's regular expression compiler to +optimize the intermediate language representation of a regular expression could +cause corruption of the intermediate language state of a compiled regular +expression. +.PP +Discovered by: Sergey Aleynikov. +.SS "Additional Note" +.IX Subsection "Additional Note" +An application written in Perl would only be vulnerable to any of the above +flaws if it evaluates regular expressions supplied by the attacker. Evaluating +regular expressions in this fashion is known to be dangerous since the regular +expression engine does not protect against denial of service attacks in this +usage scenario. +.SH "Incompatible Changes" +.IX Header "Incompatible Changes" +.SS "Certain pattern matching features are now prohibited in compiling Unicode property value wildcard subpatterns" +.IX Subsection "Certain pattern matching features are now prohibited in compiling Unicode property value wildcard subpatterns" +These few features are either inappropriate or interfere with the +algorithm used to accomplish this task. The complete list is in +"Wildcards in Property Values" in perlunicode. +.ie n .SS "Unused functions ""POSIX::mbstowcs"" and ""POSIX::wcstombs"" are removed" +.el .SS "Unused functions \f(CWPOSIX::mbstowcs\fP and \f(CWPOSIX::wcstombs\fP are removed" +.IX Subsection "Unused functions POSIX::mbstowcs and POSIX::wcstombs are removed" +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. +.ie n .SS "A bug fix for ""(?[...])"" may have caused some patterns to no longer compile" +.el .SS "A bug fix for \f(CW(?[...])\fP may have caused some patterns to no longer compile" +.IX Subsection "A bug fix for (?[...]) may have caused some patterns to no longer compile" +See "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. +.ie n .SS """\ep{\fIuser\-defined\fP}"" properties now always override official Unicode ones" +.el .SS "\f(CW\ep{\fP\f(CIuser\-defined\fP\f(CW}\fP properties now always override official Unicode ones" +.IX Subsection "p{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 that contains 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 "User-Defined +Character Properties" in perlunicode. [GH #17205 <https://github.com/Perl/perl5/issues/17205>] +.SS "Modifiable variables are no longer permitted in constants" +.IX Subsection "Modifiable variables are no longer permitted in constants" +Code like: +.PP +.Vb 2 +\& my $var; +\& $sub = sub () { $var }; +.Ve +.PP +where \f(CW$var\fR is referenced elsewhere in some sort of modifiable context now +produces an exception when the sub is defined. +.PP +This error can be avoided by adding a return to the sub definition: +.PP +.Vb 1 +\& $sub = sub () { return $var }; +.Ve +.PP +This has been deprecated since Perl 5.22. +[GH #17020] <https://github.com/Perl/perl5/issues/17020> +.ie n .SS "Use of ""vec"" on strings with code points above 0xFF is forbidden" +.el .SS "Use of \f(CWvec\fP on strings with code points above 0xFF is forbidden" +.IX Subsection "Use of vec on strings with code points above 0xFF is forbidden" +Such strings are represented internally in UTF\-8, and \f(CW\*(C`vec\*(C'\fR is a +bit-oriented operation that will likely give unexpected results on those +strings. This was deprecated in perl 5.28.0. +.SS "Use of code points over 0xFF in string bitwise operators" +.IX Subsection "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 perldeprecation. +.ie n .SS "Sys::Hostname::hostname() does not accept arguments" +.el .SS "\f(CWSys::Hostname::hostname()\fP does not accept arguments" +.IX Subsection "Sys::Hostname::hostname() does not accept arguments" +This usage was deprecated in perl 5.28.0 and is now fatal. +.SS "Plain ""0"" string now treated as a number for range operator" +.IX Subsection "Plain ""0"" string now treated as a number for range operator" +Previously a range \f(CW"0" .. "\-1"\fR would produce a range of numeric +strings from "0" through "99"; this now produces an empty list, just +as \f(CW\*(C`0 .. \-1\*(C'\fR does. This also means that \f(CW"0" .. "9"\fR now produces a +list of integers, where previously it would produce a list of strings. +.PP +This was due to a special case that treated strings starting with "0" +as strings so ranges like \f(CW"00" .. "03"\fR produced \f(CW"00", "01", "02", "03"\fR, +but didn't specially handle the string \f(CW"0"\fR. +[GH #16770] <https://github.com/Perl/perl5/issues/16770> +.ie n .SS """\eK"" now disallowed in look-ahead and look-behind assertions" +.el .SS "\f(CW\eK\fP now disallowed in look-ahead and look-behind assertions" +.IX Subsection "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 should be. +[GH #14638] <https://github.com/Perl/perl5/issues/14638> +.SH "Performance Enhancements" +.IX Header "Performance Enhancements" +.IP \(bu 4 +\&\f(CW\*(C`my_strnlen\*(C'\fR has been sped up for systems that don't have their own +\&\f(CW\*(C`strnlen\*(C'\fR implementation. +.IP \(bu 4 +\&\f(CW\*(C`grok_bin_oct_hex\*(C'\fR (and so, \f(CW\*(C`grok_bin\*(C'\fR, \f(CW\*(C`grok_oct\*(C'\fR, and \f(CW\*(C`grok_hex\*(C'\fR) +have been sped up. +.IP \(bu 4 +\&\f(CW\*(C`grok_number_flags\*(C'\fR has been sped up. +.IP \(bu 4 +\&\f(CW\*(C`sort\*(C'\fR is now noticeably faster in cases such as \f(CW\*(C`sort {$a <=> $b}\*(C'\fR or +\&\f(CW\*(C`sort {$b <=> $a}\*(C'\fR. [GH #17608 <https://github.com/Perl/perl5/pull/17608>] +.SH "Modules and Pragmata" +.IX Header "Modules and Pragmata" +.SS "Updated Modules and Pragmata" +.IX Subsection "Updated Modules and Pragmata" +.IP \(bu 4 +Archive::Tar has been upgraded from version 2.32 to 2.36. +.IP \(bu 4 +autodie has been upgraded from version 2.29 to 2.32. +.IP \(bu 4 +B has been upgraded from version 1.76 to 1.80. +.IP \(bu 4 +B::Deparse has been upgraded from version 1.49 to 1.54. +.IP \(bu 4 +Benchmark has been upgraded from version 1.22 to 1.23. +.IP \(bu 4 +charnames has been upgraded from version 1.45 to 1.48. +.IP \(bu 4 +Class::Struct has been upgraded from version 0.65 to 0.66. +.IP \(bu 4 +Compress::Raw::Bzip2 has been upgraded from version 2.084 to 2.093. +.IP \(bu 4 +Compress::Raw::Zlib has been upgraded from version 2.084 to 2.093. +.IP \(bu 4 +CPAN has been upgraded from version 2.22 to 2.27. +.IP \(bu 4 +DB_File has been upgraded from version 1.843 to 1.853. +.IP \(bu 4 +Devel::PPPort has been upgraded from version 3.52 to 3.57. +.Sp +The test files generated on Win32 are now identical to when they are +generated on POSIX-like systems. +.IP \(bu 4 +diagnostics has been upgraded from version 1.36 to 1.37. +.IP \(bu 4 +Digest::MD5 has been upgraded from version 2.55 to 2.55_01. +.IP \(bu 4 +Dumpvalue has been upgraded from version 1.18 to 1.21. +.Sp +Previously, when dumping elements of an array and encountering an undefined +value, the string printed would have been \f(CW\*(C`empty array\*(C'\fR. This has been +changed to what was apparently originally intended: \f(CW\*(C`empty slot\*(C'\fR. +.IP \(bu 4 +DynaLoader has been upgraded from version 1.45 to 1.47. +.IP \(bu 4 +Encode has been upgraded from version 3.01 to 3.06. +.IP \(bu 4 +encoding has been upgraded from version 2.22 to 3.00. +.IP \(bu 4 +English has been upgraded from version 1.10 to 1.11. +.IP \(bu 4 +Exporter has been upgraded from version 5.73 to 5.74. +.IP \(bu 4 +ExtUtils::CBuilder has been upgraded from version 0.280231 to 0.280234. +.IP \(bu 4 +ExtUtils::MakeMaker has been upgraded from version 7.34 to 7.44. +.IP \(bu 4 +feature has been upgraded from version 1.54 to 1.58. +.Sp +A new \f(CW\*(C`indirect\*(C'\fR feature has been added, which is enabled by default +but allows turning off indirect object syntax. +.IP \(bu 4 +File::Find has been upgraded from version 1.36 to 1.37. +.Sp +On Win32, the tests no longer require either a file in the drive root +directory, or a writable root directory. +.IP \(bu 4 +File::Glob has been upgraded from version 1.32 to 1.33. +.IP \(bu 4 +File::stat has been upgraded from version 1.08 to 1.09. +.IP \(bu 4 +Filter::Simple has been upgraded from version 0.95 to 0.96. +.IP \(bu 4 +Getopt::Long has been upgraded from version 2.5 to 2.51. +.IP \(bu 4 +Hash::Util has been upgraded from version 0.22 to 0.23. +.Sp +The Synopsis has been updated as the example code stopped working with +newer perls. +[GH #17399 <https://github.com/Perl/perl5/issues/17399>] +.IP \(bu 4 +I18N::Langinfo has been upgraded from version 0.18 to 0.19. +.IP \(bu 4 +I18N::LangTags has been upgraded from version 0.43 to 0.44. +.Sp +Document the \f(CW\*(C`IGNORE_WIN32_LOCALE\*(C'\fR environment variable. +.IP \(bu 4 +IO has been upgraded from version 1.40 to 1.43. +.Sp +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 \f(CW\*(C`SO_PROTOCOL\*(C'\fR for a given +socket type the protocol method may return \f(CW\*(C`undef\*(C'\fR. +.Sp +The supplied \fITO\fR is now always honoured on calls to the \f(CWsend()\fR +method. [GH #16891] <https://github.com/Perl/perl5/issues/16891> +.IP \(bu 4 +IO-Compress has been upgraded from version 2.084 to 2.093. +.IP \(bu 4 +IPC::Cmd has been upgraded from version 1.02 to 1.04. +.IP \(bu 4 +IPC::Open3 has been upgraded from version 1.20 to 1.21. +.IP \(bu 4 +JSON::PP has been upgraded from version 4.02 to 4.04. +.IP \(bu 4 +Math::BigInt has been upgraded from version 1.999816 to 1.999818. +.IP \(bu 4 +Math::BigInt::FastCalc has been upgraded from version 0.5008 to 0.5009. +.IP \(bu 4 +Module::CoreList has been upgraded from version 5.20190522 to 5.20200620. +.IP \(bu 4 +Module::Load::Conditional has been upgraded from version 0.68 to 0.70. +.IP \(bu 4 +Module::Metadata has been upgraded from version 1.000036 to 1.000037. +.IP \(bu 4 +mro has been upgraded from version 1.22 to 1.23. +.IP \(bu 4 +Net::Ping has been upgraded from version 2.71 to 2.72. +.IP \(bu 4 +Opcode has been upgraded from version 1.43 to 1.47. +.IP \(bu 4 +open has been upgraded from version 1.11 to 1.12. +.IP \(bu 4 +overload has been upgraded from version 1.30 to 1.31. +.IP \(bu 4 +parent has been upgraded from version 0.237 to 0.238. +.IP \(bu 4 +perlfaq has been upgraded from version 5.20190126 to 5.20200523. +.IP \(bu 4 +PerlIO has been upgraded from version 1.10 to 1.11. +.IP \(bu 4 +PerlIO::encoding has been upgraded from version 0.27 to 0.28. +.IP \(bu 4 +PerlIO::via has been upgraded from version 0.17 to 0.18. +.IP \(bu 4 +Pod::Html has been upgraded from version 1.24 to 1.25. +.IP \(bu 4 +Pod::Simple has been upgraded from version 3.35 to 3.40. +.IP \(bu 4 +podlators has been upgraded from version 4.11 to 4.14. +.IP \(bu 4 +POSIX has been upgraded from version 1.88 to 1.94. +.IP \(bu 4 +re has been upgraded from version 0.37 to 0.40. +.IP \(bu 4 +Safe has been upgraded from version 2.40 to 2.41. +.IP \(bu 4 +Scalar::Util has been upgraded from version 1.50 to 1.55. +.IP \(bu 4 +SelfLoader has been upgraded from version 1.25 to 1.26. +.IP \(bu 4 +Socket has been upgraded from version 2.027 to 2.029. +.IP \(bu 4 +Storable has been upgraded from version 3.15 to 3.21. +.Sp +Use of \f(CWnote()\fR from Test::More is now optional in tests. This works +around a circular dependency with Test::More when installing on very +old perls from CPAN. +.Sp +Vstring magic strings over 2GB are now disallowed. +.Sp +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. [GH #17037] <https://github.com/Perl/perl5/issues/17037> +.IP \(bu 4 +Sys::Hostname has been upgraded from version 1.22 to 1.23. +.IP \(bu 4 +Sys::Syslog has been upgraded from version 0.35 to 0.36. +.IP \(bu 4 +Term::ANSIColor has been upgraded from version 4.06 to 5.01. +.IP \(bu 4 +Test::Simple has been upgraded from version 1.302162 to 1.302175. +.IP \(bu 4 +Thread has been upgraded from version 3.04 to 3.05. +.IP \(bu 4 +Thread::Queue has been upgraded from version 3.13 to 3.14. +.IP \(bu 4 +threads has been upgraded from version 2.22 to 2.25. +.IP \(bu 4 +threads::shared has been upgraded from version 1.60 to 1.61. +.IP \(bu 4 +Tie::File has been upgraded from version 1.02 to 1.06. +.IP \(bu 4 +Tie::Hash::NamedCapture has been upgraded from version 0.10 to 0.13. +.IP \(bu 4 +Tie::Scalar has been upgraded from version 1.04 to 1.05. +.IP \(bu 4 +Tie::StdHandle has been upgraded from version 4.5 to 4.6. +.IP \(bu 4 +Time::HiRes has been upgraded from version 1.9760 to 1.9764. +.Sp +Removed obsolete code such as support for pre\-5.6 perl and classic +MacOS. [GH #17096] <https://github.com/Perl/perl5/issues/17096> +.IP \(bu 4 +Time::Piece has been upgraded from version 1.33 to 1.3401. +.IP \(bu 4 +Unicode::Normalize has been upgraded from version 1.26 to 1.27. +.IP \(bu 4 +Unicode::UCD has been upgraded from version 0.72 to 0.75. +.IP \(bu 4 +VMS::Stdio has been upgraded from version 2.44 to 2.45. +.IP \(bu 4 +warnings has been upgraded from version 1.44 to 1.47. +.IP \(bu 4 +Win32 has been upgraded from version 0.52 to 0.53. +.IP \(bu 4 +Win32API::File has been upgraded from version 0.1203 to 0.1203_01. +.IP \(bu 4 +XS::APItest has been upgraded from version 1.00 to 1.09. +.SS "Removed Modules and Pragmata" +.IX Subsection "Removed Modules and Pragmata" +.IP \(bu 4 +Pod::Parser has been removed from the core distribution. +It still is available for download from CPAN. This resolves +[#13194 <https://github.com/Perl/perl5/issues/13194>]. +.SH Documentation +.IX Header "Documentation" +.SS "Changes to Existing Documentation" +.IX Subsection "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 <https://github.com/Perl/perl5/issues>. +.PP +Additionally, the following selected changes have been made: +.PP +\fIperldebguts\fR +.IX Subsection "perldebguts" +.IP \(bu 4 +Simplify a few regnode definitions +.Sp +Update \f(CW\*(C`BOUND\*(C'\fR and \f(CW\*(C`NBOUND\*(C'\fR definitions. +.IP \(bu 4 +Add ANYOFHs regnode +.Sp +This node is like \f(CW\*(C`ANYOFHb\*(C'\fR, but is used when more than one leading byte +is the same in all the matched code points. +.Sp +\&\f(CW\*(C`ANYOFHb\*(C'\fR 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. +.PP +\fIperlapi\fR +.IX Subsection "perlapi" +.IP \(bu 4 +\&\f(CW\*(C`sv_2pvbyte\*(C'\fR updated to mention it will croak if the SV cannot be +downgraded. +.IP \(bu 4 +\&\f(CW\*(C`sv_setpvn\*(C'\fR updated to mention that the UTF\-8 flag will not be changed by +this function, and a terminating NUL byte is guaranteed. +.IP \(bu 4 +Documentation for \f(CW\*(C`PL_phase\*(C'\fR has been added. +.IP \(bu 4 +The documentation for \f(CW\*(C`grok_bin\*(C'\fR, \f(CW\*(C`grok_oct\*(C'\fR, and \f(CW\*(C`grok_hex\*(C'\fR has been +updated and clarified. +.PP +\fIperldiag\fR +.IX Subsection "perldiag" +.IP \(bu 4 +Add documentation for experimental 'isa' operator +.Sp +(S experimental::isa) This warning is emitted if you use the (\f(CW\*(C`isa\*(C'\fR) +operator. This operator is currently experimental and its behaviour may +change in future releases of Perl. +.PP +\fIperlfunc\fR +.IX Subsection "perlfunc" +.ie n .IP """caller""" 4 +.el .IP \f(CWcaller\fR 4 +.IX Item "caller" +Like \f(CW\*(C`_\|_FILE_\|_\*(C'\fR and \f(CW\*(C`_\|_LINE_\|_\*(C'\fR, the filename and +line number returned here may be altered by the mechanism described at +"Plain Old Comments (Not!)" in perlsyn. +.ie n .IP """_\|_FILE_\|_""" 4 +.el .IP \f(CW_\|_FILE_\|_\fR 4 +.IX Item "__FILE__" +It can be altered by the mechanism described at +"Plain Old Comments (Not!)" in perlsyn. +.ie n .IP """_\|_LINE_\|_""" 4 +.el .IP \f(CW_\|_LINE_\|_\fR 4 +.IX Item "__LINE__" +It can be altered by the mechanism described at +"Plain Old Comments (Not!)" in perlsyn. +.ie n .IP """return""" 4 +.el .IP \f(CWreturn\fR 4 +.IX Item "return" +Now mentions that you cannot return from \f(CW\*(C`do BLOCK\*(C'\fR. +.ie n .IP """open""" 4 +.el .IP \f(CWopen\fR 4 +.IX Item "open" +The \f(CWopen()\fR section had been renovated significantly. +.PP +\fIperlguts\fR +.IX Subsection "perlguts" +.IP \(bu 4 +No longer suggesting using perl's \f(CW\*(C`malloc\*(C'\fR. Modern system \f(CW\*(C`malloc\*(C'\fR is +assumed to be much better than perl's implementation now. +.IP \(bu 4 +Documentation about \fIembed.fnc\fR flags has been removed. \fIembed.fnc\fR now has +sufficient comments within it. Anyone changing that file will see those +comments first, so entries here are now redundant. +.IP \(bu 4 +Updated documentation for \f(CW\*(C`UTF8f\*(C'\fR +.IP \(bu 4 +Added missing \f(CW\*(C`=for apidoc\*(C'\fR lines +.PP +\fIperlhacktips\fR +.IX Subsection "perlhacktips" +.IP \(bu 4 +The differences between Perl strings and C strings are now detailed. +.PP +\fIperlintro\fR +.IX Subsection "perlintro" +.IP \(bu 4 +The documentation for the repetition operator \f(CW\*(C`x\*(C'\fR have been clarified. +[GH #17335 <https://github.com/Perl/perl5/issues/17335>] +.PP +\fIperlipc\fR +.IX Subsection "perlipc" +.IP \(bu 4 +The documentation surrounding \f(CW\*(C`open\*(C'\fR and handle usage has been modernized +to prefer 3\-arg open and lexical variables instead of barewords. +.IP \(bu 4 +Various updates and fixes including making all examples strict-safe and +replacing \f(CW\*(C`\-w\*(C'\fR with \f(CW\*(C`use warnings\*(C'\fR. +.PP +\fIperlop\fR +.IX Subsection "perlop" +.IP \(bu 4 +\&'isa' operator is experimental +.Sp +This is an experimental feature and is available when enabled +by \f(CW\*(C`use feature \*(Aqisa\*(Aq\*(C'\fR. It emits a warning in the \f(CW\*(C`experimental::isa\*(C'\fR +category. +.PP +\fIperlpod\fR +.IX Subsection "perlpod" +.IP \(bu 4 +Details of the various stacks within the perl interpreter are now explained +here. +.IP \(bu 4 +Advice has been added regarding the usage of \f(CW\*(C`Z<>\*(C'\fR. +.PP +\fIperlport\fR +.IX Subsection "perlport" +.IP \(bu 4 +Update \f(CW\*(C`timegm\*(C'\fR example to use the correct year format \fI1970\fR instead of \fI70\fR. +[GH #16431 <https://github.com/Perl/perl5/issues/16431>] +.PP +\fIperlreref\fR +.IX Subsection "perlreref" +.IP \(bu 4 +Fix some typos. +.PP +\fIperlvar\fR +.IX Subsection "perlvar" +.IP \(bu 4 +Now recommends stringifying \f(CW$]\fR and comparing it numerically. +.PP +\fIperlapi, perlintern\fR +.IX Subsection "perlapi, perlintern" +.IP \(bu 4 +Documentation has been added for several functions that were +lacking it before. +.PP +\fIperlxs\fR +.IX Subsection "perlxs" +.IP \(bu 4 +Suggest using \f(CW\*(C`libffi\*(C'\fR for simple library bindings via CPAN modules +like FFI::Platypus or FFI::Raw. +.PP +\fIPOSIX\fR +.IX Subsection "POSIX" +.IP \(bu 4 +\&\f(CW\*(C`setlocale\*(C'\fR warning about threaded builds updated to note it does not +apply on Perl 5.28.X and later. +.IP \(bu 4 +\&\f(CW\*(C`Posix::SigSet\->new(...)\*(C'\fR updated to state it throws an error if any of +the supplied signals cannot be added to the set. +.PP +Additionally, the following selected changes have been made: +.PP +\fIUpdating of links\fR +.IX Subsection "Updating of links" +.IP \(bu 4 +Links to the now defunct <https://search.cpan.org> site now point at +the equivalent <https://metacpan.org> URL. [GH #17393 <https://github.com/Perl/perl5/issues/17393>] +.IP \(bu 4 +The man page for ExtUtils::XSSymSet is now only installed on VMS, +which is the only platform the module is installed on. [GH #17424 <https://github.com/Perl/perl5/issues/17424>] +.IP \(bu 4 +URLs have been changed to \f(CW\*(C`https://\*(C'\fR and stale links have been updated. +.Sp +Where applicable, the URLs in the documentation have been moved from using the +\&\f(CW\*(C`http://\*(C'\fR protocol to \f(CW\*(C`https://\*(C'\fR. This also affects the location of the bug +tracker at <https://rt.perl.org>. +.IP \(bu 4 +Some links to OS/2 libraries, Address Sanitizer and other system tools had gone +stale. These have been updated with working links. +.IP \(bu 4 +Some links to old email addresses on perl5\-porters had gone stale. These have been +updated with working links. +.SH Diagnostics +.IX Header "Diagnostics" +The following additions or changes have been made to diagnostic output, +including warnings and fatal error messages. For the complete list of +diagnostic messages, see perldiag. +.SS "New Diagnostics" +.IX Subsection "New Diagnostics" +\fINew Errors\fR +.IX Subsection "New Errors" +.IP \(bu 4 +Expecting interpolated extended charclass in regex; marked by <\-\- HERE in m/%s/ +.Sp +This is a replacement for several error messages listed under +"Changes to Existing Diagnostics". +.IP \(bu 4 +\&\f(CW\*(C`No digits found for %s literal\*(C'\fR +.Sp +(F) No hexadecimal digits were found following \f(CW\*(C`0x\*(C'\fR or no binary digits were +found following \f(CW\*(C`0b\*(C'\fR. +.PP +\fINew Warnings\fR +.IX Subsection "New Warnings" +.IP \(bu 4 +Code point 0x%X is not Unicode, and not portable +.Sp +This is actually not a new message, but it is now output when the +warnings category \f(CW\*(C`portable\*(C'\fR is enabled. +.Sp +When raised during regular expression pattern compilation, the warning +has extra text added at the end marking where precisely in the pattern +it occurred. +.IP \(bu 4 +Non-hex character '%c' terminates \ex early. Resolved as "%s" +.Sp +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 \f(CW\*(C`\eo{}\*(C'\fR. +.SS "Changes to Existing Diagnostics" +.IX Subsection "Changes to Existing Diagnostics" +.IP \(bu 4 +Character following "\ec" must be printable ASCII +.Sp +\&...now has extra text added at the end, when raised during regular +expression pattern compilation, marking where precisely in the pattern +it occurred. +.IP \(bu 4 +Use "%s" instead of "%s" +.Sp +\&...now has extra text added at the end, when raised during regular +expression pattern compilation, marking where precisely in the pattern +it occurred. +.IP \(bu 4 +Sequence "\ec{" invalid +.Sp +\&...now has extra text added at the end, when raised during regular +expression pattern compilation, marking where precisely in the pattern +it occurred. +.IP \(bu 4 +"\ec%c" is more clearly written simply as "%s" +.Sp +\&...now has extra text added at the end, when raised during regular +expression pattern compilation, marking where precisely in the pattern +it occurred. +.IP \(bu 4 +Non-octal character '%c' terminates \eo early. Resolved as "%s" +.Sp +\&...now includes the phrase "terminates \eo early", and has extra text added +at the end, when raised during regular expression pattern compilation, +marking where precisely in the pattern it occurred. In some instances +the text of the resolution has been clarified. +.IP \(bu 4 +\&'%s' resolved to '\eo{%s}%d' +.Sp +As of Perl 5.32, this message is no longer generated. Instead, +"Non-octal character '%c' terminates \eo early. Resolved as "%s"" in perldiag +is used instead. +.IP \(bu 4 +Use of code point 0x%s is not allowed; the permissible max is 0x%X +.Sp +Some instances of this message previously output the hex digits \f(CW\*(C`A\*(C'\fR, +\&\f(CW\*(C`B\*(C'\fR, \f(CW\*(C`C\*(C'\fR, \f(CW\*(C`D\*(C'\fR, \f(CW\*(C`E\*(C'\fR, and \f(CW\*(C`F\*(C'\fR in lower case. Now they are all +consistently upper case. +.IP \(bu 4 +The following three diagnostics have been removed, and replaced by +\&\f(CW\*(C`Expecting interpolated extended charclass in regex; marked by <\-\- HERE in m/%s/\*(C'\fR +: +\&\f(CW\*(C`Expecting close paren for nested extended charclass in regex; marked +by <\-\- HERE in m/%s/\*(C'\fR, +\&\f(CW\*(C`Expecting close paren for wrapper for nested extended charclass in +regex; marked by <\-\- HERE in m/%s/\*(C'\fR, +and +\&\f(CW\*(C`Expecting \*(Aq(?flags:(?[...\*(Aq in regex; marked by <\-\-\ HERE in m/%s/\*(C'\fR. +.IP \(bu 4 +The \f(CW\*(C`Code point 0x%X is not Unicode, and not portable\*(C'\fR warning removed +the line \f(CW\*(C`Code points above 0xFFFF_FFFF require larger than a 32 bit word.\*(C'\fR +as code points that large are no longer legal on 32\-bit platforms. +.IP \(bu 4 +Can't use global \f(CW%s\fR in \f(CW%s\fR +.Sp +This error message has been slightly reformatted from the original \f(CW\*(C`Can\*(Aqt use +global %s in "%s"\*(C'\fR, and in particular misleading error messages like \f(CW\*(C`Can\*(Aqt +use global $_ in "my"\*(C'\fR are now rendered as \f(CW\*(C`Can\*(Aqt use global $_ in subroutine +signature\*(C'\fR. +.IP \(bu 4 +Constants from lexical variables potentially modified elsewhere are no longer permitted +.Sp +This error message replaces the former \f(CWConstants from lexical variables +potentially modified elsewhere are deprecated. This will not be allowed in Perl +5.32\fR 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). +.Sp +See also "Incompatible Changes". +.IP \(bu 4 +\&\f(CW\*(C`\eN{} here is restricted to one character\*(C'\fR is now emitted in the same +circumstances where previously \f(CW\*(C`\eN{} in inverted character class or as a range +end\-point is restricted to one character\*(C'\fR was. +.Sp +This is due to new circumstances having been added in Perl 5.30 that weren't +covered by the earlier wording. +.SH "Utility Changes" +.IX Header "Utility Changes" +.SS perlbug +.IX Subsection "perlbug" +.IP \(bu 4 +The bug tracker homepage URL now points to GitHub. +.SS streamzip +.IX Subsection "streamzip" +.IP \(bu 4 +This is a new utility, included as part of an +IO::Compress::Base upgrade. +.Sp +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. +.SH "Configuration and Compilation" +.IX Header "Configuration and Compilation" +.SS \fIConfigure\fP +.IX Subsection "Configure" +.IP \(bu 4 +For clang++, add \f(CW\*(C`#include <stdlib.h>\*(C'\fR to Configure's probes for +\&\f(CW\*(C`futimes\*(C'\fR, \f(CW\*(C`strtoll\*(C'\fR, \f(CW\*(C`strtoul\*(C'\fR, \f(CW\*(C`strtoull\*(C'\fR, \f(CW\*(C`strtouq\*(C'\fR, otherwise the +probes would fail to compile. +.IP \(bu 4 +Use a compile and run test for \f(CW\*(C`lchown\*(C'\fR to satisfy clang++ which should +more reliably detect it. +.IP \(bu 4 +For C++ compilers, add \f(CW\*(C`#include <stdio.h>\*(C'\fR to Configure's probes for +\&\f(CW\*(C`getpgrp\*(C'\fR and \f(CW\*(C`setpgrp\*(C'\fR as they use printf and C++ compilers may fail +compilation instead of just warning. +.IP \(bu 4 +Check if the compiler can handle inline attribute. +.IP \(bu 4 +Check for character data alignment. +.IP \(bu 4 +\&\fIConfigure\fR now correctly handles gcc\-10. Previously it was interpreting it +as gcc\-1 and turned on \f(CW\*(C`\-fpcc\-struct\-return\*(C'\fR. +.IP \(bu 4 +Perl now no longer probes for \f(CW\*(C`d_u32align\*(C'\fR, defaulting to \f(CW\*(C`define\*(C'\fR on all +platforms. This check was error-prone when it was done, which was on 32\-bit +platforms only. +[GH #16680] <https://github.com/Perl/perl5/issues/16680> +.IP \(bu 4 +Documentation and hints for building perl on Z/OS (native EBCDIC) have been +updated. This is still a work in progress. +.IP \(bu 4 +A new probe for \f(CW\*(C`malloc_usable_size\*(C'\fR has been added. +.IP \(bu 4 +Improvements in \fIConfigure\fR to detection in C++ and clang++. Work ongoing by +Andy Dougherty. [GH #17033] <https://github.com/Perl/perl5/issues/17033> +.IP \(bu 4 +\&\fIautodoc.pl\fR +.Sp +This tool that regenerates perlintern and perlapi has been overhauled +significantly, restoring consistency in flags used in \fIembed.fnc\fR and +Devel::PPPort and allowing removal of many redundant \f(CW\*(C`=for apidoc\*(C'\fR +entries in code. +.IP \(bu 4 +The \f(CW\*(C`ECHO\*(C'\fR macro is now defined. This is used in a \f(CW\*(C`dtrace\*(C'\fR rule that was +originally changed for FreeBSD, and the FreeBSD make apparently predefines it. +The Solaris make does not predefine \f(CW\*(C`ECHO\*(C'\fR which broke this rule on Solaris. +[GH #17057] <https://github.com/Perl/perl5/issues/17057> +.IP \(bu 4 +Bison versions 3.1 through 3.4 are now supported. +.SH Testing +.IX Header "Testing" +Tests were added and changed to reflect the other additions and +changes in this release. Furthermore, these significant changes were +made: +.IP \(bu 4 +\&\fIt/run/switches.t\fR no longer uses (and re-uses) the \fItmpinplace/\fR +directory under \fIt/\fR. This may prevent spurious failures. [GH #17424 <https://github.com/Perl/perl5/issues/17424>] +.IP \(bu 4 +Various bugs in \f(CW\*(C`POSIX::mbtowc\*(C'\fR were fixed. Potential races with +other threads are now avoided, and previously the returned wide +character could well be garbage. +.IP \(bu 4 +Various bugs in \f(CW\*(C`POSIX::wctomb\*(C'\fR 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. +.IP \(bu 4 +Certain test output of scalars containing control characters and Unicode +has been fixed on EBCDIC. +.IP \(bu 4 +\&\fIt/charset_tools.pl\fR: Avoid some work on ASCII platforms. +.IP \(bu 4 +\&\fIt/re/regexp.t\fR: Speed up many regex tests on ASCII platform +.IP \(bu 4 +\&\fIt/re/pat.t\fR: Skip tests that don't work on EBCDIC. +.SH "Platform Support" +.IX Header "Platform Support" +.SS "Discontinued Platforms" +.IX Subsection "Discontinued Platforms" +.IP "Windows CE" 4 +.IX Item "Windows CE" +Support for building perl on Windows CE has now been removed. +.SS "Platform-Specific Notes" +.IX Subsection "Platform-Specific Notes" +.IP Linux 4 +.IX Item "Linux" +\&\f(CW\*(C`cc\*(C'\fR will be used to populate \f(CW\*(C`plibpth\*(C'\fR if \f(CW\*(C`cc\*(C'\fR is \f(CW\*(C`clang\*(C'\fR. +[GH #17043] <https://github.com/Perl/perl5/issues/17043> +.IP "NetBSD 8.0" 4 +.IX Item "NetBSD 8.0" +Fix compilation of Perl on NetBSD 8.0 with g++. +[GH #17381 <https://github.com/Perl/perl5/issues/17381>] +.IP Windows 4 +.IX Item "Windows" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +The configuration for \f(CW\*(C`ccflags\*(C'\fR and \f(CW\*(C`optimize\*(C'\fR are now separate, as +with POSIX platforms. [GH #17156 <https://github.com/Perl/perl5/issues/17156>] +.IP \(bu 4 +Support for building perl with Visual C++ 6.0 has now been removed. +.IP \(bu 4 +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. +.Sp +For the second we now decode the locale name ourselves, and always +decode it as UTF\-8. [GH #16922] <https://github.com/Perl/perl5/issues/16922> +.IP \(bu 4 +\&\fIt/op/magic.t\fR could fail if environment variables starting with +\&\f(CW\*(C`FOO\*(C'\fR already existed. +.IP \(bu 4 +MYMALLOC (PERL_MALLOC) build has been fixed. +.RE +.RS 4 +.RE +.IP Solaris 4 +.IX Item "Solaris" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +\&\f(CW\*(C`Configure\*(C'\fR will now find recent versions of the Oracle Developer Studio +compiler, which are found under \f(CW\*(C`/opt/developerstudio*\*(C'\fR. +.IP \(bu 4 +\&\f(CW\*(C`Configure\*(C'\fR now uses the detected types for \f(CW\*(C`gethostby*\*(C'\fR functions, allowing +Perl to once again compile on certain configurations of Solaris. +.RE +.RS 4 +.RE +.IP VMS 4 +.IX Item "VMS" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +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 \f(CW\*(C`stdint.h\*(C'\fR and the following functions: \f(CW\*(C`fpclassify\*(C'\fR, \f(CW\*(C`isblank\*(C'\fR, \f(CW\*(C`isless\*(C'\fR, +\&\f(CW\*(C`llrint\*(C'\fR, \f(CW\*(C`llrintl\*(C'\fR, \f(CW\*(C`llround\*(C'\fR, \f(CW\*(C`llroundl\*(C'\fR, \f(CW\*(C`nearbyint\*(C'\fR, \f(CW\*(C`round\*(C'\fR, \f(CW\*(C`scalbn\*(C'\fR, +and \f(CW\*(C`scalbnl\*(C'\fR. +.IP \(bu 4 +\&\f(CW\*(C`\-Duse64bitint\*(C'\fR is now the default on VMS. +.RE +.RS 4 +.RE +.IP z/OS 4 +.IX Item "z/OS" +Perl 5.32 has been tested on z/OS 2.4, with the following caveats: +.RS 4 +.IP \(bu 4 +Only static builds (the default) build reliably +.IP \(bu 4 +When using locales, z/OS does not handle the \f(CW\*(C`LC_MESSAGES\*(C'\fR category +properly, so when compiling perl, you should add the following to your +\&\fIConfigure\fR options +.Sp +.Vb 1 +\& ./Configure <other options> \-Accflags=\-DNO_LOCALE_MESSAGES +.Ve +.IP \(bu 4 +z/OS does not support locales with threads, so when compiling a threaded +perl, you should add the following to your \fIConfigure\fR options +.Sp +.Vb 1 +\& ./Configure <other Configure options> \-Accflags=\-DNO_LOCALE +.Ve +.IP \(bu 4 +Some CPAN modules that are shipped with perl fail at least one of their +self-tests. These are: +Archive::Tar, +Config::Perl::V, +CPAN::Meta, +CPAN::Meta::YAML, +Digest::MD5, +Digest::SHA, +Encode, +ExtUtils::MakeMaker, +ExtUtils::Manifest, +HTTP::Tiny, +IO::Compress, +IPC::Cmd, +JSON::PP, +libnet, +MIME::Base64, +Module::Metadata, +PerlIO::via\-QuotedPrint, +Pod::Checker, +podlators, +Pod::Simple, +Socket, +and Test::Harness. +.Sp +The causes of the failures range from the self-test itself is flawed, +and the module actually works fine, up to the module doesn't work at all +on EBCDIC platforms. +.RE +.RS 4 +.RE +.SH "Internal Changes" +.IX Header "Internal Changes" +.IP \(bu 4 +\&\f(CW\*(C`savepvn\*(C'\fR's len parameter is now a \f(CW\*(C`Size_t\*(C'\fR instead of an \f(CW\*(C`I32\*(C'\fR since we +can handle longer strings than 31 bits. +.IP \(bu 4 +The lexer (\f(CWPerl_yylex()\fR in \fItoke.c\fR) was previously a single 4100\-line +function, relying heavily on \f(CW\*(C`goto\*(C'\fR 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 (\f(CWyyl_word_or_keyword()\fR) is a little +over 900 lines, and consists of a single \f(CW\*(C`switch\*(C'\fR statement, all of whose +\&\f(CW\*(C`case\*(C'\fR groups are independent. This should be much easier to understand and +maintain. +.IP \(bu 4 +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 \f(CW\*(C`v5.31.5\-346\-g116e19abbf\*(C'\fR for full +details. +.IP \(bu 4 +The code that handles \f(CW\*(C`tr///\*(C'\fR 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 \f(CW\*(C`/s\*(C'\fR, the squeezing was done based on the source, rather than the +replacement. A documented bug that got fixed was +[GH #14777] <https://github.com/Perl/perl5/issues/14777>. +.IP \(bu 4 +A new macro for XS writers dealing with UTF\-8\-encoded Unicode strings +has been created "\f(CW\*(C`UTF8_CHK_SKIP\*(C'\fR" in perlapi that is safer in the face +of malformed UTF\-8 input than "\f(CW\*(C`UTF8_SKIP\*(C'\fR" in perlapi (but not as safe +as "\f(CW\*(C`UTF8_SAFE_SKIP\*(C'\fR" in perlapi). It won't read past a NUL character. +It has been backported in Devel::PPPort 3.55 and later. +.IP \(bu 4 +Added the \f(CW\*(C`PL_curstackinfo\->si_cxsubix\*(C'\fR field. This records the stack index +of the most recently pushed sub/format/eval context. It is set and restored +automatically by \f(CWcx_pushsub()\fR, \f(CWcx_popsub()\fR etc., but would need to be +manually managed if you do any unusual manipulation of the context stack. +.IP \(bu 4 +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 +"In XS code, use of various macros dealing with UTF\-8." in perldeprecation +.IP \(bu 4 +A new parser function \fBparse_subsignature()\fR +allows a keyword plugin to parse a subroutine signature while \f(CWuse feature +\&\*(Aqsignatures\*(Aq\fR is in effect. This allows custom keywords to implement +semantics similar to regular \f(CW\*(C`sub\*(C'\fR declarations that include signatures. +[GH #16261] <https://github.com/Perl/perl5/issues/16261> +.IP \(bu 4 +Since on some platforms we need to hold a mutex when temporarily +switching locales, new macros (\f(CW\*(C`STORE_LC_NUMERIC_SET_TO_NEEDED_IN\*(C'\fR, +\&\f(CW\*(C`WITH_LC_NUMERIC_SET_TO_NEEDED\*(C'\fR and \f(CW\*(C`WITH_LC_NUMERIC_SET_TO_NEEDED_IN\*(C'\fR) +have been added to make it easier to do this safely and efficiently +as part of [GH #17034] <https://github.com/Perl/perl5/issues/17034>. +.IP \(bu 4 +The memory bookkeeping overhead for allocating an OP structure has been +reduced by 8 bytes per OP on 64\-bit systems. +.IP \(bu 4 +\&\fBeval_pv()\fR no longer stringifies the exception when +\&\f(CW\*(C`[GH #17035]|https://github.com/Perl/perl5/issues/17035\*(C'\fR] +.IP \(bu 4 +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. +.IP \(bu 4 +The API \fBeval_sv()\fR now accepts a \f(CW\*(C`G_RETHROW\*(C'\fR flag. If this flag is set and an +exception is thrown while compiling or executing the supplied code, it will be +rethrown, and \fBeval_sv()\fR will not return. +[GH #17036] <https://github.com/Perl/perl5/issues/17036> +.IP \(bu 4 +As part of the fix for +[GH #1537] <https://github.com/Perl/perl5/issues/1537> \fBperl_parse()\fR +now returns non-zero if \fBexit\fR\|(0) is called in a \f(CW\*(C`BEGIN\*(C'\fR, \f(CW\*(C`UNITCHECK\*(C'\fR or +\&\f(CW\*(C`CHECK\*(C'\fR block. +.IP \(bu 4 +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 \f(CW\*(C`$n == 1 ? "one" : $n == 2 ? "two" : ....\*(C'\fR (especially +in code which is auto-generated). +.Sp +This is particularly noticeable where the code is compiled within a separate +thread, as threads tend to have small stacks by default. +.SH "Selected Bug Fixes" +.IX Header "Selected Bug Fixes" +.IP \(bu 4 +Previously "require" in perlfunc would only treat the special built-in +SV \f(CW&PL_sv_undef\fR as a value in \f(CW%INC\fR as if a previous \f(CW\*(C`require\*(C'\fR +has failed, treating other undefined SVs as if the previous \f(CW\*(C`require\*(C'\fR +has succeeded. This could cause unexpected success from \f(CW\*(C`require\*(C'\fR +e.g., on \f(CW\*(C`local %INC = %INC;\*(C'\fR. This has been fixed. [GH #17428 <https://github.com/Perl/perl5/issues/17428>] +.IP \(bu 4 +\&\f(CW\*(C`(?{...})\*(C'\fR eval groups in regular expressions no longer unintentionally +trigger "EVAL without pos change exceeded limit in regex" [GH #17490 <https://github.com/Perl/perl5/issues/17490>]. +.IP \(bu 4 +\&\f(CW\*(C`(?[...])\*(C'\fR 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 "Diagnostics". +.IP \(bu 4 +The debug display (say by specifying \f(CW\*(C`\-Dr\*(C'\fR or \f(CW\*(C`use\ re\*(C'\fR (with +appropriate options) of compiled Unicode property wildcard subpatterns no +longer has extraneous output. +.IP \(bu 4 +Fix an assertion failure in the regular expression engine. +[GH #17372 <https://github.com/Perl/perl5/issues/17372>] +.IP \(bu 4 +Fix coredump in pp_hot.c after \f(CWB::UNOP_AUX::aux_list()\fR. +[GH #17301 <https://github.com/Perl/perl5/issues/17301>] +.IP \(bu 4 +Loading IO is now threadsafe. +[GH #14816 <https://github.com/Perl/perl5/issues/14816>] +.IP \(bu 4 +\&\f(CW\*(C`\ep{user\-defined}\*(C'\fR overrides official Unicode [GH #17025 <https://github.com/Perl/perl5/issues/17025>] +.Sp +Prior to this patch, the override was only sometimes in effect. +.IP \(bu 4 +Properly handle filled \f(CW\*(C`/il\*(C'\fR regnodes and multi-char folds +.IP \(bu 4 +Compilation error during make minitest [GH #17293 <https://github.com/Perl/perl5/issues/17293>] +.IP \(bu 4 +Move the implementation of \f(CW\*(C`%\-\*(C'\fR, \f(CW\*(C`%+\*(C'\fR into core. +.IP \(bu 4 +Read beyond buffer in \f(CW\*(C`grok_inf_nan\*(C'\fR [GH #17370 <https://github.com/Perl/perl5/issues/17370>] +.IP \(bu 4 +Workaround glibc bug with \f(CW\*(C`LC_MESSAGES\*(C'\fR [GH #17081 <https://github.com/Perl/perl5/issues/17081>] +.IP \(bu 4 +\&\f(CWprintf()\fR or \f(CWsprintf()\fR with the \f(CW%n\fR format could cause a panic on +debugging builds, or report an incorrectly cached length value when +producing \f(CW\*(C`SVfUTF8\*(C'\fR flagged strings. [GH #17221 <https://github.com/Perl/perl5/issues/17221>] +.IP \(bu 4 +The tokenizer has been extensively refactored. +[GH #17241 <https://github.com/Perl/perl5/issues/17241>] +[GH #17189 <https://github.com/Perl/perl5/issues/17189>] +.IP \(bu 4 +\&\f(CW\*(C`use strict "subs"\*(C'\fR is now enforced for bareword constants optimized +into a \f(CW\*(C`multiconcat\*(C'\fR operator. [GH #17254 <https://github.com/Perl/perl5/issues/17254>] +.IP \(bu 4 +A memory leak in regular expression patterns has been fixed. [GH #17218 <https://github.com/Perl/perl5/issues/17218>] +.IP \(bu 4 +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. [GH #17062] <https://github.com/Perl/perl5/issues/17062> +.IP \(bu 4 +Matching a non\-\f(CW\*(C`SVf_UTF8\*(C'\fR string against a regular expression +containing unicode literals could leak a SV on each match attempt. +[GH #17140] <https://github.com/Perl/perl5/issues/17140> +.IP \(bu 4 +Overloads for octal and binary floating point literals were always +passed a string with a \f(CW\*(C`0x\*(C'\fR prefix instead of the appropriate \f(CW0\fR or +\&\f(CW\*(C`[GH #14791]|https://github.com/Perl/perl5/issues/14791\*(C'\fR] +.IP \(bu 4 +\&\f(CW\*(C`$@ = 100; die;\*(C'\fR now correctly propagates the 100 as an exception +instead of ignoring it. [GH #17098] <https://github.com/Perl/perl5/issues/17098> +.IP \(bu 4 +\&\f(CW\*(C`[GH #17108]|https://github.com/Perl/perl5/issues/17108\*(C'\fR] +.IP \(bu 4 +Exceptions thrown while \f(CW$@\fR is read-only could result in infinite +recursion as perl tried to update \f(CW$@\fR, which throws another +exception, resulting in a stack overflow. Perl now replaces \f(CW$@\fR +with a copy if it's not a simple writable SV. [GH #17083] <https://github.com/Perl/perl5/issues/17083> +.IP \(bu 4 +Setting \f(CW$)\fR now properly sets supplementary group ids if you have +the necessary privileges. [GH #17031] <https://github.com/Perl/perl5/issues/17031> +.IP \(bu 4 +\&\fBclose()\fR 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 \fBdie()\fR or \fBexit()\fR while \fBclose()\fR +is waiting for the child process to complete. [GH #13929] <https://github.com/Perl/perl5/issues/13929> +.IP \(bu 4 +\&\f(CW\*(C`sprintf("%.*a", \-10000, $x)\*(C'\fR would cause a buffer overflow due +to mishandling of the negative precision value. [GH #16942] <https://github.com/Perl/perl5/issues/16942> +.IP \(bu 4 +\&\fBscalar()\fR on a reference could cause an erroneous assertion failure +during compilation. [GH #16969] <https://github.com/Perl/perl5/issues/16969> +.IP \(bu 4 +\&\f(CW\*(C`%{^CAPTURE_ALL}\*(C'\fR is now an alias to \f(CW\*(C`%\-\*(C'\fR as documented, rather than +incorrectly an alias for \f(CW\*(C`[GH #16105]|https://github.com/Perl/perl5/issues/16105\*(C'\fR] +.IP \(bu 4 +\&\f(CW\*(C`%{^CAPTURE}\*(C'\fR didn't work if \f(CW\*(C`@{^CAPTURE}\*(C'\fR was mentioned first. +Similarly for \f(CW\*(C`%{^CAPTURE_ALL}\*(C'\fR and \f(CW\*(C`@{^CAPTURE_ALL}\*(C'\fR, though +\&\f(CW\*(C`[GH #17045]|https://github.com/Perl/perl5/issues/17045\*(C'\fR] +.IP \(bu 4 +Extraordinarily large (over 2GB) floating point format widths could +cause an integer overflow in the underlying call to \fBsnprintf()\fR, +resulting in an assertion. Formatted floating point widths are now +limited to the range of int, the return value of \fBsnprintf()\fR. +[#16881 <https://github.com/Perl/perl5/issues/16881>] +.IP \(bu 4 +Parsing the following constructs within a sub-parse (such as with +\&\f(CW"${code here}"\fR or \f(CW\*(C`s/.../code here/e\*(C'\fR) has changed to match how +they're parsed normally: +.RS 4 +.IP \(bu 4 +\&\f(CW\*(C`print $fh ...\*(C'\fR no longer produces a syntax error. +.IP \(bu 4 +Code like \f(CW\*(C`s/.../ ${time} /e\*(C'\fR now properly produces an "Ambiguous use +of ${time} resolved to \f(CW$time\fR at ..." warning when warnings are enabled. +.IP \(bu 4 +\&\f(CW\*(C`@x {"a"}\*(C'\fR (with the space) in a sub-parse now properly produces a +"better written as" warning when warnings are enabled. +.IP \(bu 4 +Attributes can now be used in a sub-parse. +[GH #16847] <https://github.com/Perl/perl5/issues/16847> +.RE +.RS 4 +.RE +.IP \(bu 4 +Incomplete hex and binary literals like \f(CW\*(C`0x\*(C'\fR and \f(CW\*(C`0b\*(C'\fR are now +treated as if the \f(CW\*(C`x\*(C'\fR or \f(CW\*(C`b\*(C'\fR is part of the next token. +[#17010 <https://github.com/Perl/perl5/issues/17010>] +.IP \(bu 4 +A spurious \f(CW\*(C`)\*(C'\fR in a subparse, such as in \f(CW\*(C`s/.../code here/e\*(C'\fR or +\&\f(CW"...${code here}"\fR, no longer confuses the parser. +.Sp +Previously a subparse was bracketed with generated \f(CW\*(C`(\*(C'\fR and \f(CW\*(C`)\*(C'\fR +tokens, so a spurious \f(CW\*(C`)\*(C'\fR would close the construct without doing the +normal subparse clean up, confusing the parser and possible causing an +assertion failure. +.Sp +Such constructs are now surrounded by artificial tokens that can't be +included in the source. [GH #15814] <https://github.com/Perl/perl5/issues/15814> +.IP \(bu 4 +Reference assignment of a sub, such as \f(CW\*(C`\e&foo = \e&bar;\*(C'\fR, silently did +nothing in the \f(CW\*(C`[GH #16987]|https://github.com/Perl/perl5/issues/16987\*(C'\fR] +.IP \(bu 4 +\&\fBsv_gets()\fR now recovers better if the target SV is modified by a signal +handler. [GH #16960] <https://github.com/Perl/perl5/issues/16960> +.IP \(bu 4 +\&\f(CW\*(C`readline @foo\*(C'\fR now evaluates \f(CW@foo\fR in scalar context. Previously +it would be evaluated in list context, and since \fBreadline()\fR pops only +one argument from the stack, the stack could underflow, or be left +with unexpected values on the stack. [GH #16929] <https://github.com/Perl/perl5/issues/16929> +.IP \(bu 4 +Parsing incomplete hex or binary literals was changed in 5.31.1 to treat such a +literal as just the 0, leaving the following \f(CW\*(C`x\*(C'\fR or \f(CW\*(C`b\*(C'\fR 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. +[GH #17010] <https://github.com/Perl/perl5/issues/17010> +.IP \(bu 4 +\&\fBeval_pv()\fR's \fIcroak_on_error\fR flag will now throw even if the exception is a +false overloaded value. +[GH #17036] <https://github.com/Perl/perl5/issues/17036> +.IP \(bu 4 +\&\f(CW\*(C`INIT\*(C'\fR blocks and the program itself are no longer run if \fBexit\fR\|(0) is called +within a \f(CW\*(C`BEGIN\*(C'\fR, \f(CW\*(C`UNITCHECK\*(C'\fR or \f(CW\*(C`CHECK\*(C'\fR block. +[GH #1537] <https://github.com/Perl/perl5/issues/1537> +.IP \(bu 4 +\&\f(CW\*(C`open my $fh, ">>+", undef\*(C'\fR now opens the temporary file in append mode: +writes will seek to the end of file before writing. +[GH #17058] <https://github.com/Perl/perl5/issues/17058> +.IP \(bu 4 +Fixed a SEGV when searching for the source of an uninitialized value warning on +an op whose subtree includes an OP_MULTIDEREF. +[GH #17088] <https://github.com/Perl/perl5/issues/17088> +.SH Obituary +.IX Header "Obituary" +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. +.PP +His passing leaves a hole in our hearts and in our communities and he +will be sorely missed. +.SH Acknowledgements +.IX Header "Acknowledgements" +Perl 5.32.0 represents approximately 13 months of development since Perl +5.30.0 and contains approximately 220,000 lines of changes across 1,800 +files from 89 authors. +.PP +Excluding auto-generated files, documentation and release tools, there were +approximately 140,000 lines of changes to 880 .pm, .t, .c and .h files. +.PP +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: +.PP +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, John Paul Adrian Glaubitz, 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, Shirakata Kentaro, Shlomi Fish, Sisyphus, +Slaven Rezic, Smylers, Stefan Seifert, Steve Hay, Steve Peters, Svyatoslav, +Thibault Duponchelle, Todd Rinaldo, Tomasz Konojacki, Tom Hukins, Tony Cook, +Unicode Consortium, VanL, Vickenty Fesunov, Vitali Peil, Yves Orton, Zefram. +.PP +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. +.PP +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. +.PP +For a more complete list of all of Perl's historical contributors, please +see the \fIAUTHORS\fR file in the Perl source distribution. +.SH "Reporting Bugs" +.IX Header "Reporting Bugs" +If you find what you think is a bug, you might check the perl bug database +at <https://github.com/Perl/perl5/issues>. There may also be information at +<http://www.perl.org/>, the Perl Home Page. +.PP +If you believe you have an unreported bug, please open an issue at +<https://github.com/Perl/perl5/issues>. Be sure to trim your bug down to a +tiny but sufficient test case. +.PP +If the bug you are reporting has security implications which make it +inappropriate to send to a public issue tracker, then see +"SECURITY VULNERABILITY CONTACT INFORMATION" in perlsec +for details of how to report the issue. +.SH "Give Thanks" +.IX Header "Give Thanks" +If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, +you can do so by running the \f(CW\*(C`perlthanks\*(C'\fR program: +.PP +.Vb 1 +\& perlthanks +.Ve +.PP +This will send an email to the Perl 5 Porters list with your show of thanks. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +The \fIChanges\fR file for an explanation of how to view exhaustive details on +what changed. +.PP +The \fIINSTALL\fR file for how to build Perl. +.PP +The \fIREADME\fR file for general stuff. +.PP +The \fIArtistic\fR and \fICopying\fR files for copyright information. |