diff options
Diffstat (limited to 'upstream/mageia-cauldron/man1/perl5240delta.1')
-rw-r--r-- | upstream/mageia-cauldron/man1/perl5240delta.1 | 1628 |
1 files changed, 1628 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man1/perl5240delta.1 b/upstream/mageia-cauldron/man1/perl5240delta.1 new file mode 100644 index 00000000..655e96df --- /dev/null +++ b/upstream/mageia-cauldron/man1/perl5240delta.1 @@ -0,0 +1,1628 @@ +.\" -*- 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 "PERL5240DELTA 1" +.TH PERL5240DELTA 1 2023-11-28 "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 +perl5240delta \- what is new for perl v5.24.0 +.SH DESCRIPTION +.IX Header "DESCRIPTION" +This document describes the differences between the 5.22.0 release and the +5.24.0 release. +.SH "Core Enhancements" +.IX Header "Core Enhancements" +.SS "Postfix dereferencing is no longer experimental" +.IX Subsection "Postfix dereferencing is no longer experimental" +Using the \f(CW\*(C`postderef\*(C'\fR and \f(CW\*(C`postderef_qq\*(C'\fR features no longer emits a +warning. Existing code that disables the \f(CW\*(C`experimental::postderef\*(C'\fR warning +category that they previously used will continue to work. The \f(CW\*(C`postderef\*(C'\fR +feature has no effect; all Perl code can use postfix dereferencing, +regardless of what feature declarations are in scope. The \f(CW5.24\fR feature +bundle now includes the \f(CW\*(C`postderef_qq\*(C'\fR feature. +.SS "Unicode 8.0 is now supported" +.IX Subsection "Unicode 8.0 is now supported" +For details on what is in this release, see +<http://www.unicode.org/versions/Unicode8.0.0/>. +.SS "perl will now croak when closing an in-place output file fails" +.IX Subsection "perl will now croak when closing an in-place output file fails" +Until now, failure to close the output file for an in-place edit was not +detected, meaning that the input file could be clobbered without the edit being +successfully completed. Now, when the output file cannot be closed +successfully, an exception is raised. +.ie n .SS "New ""\eb{lb}"" boundary in regular expressions" +.el .SS "New \f(CW\eb{lb}\fP boundary in regular expressions" +.IX Subsection "New b{lb} boundary in regular expressions" +\&\f(CW\*(C`lb\*(C'\fR stands for Line Break. It is a Unicode property +that determines where a line of text is suitable to break (typically so +that it can be output without overflowing the available horizontal +space). This capability has long been furnished by the +Unicode::LineBreak module, but now a light-weight, non-customizable +version that is suitable for many purposes is in core Perl. +.ie n .SS """qr/(?[ ])/"" now works in UTF\-8 locales" +.el .SS "\f(CWqr/(?[ ])/\fP now works in UTF\-8 locales" +.IX Subsection "qr/(?[ ])/ now works in UTF-8 locales" +Extended Bracketed Character Classes +now will successfully compile when \f(CW\*(C`use\ locale\*(C'\fR is in effect. The compiled +pattern will use standard Unicode rules. If the runtime locale is not a +UTF\-8 one, a warning is raised and standard Unicode rules are used +anyway. No tainting is done since the outcome does not actually depend +on the locale. +.ie n .SS "Integer shift (""<<"" and "">>"") now more explicitly defined" +.el .SS "Integer shift (\f(CW<<\fP and \f(CW>>\fP) now more explicitly defined" +.IX Subsection "Integer shift (<< and >>) now more explicitly defined" +Negative shifts are reverse shifts: left shift becomes right shift, +and right shift becomes left shift. +.PP +Shifting by the number of bits in a native integer (or more) is zero, +except when the "overshift" is right shifting a negative value under +\&\f(CW\*(C`use integer\*(C'\fR, in which case the result is \-1 (arithmetic shift). +.PP +Until now negative shifting and overshifting have been undefined +because they have relied on whatever the C implementation happens +to do. For example, for the overshift a common C behavior is +"modulo shift": +.PP +.Vb 1 +\& 1 >> 64 == 1 >> (64 % 64) == 1 >> 0 == 1 # Common C behavior. +\& +\& # And the same for <<, while Perl now produces 0 for both. +.Ve +.PP +Now these behaviors are well-defined under Perl, regardless of what +the underlying C implementation does. Note, however, that you are still +constrained by the native integer width: you need to know how far left you +can go. You can use for example: +.PP +.Vb 2 +\& use Config; +\& my $wordbits = $Config{uvsize} * 8; # Or $Config{uvsize} << 3. +.Ve +.PP +If you need a more bits on the left shift, you can use for example +the \f(CW\*(C`bigint\*(C'\fR pragma, or the \f(CW\*(C`Bit::Vector\*(C'\fR module from CPAN. +.SS "printf and sprintf now allow reordered precision arguments" +.IX Subsection "printf and sprintf now allow reordered precision arguments" +That is, \f(CW\*(C`sprintf \*(Aq|%.*2$d|\*(Aq, 2, 3\*(C'\fR now returns \f(CW\*(C`|002|\*(C'\fR. This extends +the existing reordering mechanism (which allows reordering for arguments +that are used as format fields, widths, and vector separators). +.ie n .SS "More fields provided to ""sigaction"" callback with ""SA_SIGINFO""" +.el .SS "More fields provided to \f(CWsigaction\fP callback with \f(CWSA_SIGINFO\fP" +.IX Subsection "More fields provided to sigaction callback with SA_SIGINFO" +When passing the \f(CW\*(C`SA_SIGINFO\*(C'\fR flag to sigaction, the +\&\f(CW\*(C`errno\*(C'\fR, \f(CW\*(C`status\*(C'\fR, \f(CW\*(C`uid\*(C'\fR, \f(CW\*(C`pid\*(C'\fR, \f(CW\*(C`addr\*(C'\fR and \f(CW\*(C`band\*(C'\fR fields are now +included in the hash passed to the handler, if supported by the +platform. +.SS "Hashbang redirection to Perl 6" +.IX Subsection "Hashbang redirection to Perl 6" +Previously perl would redirect to another interpreter if it found a +hashbang path unless the path contains "perl" (see perlrun). To improve +compatibility with Perl 6 this behavior has been extended to also redirect +if "perl" is followed by "6". +.SH Security +.IX Header "Security" +.ie n .SS "Set proper umask before calling mkstemp(3)" +.el .SS "Set proper umask before calling \f(CWmkstemp(3)\fP" +.IX Subsection "Set proper umask before calling mkstemp(3)" +In 5.22 perl started setting umask to 0600 before calling \f(CWmkstemp(3)\fR +and restoring it afterwards. This wrongfully tells \f(CWopen(2)\fR to strip +the owner read and write bits from the given mode before applying it, +rather than the intended negation of leaving only those bits in place. +.PP +Systems that use mode 0666 in \f(CWmkstemp(3)\fR (like old versions of +glibc) create a file with permissions 0066, leaving world read and +write permissions regardless of current umask. +.PP +This has been fixed by using umask 0177 instead. [perl #127322] +.SS "Fix out of boundary access in Win32 path handling" +.IX Subsection "Fix out of boundary access in Win32 path handling" +This is CVE\-2015\-8608. For more information see +[GH #15067] <https://github.com/Perl/perl5/issues/15067> +.SS "Fix loss of taint in canonpath" +.IX Subsection "Fix loss of taint in canonpath" +This is CVE\-2015\-8607. For more information see +[GH #15084] <https://github.com/Perl/perl5/issues/15084> +.ie n .SS "Avoid accessing uninitialized memory in win32 crypt()" +.el .SS "Avoid accessing uninitialized memory in win32 \f(CWcrypt()\fP" +.IX Subsection "Avoid accessing uninitialized memory in win32 crypt()" +Added validation that will detect both a short salt and invalid characters +in the salt. +[GH #15091] <https://github.com/Perl/perl5/issues/15091> +.ie n .SS "Remove duplicate environment variables from ""environ""" +.el .SS "Remove duplicate environment variables from \f(CWenviron\fP" +.IX Subsection "Remove duplicate environment variables from environ" +Previously, if an environment variable appeared more than once in +\&\f(CW\*(C`environ[]\*(C'\fR, \f(CW%ENV\fR would contain the last entry for that name, +while a typical \f(CWgetenv()\fR would return the first entry. We now +make sure \f(CW%ENV\fR contains the same as what \f(CW\*(C`getenv\*(C'\fR returns. +.PP +Second, we remove duplicates from \f(CW\*(C`environ[]\*(C'\fR, so if a setting +with that name is set in \f(CW%ENV\fR, we won't pass an unsafe value +to a child process. +.PP +[CVE\-2016\-2381] +.SH "Incompatible Changes" +.IX Header "Incompatible Changes" +.ie n .SS "The ""autoderef"" feature has been removed" +.el .SS "The \f(CWautoderef\fP feature has been removed" +.IX Subsection "The autoderef feature has been removed" +The experimental \f(CW\*(C`autoderef\*(C'\fR feature (which allowed calling \f(CW\*(C`push\*(C'\fR, +\&\f(CW\*(C`pop\*(C'\fR, \f(CW\*(C`shift\*(C'\fR, \f(CW\*(C`unshift\*(C'\fR, \f(CW\*(C`splice\*(C'\fR, \f(CW\*(C`keys\*(C'\fR, \f(CW\*(C`values\*(C'\fR, and \f(CW\*(C`each\*(C'\fR on +a scalar argument) has been deemed unsuccessful. It has now been removed; +trying to use the feature (or to disable the \f(CW\*(C`experimental::autoderef\*(C'\fR +warning it previously triggered) now yields an exception. +.ie n .SS "Lexical $_ has been removed" +.el .SS "Lexical \f(CW$_\fP has been removed" +.IX Subsection "Lexical $_ has been removed" +\&\f(CW\*(C`my $_\*(C'\fR was introduced in Perl 5.10, and subsequently caused much confusion +with no obvious solution. In Perl 5.18.0, it was made experimental on the +theory that it would either be removed or redesigned in a less confusing (but +backward-incompatible) way. Over the following years, no alternatives were +proposed. The feature has now been removed and will fail to compile. +.ie n .SS """qr/\eb{wb}/"" is now tailored to Perl expectations" +.el .SS "\f(CWqr/\eb{wb}/\fP is now tailored to Perl expectations" +.IX Subsection "qr/b{wb}/ is now tailored to Perl expectations" +This is now more suited to be a drop-in replacement for plain \f(CW\*(C`\eb\*(C'\fR, but +giving better results for parsing natural language. Previously it +strictly followed the current Unicode rules which calls for it to match +between each white space character. Now it doesn't generally match +within spans of white space, behaving like \f(CW\*(C`\eb\*(C'\fR does. See +"\eb{wb}" in perlrebackslash +.SS "Regular expression compilation errors" +.IX Subsection "Regular expression compilation errors" +Some regular expression patterns that had runtime errors now +don't compile at all. +.PP +Almost all Unicode properties using the \f(CW\*(C`\ep{}\*(C'\fR and \f(CW\*(C`\eP{}\*(C'\fR regular +expression pattern constructs are now checked for validity at pattern +compilation time, and invalid ones will cause the program to not +compile. In earlier releases, this check was often deferred until run +time. Whenever an error check is moved from run\- to compile time, +erroneous code is caught 100% of the time, whereas before it would only +get caught if and when the offending portion actually gets executed, +which for unreachable code might be never. +.ie n .SS """qr/\eN{}/"" now disallowed under ""use re ""strict""""" +.el .SS "\f(CWqr/\eN{}/\fP now disallowed under \f(CWuse re ""strict""\fP" +.IX Subsection "qr/N{}/ now disallowed under use re ""strict""" +An empty \f(CW\*(C`\eN{}\*(C'\fR makes no sense, but for backwards compatibility is +accepted as doing nothing, though a deprecation warning is raised by +default. But now this is a fatal error under the experimental feature +"'strict' mode" in re. +.SS "Nested declarations are now disallowed" +.IX Subsection "Nested declarations are now disallowed" +A \f(CW\*(C`my\*(C'\fR, \f(CW\*(C`our\*(C'\fR, or \f(CW\*(C`state\*(C'\fR declaration is no longer allowed inside +of another \f(CW\*(C`my\*(C'\fR, \f(CW\*(C`our\*(C'\fR, or \f(CW\*(C`state\*(C'\fR declaration. +.PP +For example, these are now fatal: +.PP +.Vb 2 +\& my ($x, my($y)); +\& our (my $x); +.Ve +.PP +[GH #14799] <https://github.com/Perl/perl5/issues/14799> +.PP +[GH #13548] <https://github.com/Perl/perl5/issues/13548> +.ie n .SS "The ""/\eC/"" character class has been removed." +.el .SS "The \f(CW/\eC/\fP character class has been removed." +.IX Subsection "The /C/ character class has been removed." +This regular expression character class was deprecated in v5.20.0 and has +produced a deprecation warning since v5.22.0. It is now a compile-time +error. If you need to examine the individual bytes that make up a +UTF8\-encoded character, then use \f(CWutf8::encode()\fR on the string (or a +copy) first. +.ie n .SS "chdir(\*(Aq\*(Aq) no longer chdirs home" +.el .SS "\f(CWchdir(\*(Aq\*(Aq)\fP no longer chdirs home" +.IX Subsection "chdir() no longer chdirs home" +Using \f(CWchdir(\*(Aq\*(Aq)\fR or \f(CWchdir(undef)\fR to chdir home has been deprecated since +perl v5.8, and will now fail. Use \f(CWchdir()\fR instead. +.SS "ASCII characters in variable names must now be all visible" +.IX Subsection "ASCII characters in variable names must now be all visible" +It was legal until now on ASCII platforms for variable names to contain +non-graphical ASCII control characters (ordinals 0 through 31, and 127, +which are the C0 controls and \f(CW\*(C`DELETE\*(C'\fR). This usage has been +deprecated since v5.20, and as of now causes a syntax error. The +variables these names referred to are special, reserved by Perl for +whatever use it may choose, now, or in the future. Each such variable +has an alternative way of spelling it. Instead of the single +non-graphic control character, a two character sequence beginning with a +caret is used, like \f(CW$^]\fR and \f(CW\*(C`${^GLOBAL_PHASE}\*(C'\fR. Details are at +perlvar. It remains legal, though unwise and deprecated (raising a +deprecation warning), to use certain non-graphic non-ASCII characters in +variables names when not under \f(CW\*(C`use\ utf8\*(C'\fR. No code should do this, +as all such variables are reserved by Perl, and Perl doesn't currently +define any of them (but could at any time, without notice). +.ie n .SS "An off by one issue in $Carp::MaxArgNums has been fixed" +.el .SS "An off by one issue in \f(CW$Carp::MaxArgNums\fP has been fixed" +.IX Subsection "An off by one issue in $Carp::MaxArgNums has been fixed" +\&\f(CW$Carp::MaxArgNums\fR is supposed to be the number of arguments to display. +Prior to this version, it was instead showing \f(CW$Carp::MaxArgNums\fR + 1 arguments, +contrary to the documentation. +.ie n .SS "Only blanks and tabs are now allowed within ""[...]"" within ""(?[...])""." +.el .SS "Only blanks and tabs are now allowed within \f(CW[...]\fP within \f(CW(?[...])\fP." +.IX Subsection "Only blanks and tabs are now allowed within [...] within (?[...])." +The experimental Extended Bracketed Character Classes can contain regular +bracketed character classes within them. These differ from regular ones in +that white space is generally ignored, unless escaped by preceding it with a +backslash. The white space that is ignored is now limited to just tab \f(CW\*(C`\et\*(C'\fR +and SPACE characters. Previously, it was any white space. See +"Extended Bracketed Character Classes" in perlrecharclass. +.SH Deprecations +.IX Header "Deprecations" +.ie n .SS "Using code points above the platform's ""IV_MAX"" is now deprecated" +.el .SS "Using code points above the platform's \f(CWIV_MAX\fP is now deprecated" +.IX Subsection "Using code points above the platform's IV_MAX is now deprecated" +Unicode defines code points in the range \f(CW\*(C`0..0x10FFFF\*(C'\fR. Some standards +at one time defined them up to 2**31 \- 1, but Perl has allowed them to +be as high as anything that will fit in a word on the platform being +used. However, use of those above the platform's \f(CW\*(C`IV_MAX\*(C'\fR is broken in +some constructs, notably \f(CW\*(C`tr///\*(C'\fR, regular expression patterns involving +quantifiers, and in some arithmetic and comparison operations, such as +being the upper limit of a loop. Now the use of such code points raises +a deprecation warning, unless that warning category is turned off. +\&\f(CW\*(C`IV_MAX\*(C'\fR is typically 2**31 \-1 on 32\-bit platforms, and 2**63\-1 on +64\-bit ones. +.SS "Doing bitwise operations on strings containing code points above 0xFF is deprecated" +.IX Subsection "Doing bitwise operations on strings containing code points above 0xFF is deprecated" +The string bitwise operators treat their operands as strings of bytes, +and values beyond 0xFF are nonsensical in this context. To operate on +encoded bytes, first encode the strings. To operate on code points' +numeric values, use \f(CW\*(C`split\*(C'\fR and \f(CW\*(C`map ord\*(C'\fR. In the future, this +warning will be replaced by an exception. +.ie n .SS "sysread(), syswrite(), recv() and send() are deprecated on :utf8 handles" +.el .SS "\f(CWsysread()\fP, \f(CWsyswrite()\fP, \f(CWrecv()\fP and \f(CWsend()\fP are deprecated on :utf8 handles" +.IX Subsection "sysread(), syswrite(), recv() and send() are deprecated on :utf8 handles" +The \f(CWsysread()\fR, \f(CWrecv()\fR, \f(CWsyswrite()\fR and \f(CWsend()\fR operators +are deprecated on handles that have the \f(CW\*(C`:utf8\*(C'\fR layer, either +explicitly, or implicitly, eg., with the \f(CW:encoding(UTF\-16LE)\fR layer. +.PP +Both \f(CWsysread()\fR and \f(CWrecv()\fR currently use only the \f(CW\*(C`:utf8\*(C'\fR flag for the +stream, ignoring the actual layers. Since \f(CWsysread()\fR and \f(CWrecv()\fR do no +UTF\-8 validation they can end up creating invalidly encoded scalars. +.PP +Similarly, \f(CWsyswrite()\fR and \f(CWsend()\fR use only the \f(CW\*(C`:utf8\*(C'\fR flag, otherwise +ignoring any layers. If the flag is set, both write the value UTF\-8 +encoded, even if the layer is some different encoding, such as the +example above. +.PP +Ideally, all of these operators would completely ignore the \f(CW\*(C`:utf8\*(C'\fR +state, working only with bytes, but this would result in silently +breaking existing code. To avoid this a future version of perl will +throw an exception when any of \f(CWsysread()\fR, \f(CWrecv()\fR, \f(CWsyswrite()\fR or \f(CWsend()\fR +are called on handle with the \f(CW\*(C`:utf8\*(C'\fR layer. +.SH "Performance Enhancements" +.IX Header "Performance Enhancements" +.IP \(bu 4 +The overhead of scope entry and exit has been considerably reduced, so +for example subroutine calls, loops and basic blocks are all faster now. +This empty function call now takes about a third less time to execute: +.Sp +.Vb 1 +\& sub f{} f(); +.Ve +.IP \(bu 4 +Many languages, such as Chinese, are caseless. Perl now knows about +most common ones, and skips much of the work when +a program tries to change case in them (like \f(CWucfirst()\fR) or match +caselessly (\f(CW\*(C`qr//i\*(C'\fR). This will speed up a program, such as a web +server, that can operate on multiple languages, while it is operating on a +caseless one. +.IP \(bu 4 +\&\f(CW\*(C`/fixed\-substr/\*(C'\fR has been made much faster. +.Sp +On platforms with a libc \f(CWmemchr()\fR implementation which makes good use of +underlying hardware support, patterns which include fixed substrings will now +often be much faster; for example with glibc on a recent x86_64 CPU, this: +.Sp +.Vb 2 +\& $s = "a" x 1000 . "wxyz"; +\& $s =~ /wxyz/ for 1..30000 +.Ve +.Sp +is now about 7 times faster. On systems with slow \f(CWmemchr()\fR, e.g. 32\-bit ARM +Raspberry Pi, there will be a small or little speedup. Conversely, some +pathological cases, such as \f(CW\*(C`"ab" x 1000 =~ /aa/\*(C'\fR will be slower now; up to 3 +times slower on the rPi, 1.5x slower on x86_64. +.IP \(bu 4 +Faster addition, subtraction and multiplication. +.Sp +Since 5.8.0, arithmetic became slower due to the need to support +64\-bit integers. To deal with 64\-bit integers, a lot more corner +cases need to be checked, which adds time. We now detect common +cases where there is no need to check for those corner cases, +and special-case them. +.IP \(bu 4 +Preincrement, predecrement, postincrement, and postdecrement have been +made faster by internally splitting the functions which handled multiple +cases into different functions. +.IP \(bu 4 +Creating Perl debugger data structures (see "Debugger Internals" in perldebguts) +for XSUBs and const subs has been removed. This removed one glob/scalar combo +for each unique \f(CW\*(C`.c\*(C'\fR file that XSUBs and const subs came from. On startup +(\f(CW\*(C`perl \-e"0"\*(C'\fR) about half a dozen glob/scalar debugger combos were created. +Loading XS modules created more glob/scalar combos. These things were +being created regardless of whether the perl debugger was being used, +and despite the fact that it can't debug C code anyway +.IP \(bu 4 +On Win32, \f(CW\*(C`stat\*(C'\fRing or \f(CW\*(C`\-X\*(C'\fRing a path, if the file or directory does not +exist, is now 3.5x faster than before. +.IP \(bu 4 +Single arguments in list assign are now slightly faster: +.Sp +.Vb 2 +\& ($x) = (...); +\& (...) = ($x); +.Ve +.IP \(bu 4 +Less peak memory is now used when compiling regular expression patterns. +.SH "Modules and Pragmata" +.IX Header "Modules and Pragmata" +.SS "Updated Modules and Pragmata" +.IX Subsection "Updated Modules and Pragmata" +.IP \(bu 4 +arybase has been upgraded from version 0.10 to 0.11. +.IP \(bu 4 +Attribute::Handlers has been upgraded from version 0.97 to 0.99. +.IP \(bu 4 +autodie has been upgraded from version 2.26 to 2.29. +.IP \(bu 4 +autouse has been upgraded from version 1.08 to 1.11. +.IP \(bu 4 +B has been upgraded from version 1.58 to 1.62. +.IP \(bu 4 +B::Deparse has been upgraded from version 1.35 to 1.37. +.IP \(bu 4 +base has been upgraded from version 2.22 to 2.23. +.IP \(bu 4 +Benchmark has been upgraded from version 1.2 to 1.22. +.IP \(bu 4 +bignum has been upgraded from version 0.39 to 0.42. +.IP \(bu 4 +bytes has been upgraded from version 1.04 to 1.05. +.IP \(bu 4 +Carp has been upgraded from version 1.36 to 1.40. +.IP \(bu 4 +Compress::Raw::Bzip2 has been upgraded from version 2.068 to 2.069. +.IP \(bu 4 +Compress::Raw::Zlib has been upgraded from version 2.068 to 2.069. +.IP \(bu 4 +Config::Perl::V has been upgraded from version 0.24 to 0.25. +.IP \(bu 4 +CPAN::Meta has been upgraded from version 2.150001 to 2.150005. +.IP \(bu 4 +CPAN::Meta::Requirements has been upgraded from version 2.132 to 2.140. +.IP \(bu 4 +CPAN::Meta::YAML has been upgraded from version 0.012 to 0.018. +.IP \(bu 4 +Data::Dumper has been upgraded from version 2.158 to 2.160. +.IP \(bu 4 +Devel::Peek has been upgraded from version 1.22 to 1.23. +.IP \(bu 4 +Devel::PPPort has been upgraded from version 3.31 to 3.32. +.IP \(bu 4 +Dumpvalue has been upgraded from version 1.17 to 1.18. +.IP \(bu 4 +DynaLoader has been upgraded from version 1.32 to 1.38. +.IP \(bu 4 +Encode has been upgraded from version 2.72 to 2.80. +.IP \(bu 4 +encoding has been upgraded from version 2.14 to 2.17. +.IP \(bu 4 +encoding::warnings has been upgraded from version 0.11 to 0.12. +.IP \(bu 4 +English has been upgraded from version 1.09 to 1.10. +.IP \(bu 4 +Errno has been upgraded from version 1.23 to 1.25. +.IP \(bu 4 +experimental has been upgraded from version 0.013 to 0.016. +.IP \(bu 4 +ExtUtils::CBuilder has been upgraded from version 0.280221 to 0.280225. +.IP \(bu 4 +ExtUtils::Embed has been upgraded from version 1.32 to 1.33. +.IP \(bu 4 +ExtUtils::MakeMaker has been upgraded from version 7.04_01 to 7.10_01. +.IP \(bu 4 +ExtUtils::ParseXS has been upgraded from version 3.28 to 3.31. +.IP \(bu 4 +ExtUtils::Typemaps has been upgraded from version 3.28 to 3.31. +.IP \(bu 4 +feature has been upgraded from version 1.40 to 1.42. +.IP \(bu 4 +fields has been upgraded from version 2.17 to 2.23. +.IP \(bu 4 +File::Find has been upgraded from version 1.29 to 1.34. +.IP \(bu 4 +File::Glob has been upgraded from version 1.24 to 1.26. +.IP \(bu 4 +File::Path has been upgraded from version 2.09 to 2.12_01. +.IP \(bu 4 +File::Spec has been upgraded from version 3.56 to 3.63. +.IP \(bu 4 +Filter::Util::Call has been upgraded from version 1.54 to 1.55. +.IP \(bu 4 +Getopt::Long has been upgraded from version 2.45 to 2.48. +.IP \(bu 4 +Hash::Util has been upgraded from version 0.18 to 0.19. +.IP \(bu 4 +Hash::Util::FieldHash has been upgraded from version 1.15 to 1.19. +.IP \(bu 4 +HTTP::Tiny has been upgraded from version 0.054 to 0.056. +.IP \(bu 4 +I18N::Langinfo has been upgraded from version 0.12 to 0.13. +.IP \(bu 4 +if has been upgraded from version 0.0604 to 0.0606. +.IP \(bu 4 +IO has been upgraded from version 1.35 to 1.36. +.IP \(bu 4 +IO-Compress has been upgraded from version 2.068 to 2.069. +.IP \(bu 4 +IPC::Open3 has been upgraded from version 1.18 to 1.20. +.IP \(bu 4 +IPC::SysV has been upgraded from version 2.04 to 2.06_01. +.IP \(bu 4 +List::Util has been upgraded from version 1.41 to 1.42_02. +.IP \(bu 4 +locale has been upgraded from version 1.06 to 1.08. +.IP \(bu 4 +Locale::Codes has been upgraded from version 3.34 to 3.37. +.IP \(bu 4 +Math::BigInt has been upgraded from version 1.9997 to 1.999715. +.IP \(bu 4 +Math::BigInt::FastCalc has been upgraded from version 0.31 to 0.40. +.IP \(bu 4 +Math::BigRat has been upgraded from version 0.2608 to 0.260802. +.IP \(bu 4 +Module::CoreList has been upgraded from version 5.20150520 to 5.20160320. +.IP \(bu 4 +Module::Metadata has been upgraded from version 1.000026 to 1.000031. +.IP \(bu 4 +mro has been upgraded from version 1.17 to 1.18. +.IP \(bu 4 +ODBM_File has been upgraded from version 1.12 to 1.14. +.IP \(bu 4 +Opcode has been upgraded from version 1.32 to 1.34. +.IP \(bu 4 +parent has been upgraded from version 0.232 to 0.234. +.IP \(bu 4 +Parse::CPAN::Meta has been upgraded from version 1.4414 to 1.4417. +.IP \(bu 4 +Perl::OSType has been upgraded from version 1.008 to 1.009. +.IP \(bu 4 +perlfaq has been upgraded from version 5.021009 to 5.021010. +.IP \(bu 4 +PerlIO::encoding has been upgraded from version 0.21 to 0.24. +.IP \(bu 4 +PerlIO::mmap has been upgraded from version 0.014 to 0.016. +.IP \(bu 4 +PerlIO::scalar has been upgraded from version 0.22 to 0.24. +.IP \(bu 4 +PerlIO::via has been upgraded from version 0.15 to 0.16. +.IP \(bu 4 +Pod::Functions has been upgraded from version 1.09 to 1.10. +.IP \(bu 4 +Pod::Perldoc has been upgraded from version 3.25 to 3.25_02. +.IP \(bu 4 +Pod::Simple has been upgraded from version 3.29 to 3.32. +.IP \(bu 4 +Pod::Usage has been upgraded from version 1.64 to 1.68. +.IP \(bu 4 +POSIX has been upgraded from version 1.53 to 1.65. +.IP \(bu 4 +Scalar::Util has been upgraded from version 1.41 to 1.42_02. +.IP \(bu 4 +SDBM_File has been upgraded from version 1.13 to 1.14. +.IP \(bu 4 +SelfLoader has been upgraded from version 1.22 to 1.23. +.IP \(bu 4 +Socket has been upgraded from version 2.018 to 2.020_03. +.IP \(bu 4 +Storable has been upgraded from version 2.53 to 2.56. +.IP \(bu 4 +strict has been upgraded from version 1.09 to 1.11. +.IP \(bu 4 +Term::ANSIColor has been upgraded from version 4.03 to 4.04. +.IP \(bu 4 +Term::Cap has been upgraded from version 1.15 to 1.17. +.IP \(bu 4 +Test has been upgraded from version 1.26 to 1.28. +.IP \(bu 4 +Test::Harness has been upgraded from version 3.35 to 3.36. +.IP \(bu 4 +Thread::Queue has been upgraded from version 3.05 to 3.08. +.IP \(bu 4 +threads has been upgraded from version 2.01 to 2.06. +.IP \(bu 4 +threads::shared has been upgraded from version 1.48 to 1.50. +.IP \(bu 4 +Tie::File has been upgraded from version 1.01 to 1.02. +.IP \(bu 4 +Tie::Scalar has been upgraded from version 1.03 to 1.04. +.IP \(bu 4 +Time::HiRes has been upgraded from version 1.9726 to 1.9732. +.IP \(bu 4 +Time::Piece has been upgraded from version 1.29 to 1.31. +.IP \(bu 4 +Unicode::Collate has been upgraded from version 1.12 to 1.14. +.IP \(bu 4 +Unicode::Normalize has been upgraded from version 1.18 to 1.25. +.IP \(bu 4 +Unicode::UCD has been upgraded from version 0.61 to 0.64. +.IP \(bu 4 +UNIVERSAL has been upgraded from version 1.12 to 1.13. +.IP \(bu 4 +utf8 has been upgraded from version 1.17 to 1.19. +.IP \(bu 4 +version has been upgraded from version 0.9909 to 0.9916. +.IP \(bu 4 +warnings has been upgraded from version 1.32 to 1.36. +.IP \(bu 4 +Win32 has been upgraded from version 0.51 to 0.52. +.IP \(bu 4 +Win32API::File has been upgraded from version 0.1202 to 0.1203. +.IP \(bu 4 +XS::Typemap has been upgraded from version 0.13 to 0.14. +.IP \(bu 4 +XSLoader has been upgraded from version 0.20 to 0.21. +.SH Documentation +.IX Header "Documentation" +.SS "Changes to Existing Documentation" +.IX Subsection "Changes to Existing Documentation" +\fIperlapi\fR +.IX Subsection "perlapi" +.IP \(bu 4 +The process of using undocumented globals has been documented, namely, that one +should send email to perl5\-porters@perl.org <mailto:perl5-porters@perl.org> +first to get the go-ahead for documenting and using an undocumented function or +global variable. +.PP +\fIperlcall\fR +.IX Subsection "perlcall" +.IP \(bu 4 +A number of cleanups have been made to perlcall, including: +.RS 4 +.IP \(bu 4 +use \f(CW\*(C`EXTEND(SP, n)\*(C'\fR and \f(CWPUSHs()\fR instead of \f(CWXPUSHs()\fR where applicable +and update prose to match +.IP \(bu 4 +add POPu, POPul and POPpbytex to the "complete list of POP macros" +and clarify the documentation for some of the existing entries, and +a note about side-effects +.IP \(bu 4 +add API documentation for POPu and POPul +.IP \(bu 4 +use ERRSV more efficiently +.IP \(bu 4 +approaches to thread-safety storage of SVs. +.RE +.RS 4 +.RE +.PP +\fIperlfunc\fR +.IX Subsection "perlfunc" +.IP \(bu 4 +The documentation of \f(CW\*(C`hex\*(C'\fR has been revised to clarify valid inputs. +.IP \(bu 4 +Better explain meaning of negative PIDs in \f(CW\*(C`waitpid\*(C'\fR. +[GH #15108] <https://github.com/Perl/perl5/issues/15108> +.IP \(bu 4 +General cleanup: there's more consistency now (in POD usage, grammar, code +examples), better practices in code examples (use of \f(CW\*(C`my\*(C'\fR, removal of bareword +filehandles, dropped usage of \f(CW\*(C`&\*(C'\fR when calling subroutines, ...), etc. +.PP +\fIperlguts\fR +.IX Subsection "perlguts" +.IP \(bu 4 +A new section has been added, "Dynamic Scope and the Context +Stack" in perlguts, which explains how the perl context stack works. +.PP +\fIperllocale\fR +.IX Subsection "perllocale" +.IP \(bu 4 +A stronger caution about using locales in threaded applications is +given. Locales are not thread-safe, and you can get wrong results or +even segfaults if you use them there. +.PP +\fIperlmodlib\fR +.IX Subsection "perlmodlib" +.IP \(bu 4 +We now recommend contacting the module-authors list or PAUSE in seeking +guidance on the naming of modules. +.PP +\fIperlop\fR +.IX Subsection "perlop" +.IP \(bu 4 +The documentation of \f(CW\*(C`qx//\*(C'\fR now describes how \f(CW$?\fR is affected. +.PP +\fIperlpolicy\fR +.IX Subsection "perlpolicy" +.IP \(bu 4 +This note has been added to perlpolicy: +.Sp +.Vb 3 +\& While civility is required, kindness is encouraged; if you have any +\& doubt about whether you are being civil, simply ask yourself, "Am I +\& being kind?" and aspire to that. +.Ve +.PP +\fIperlreftut\fR +.IX Subsection "perlreftut" +.IP \(bu 4 +Fix some examples to be strict clean. +.PP +\fIperlrebackslash\fR +.IX Subsection "perlrebackslash" +.IP \(bu 4 +Clarify that in languages like Japanese and Thai, dictionary lookup +is required to determine word boundaries. +.PP +\fIperlsub\fR +.IX Subsection "perlsub" +.IP \(bu 4 +Updated to note that anonymous subroutines can have signatures. +.PP +\fIperlsyn\fR +.IX Subsection "perlsyn" +.IP \(bu 4 +Fixed a broken example where \f(CW\*(C`=\*(C'\fR was used instead of +\&\f(CW\*(C`==\*(C'\fR in conditional in do/while example. +.PP +\fIperltie\fR +.IX Subsection "perltie" +.IP \(bu 4 +The usage of \f(CW\*(C`FIRSTKEY\*(C'\fR and \f(CW\*(C`NEXTKEY\*(C'\fR has been clarified. +.PP +\fIperlunicode\fR +.IX Subsection "perlunicode" +.IP \(bu 4 +Discourage use of 'In' as a prefix signifying the Unicode Block property. +.PP +\fIperlvar\fR +.IX Subsection "perlvar" +.IP \(bu 4 +The documentation of \f(CW$@\fR was reworded to clarify that it is not just for +syntax errors in \f(CW\*(C`eval\*(C'\fR. +[GH #14572] <https://github.com/Perl/perl5/issues/14572> +.IP \(bu 4 +The specific true value of \f(CW$!{E...}\fR is now documented, noting that it is +subject to change and not guaranteed. +.IP \(bu 4 +Use of \f(CW$OLD_PERL_VERSION\fR is now discouraged. +.PP +\fIperlxs\fR +.IX Subsection "perlxs" +.IP \(bu 4 +The documentation of \f(CW\*(C`PROTOTYPES\*(C'\fR has been corrected; they are \fIdisabled\fR +by default, not \fIenabled\fR. +.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 +\&\f(CW%s\fR must not be a named sequence in transliteration operator +.IP \(bu 4 +Can't find Unicode property definition "%s" in regex; +.IP \(bu 4 +Can't redeclare "%s" in "%s" +.IP \(bu 4 +Character following \ep must be '{' or a single-character Unicode property name in regex; +.IP \(bu 4 +Empty \e%c in regex; marked by <\-\- HERE in m/%s/ +.IP \(bu 4 +Illegal user-defined property name +.IP \(bu 4 +Invalid number '%s' for \-C option. +.IP \(bu 4 +Sequence (?... not terminated in regex; marked by <\-\-\ HERE in m/%s/ +.IP \(bu 4 +Sequence (?P<... not terminated in regex; marked by <\-\- HERE in m/%s/ +.IP \(bu 4 +Sequence (?P>... not terminated in regex; marked by <\-\- HERE in m/%s/ +.PP +\fINew Warnings\fR +.IX Subsection "New Warnings" +.IP \(bu 4 +Assuming NOT a POSIX class since \f(CW%s\fR in regex; marked by <\-\- HERE in m/%s/ +.IP \(bu 4 +%s() is deprecated on :utf8 handles +.SS "Changes to Existing Diagnostics" +.IX Subsection "Changes to Existing Diagnostics" +.IP \(bu 4 +Accessing the \f(CW\*(C`IO\*(C'\fR part of a glob as \f(CW\*(C`FILEHANDLE\*(C'\fR instead of \f(CW\*(C`IO\*(C'\fR is no +longer deprecated. It is discouraged to encourage uniformity (so that, for +example, one can grep more easily) but it will not be removed. +[GH #15105] <https://github.com/Perl/perl5/issues/15105> +.IP \(bu 4 +The diagnostic \f(CW\*(C`Hexadecimal float: internal error\*(C'\fR has been changed to +\&\f(CW\*(C`Hexadecimal float: internal error (%s)\*(C'\fR to include more information. +.IP \(bu 4 +Can't modify non-lvalue subroutine call of &%s +.Sp +This error now reports the name of the non-lvalue subroutine you attempted to +use as an lvalue. +.IP \(bu 4 +When running out of memory during an attempt the increase the stack +size, previously, perl would die using the cryptic message +\&\f(CW\*(C`panic: av_extend_guts() negative count (\-9223372036854775681)\*(C'\fR. +This has been fixed to show the prettier message: +Out of memory during stack extend +.SH "Configuration and Compilation" +.IX Header "Configuration and Compilation" +.IP \(bu 4 +\&\f(CW\*(C`Configure\*(C'\fR now acts as if the \f(CW\*(C`\-O\*(C'\fR option is always passed, allowing command +line options to override saved configuration. This should eliminate confusion +when command line options are ignored for no obvious reason. \f(CW\*(C`\-O\*(C'\fR is now +permitted, but ignored. +.IP \(bu 4 +Bison 3.0 is now supported. +.IP \(bu 4 +\&\fIConfigure\fR no longer probes for \fIlibnm\fR by default. Originally +this was the "New Math" library, but the name has been re-used by the +GNOME NetworkManager. +[GH #15115] <https://github.com/Perl/perl5/issues/15115> +.IP \(bu 4 +Added \fIConfigure\fR probes for \f(CW\*(C`newlocale\*(C'\fR, \f(CW\*(C`freelocale\*(C'\fR, and \f(CW\*(C`uselocale\*(C'\fR. +.IP \(bu 4 +\&\f(CW\*(C`PPPort.so/PPPort.dll\*(C'\fR no longer get installed, as they are +not used by \f(CW\*(C`PPPort.pm\*(C'\fR, only by its test files. +.IP \(bu 4 +It is now possible to specify which compilation date to show on +\&\f(CW\*(C`perl \-V\*(C'\fR output, by setting the macro \f(CW\*(C`PERL_BUILD_DATE\*(C'\fR. +.IP \(bu 4 +Using the \f(CW\*(C`NO_HASH_SEED\*(C'\fR define in combination with the default hash algorithm +\&\f(CW\*(C`PERL_HASH_FUNC_ONE_AT_A_TIME_HARD\*(C'\fR resulted in a fatal error while compiling +the interpreter, since Perl 5.17.10. This has been fixed. +.IP \(bu 4 +\&\fIConfigure\fR should handle spaces in paths a little better. +.IP \(bu 4 +No longer generate EBCDIC POSIX-BC tables. We don't believe anyone is +using Perl and POSIX-BC at this time, and by not generating these tables +it saves time during development, and makes the resulting tar ball smaller. +.IP \(bu 4 +The GNU Make makefile for Win32 now supports parallel builds. [perl #126632] +.IP \(bu 4 +You can now build perl with MSVC++ on Win32 using GNU Make. [perl #126632] +.IP \(bu 4 +The Win32 miniperl now has a real \f(CW\*(C`getcwd\*(C'\fR which increases build performance +resulting in \f(CWgetcwd()\fR being 605x faster in Win32 miniperl. +.IP \(bu 4 +Configure now takes \f(CW\*(C`\-Dusequadmath\*(C'\fR into account when calculating the +\&\f(CW\*(C`alignbytes\*(C'\fR configuration variable. Previously the mis-calculated +\&\f(CW\*(C`alignbytes\*(C'\fR could cause alignment errors on debugging builds. [perl +#127894] +.SH Testing +.IX Header "Testing" +.IP \(bu 4 +A new test (\fIt/op/aassign.t\fR) has been added to test the list assignment operator +\&\f(CW\*(C`OP_AASSIGN\*(C'\fR. +.IP \(bu 4 +Parallel building has been added to the dmake \f(CW\*(C`makefile.mk\*(C'\fR makefile. All +Win32 compilers are supported. +.SH "Platform Support" +.IX Header "Platform Support" +.SS "Platform-Specific Notes" +.IX Subsection "Platform-Specific Notes" +.IP AmigaOS 4 +.IX Item "AmigaOS" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +The AmigaOS port has been reintegrated into the main tree, based off of +Perl 5.22.1. +.RE +.RS 4 +.RE +.IP Cygwin 4 +.IX Item "Cygwin" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Tests are more robust against unusual cygdrive prefixes. +[GH #15076] <https://github.com/Perl/perl5/issues/15076> +.RE +.RS 4 +.RE +.IP EBCDIC 4 +.IX Item "EBCDIC" +.RS 4 +.PD 0 +.IP "UTF-EBCDIC extended" 4 +.IX Item "UTF-EBCDIC extended" +.PD +UTF-EBCDIC is like UTF\-8, but for EBCDIC platforms. It now has been +extended so that it can represent code points up to 2 ** 64 \- 1 on +platforms with 64\-bit words. This brings it into parity with UTF\-8. +This enhancement requires an incompatible change to the representation +of code points in the range 2 ** 30 to 2 ** 31 \-1 (the latter was the +previous maximum representable code point). This means that a file that +contains one of these code points, written out with previous versions of +perl cannot be read in, without conversion, by a perl containing this +change. We do not believe any such files are in existence, but if you +do have one, submit a ticket at perlbug@perl.org <mailto:perlbug@perl.org>, +and we will write a conversion script for you. +.ie n .IP "EBCDIC cmp() and sort() fixed for UTF-EBCDIC strings" 4 +.el .IP "EBCDIC \f(CWcmp()\fR and \f(CWsort()\fR fixed for UTF-EBCDIC strings" 4 +.IX Item "EBCDIC cmp() and sort() fixed for UTF-EBCDIC strings" +Comparing two strings that were both encoded in UTF\-8 (or more +precisely, UTF-EBCDIC) did not work properly until now. Since \f(CWsort()\fR +uses \f(CWcmp()\fR, this fixes that as well. +.ie n .IP "EBCDIC ""tr///"" and ""y///"" fixed for ""\eN{}"", and ""use\ utf8"" ranges" 4 +.el .IP "EBCDIC \f(CWtr///\fR and \f(CWy///\fR fixed for \f(CW\eN{}\fR, and \f(CWuse\ utf8\fR ranges" 4 +.IX Item "EBCDIC tr/// and y/// fixed for N{}, and use utf8 ranges" +Perl v5.22 introduced the concept of portable ranges to regular +expression patterns. A portable range matches the same set of +characters no matter what platform is being run on. This concept is now +extended to \f(CW\*(C`tr///\*(C'\fR. See +\&\f(CW\*(C`tr///\*(C'\fR. +.Sp +There were also some problems with these operations under \f(CW\*(C`use\ utf8\*(C'\fR, which are now fixed +.RE +.RS 4 +.RE +.IP FreeBSD 4 +.IX Item "FreeBSD" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Use the \f(CWfdclose()\fR function from FreeBSD if it is available. +[GH #15082] <https://github.com/Perl/perl5/issues/15082> +.RE +.RS 4 +.RE +.IP IRIX 4 +.IX Item "IRIX" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Under some circumstances IRIX stdio \f(CWfgetc()\fR and \f(CWfread()\fR set the errno to +\&\f(CW\*(C`ENOENT\*(C'\fR, which made no sense according to either IRIX or POSIX docs. Errno +is now cleared in such cases. +[GH #14557] <https://github.com/Perl/perl5/issues/14557> +.IP \(bu 4 +Problems when multiplying long doubles by infinity have been fixed. +[GH #14993] <https://github.com/Perl/perl5/issues/14993> +.RE +.RS 4 +.RE +.IP "MacOS X" 4 +.IX Item "MacOS X" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Until now OS X builds of perl have specified a link target of 10.3 (Panther, +2003) but have not specified a compiler target. From now on, builds of perl on +OS X 10.6 or later (Snow Leopard, 2008) by default capture the current OS X +version and specify that as the explicit build target in both compiler and +linker flags, thus preserving binary compatibility for extensions built later +regardless of changes in OS X, SDK, or compiler and linker versions. To +override the default value used in the build and preserved in the flags, +specify \f(CW\*(C`export MACOSX_DEPLOYMENT_TARGET=10.N\*(C'\fR before configuring and building +perl, where 10.N is the version of OS X you wish to target. In OS X 10.5 or +earlier there is no change to the behavior present when those systems were +current; the link target is still OS X 10.3 and there is no explicit compiler +target. +.IP \(bu 4 +Builds with both \-DDEBUGGING and threading enabled would fail with a +"panic: free from wrong pool" error when built or tested from Terminal +on OS X. This was caused by perl's internal management of the +environment conflicting with an atfork handler using the libc +\&\f(CWsetenv()\fR function to update the environment. +.Sp +Perl now uses \f(CWsetenv()\fR/\f(CWunsetenv()\fR to update the environment on OS X. +[GH #14955] <https://github.com/Perl/perl5/issues/14955> +.RE +.RS 4 +.RE +.IP Solaris 4 +.IX Item "Solaris" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +All Solaris variants now build a shared libperl +.Sp +Solaris and variants like OpenIndiana now always build with the shared +Perl library (Configure \-Duseshrplib). This was required for the +OpenIndiana builds, but this has also been the setting for Oracle/Sun +Perl builds for several years. +.RE +.RS 4 +.RE +.IP Tru64 4 +.IX Item "Tru64" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Workaround where Tru64 balks when prototypes are listed as +\&\f(CW\*(C`PERL_STATIC_INLINE\*(C'\fR, but where the test is build with +\&\f(CW\*(C`\-DPERL_NO_INLINE_FUNCTIONS\*(C'\fR. +.RE +.RS 4 +.RE +.IP VMS 4 +.IX Item "VMS" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +On VMS, the math function prototypes in \f(CW\*(C`math.h\*(C'\fR are now visible under C++. +Now building the POSIX extension with C++ will no longer crash. +.IP \(bu 4 +VMS has had \f(CW\*(C`setenv\*(C'\fR/\f(CW\*(C`unsetenv\*(C'\fR since v7.0 (released in 1996), +\&\f(CW\*(C`Perl_vmssetenv\*(C'\fR now always uses \f(CW\*(C`setenv\*(C'\fR/\f(CW\*(C`unsetenv\*(C'\fR. +.IP \(bu 4 +Perl now implements its own \f(CW\*(C`killpg\*(C'\fR by scanning for processes in the +specified process group, which may not mean exactly the same thing as a Unix +process group, but allows us to send a signal to a parent (or master) process +and all of its sub-processes. At the perl level, this means we can now send a +negative pid like so: +.Sp +.Vb 1 +\& kill SIGKILL, \-$pid; +.Ve +.Sp +to signal all processes in the same group as \f(CW$pid\fR. +.IP \(bu 4 +For those \f(CW%ENV\fR elements based on the CRTL environ array, we've always +preserved case when setting them but did look-ups only after upcasing the +key first, which made lower\- or mixed-case entries go missing. This problem +has been corrected by making \f(CW%ENV\fR elements derived from the environ array +case-sensitive on look-up as well as case-preserving on store. +.IP \(bu 4 +Environment look-ups for \f(CW\*(C`PERL5LIB\*(C'\fR and \f(CW\*(C`PERLLIB\*(C'\fR previously only +considered logical names, but now consider all sources of \f(CW%ENV\fR as +determined by \f(CW\*(C`PERL_ENV_TABLES\*(C'\fR and as documented in "%ENV" in perlvms. +.IP \(bu 4 +The minimum supported version of VMS is now v7.3\-2, released in 2003. As a +side effect of this change, VAX is no longer supported as the terminal +release of OpenVMS VAX was v7.3 in 2001. +.RE +.RS 4 +.RE +.IP Win32 4 +.IX Item "Win32" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +A new build option \f(CW\*(C`USE_NO_REGISTRY\*(C'\fR has been added to the makefiles. This +option is off by default, meaning the default is to do Windows registry +lookups. This option stops Perl from looking inside the registry for anything. +For what values are looked up in the registry see perlwin32. Internally, in +C, the name of this option is \f(CW\*(C`WIN32_NO_REGISTRY\*(C'\fR. +.IP \(bu 4 +The behavior of Perl using \f(CW\*(C`HKEY_CURRENT_USER\eSoftware\ePerl\*(C'\fR and +\&\f(CW\*(C`HKEY_LOCAL_MACHINE\eSoftware\ePerl\*(C'\fR to lookup certain values, including \f(CW%ENV\fR +vars starting with \f(CW\*(C`PERL\*(C'\fR has changed. Previously, the 2 keys were checked +for entries at all times through the perl process's life time even if +they did not +exist. For performance reasons, now, if the root key (i.e. +\&\f(CW\*(C`HKEY_CURRENT_USER\eSoftware\ePerl\*(C'\fR or \f(CW\*(C`HKEY_LOCAL_MACHINE\eSoftware\ePerl\*(C'\fR) does +not exist at process start time, it will not be checked again for \f(CW%ENV\fR +override entries for the remainder of the perl process's life. This more +closely matches Unix behavior in that the environment is copied or inherited +on startup and changing the variable in the parent process or another process +or editing \fI.bashrc\fR will not change the environmental variable in other +existing, running, processes. +.IP \(bu 4 +One glob fetch was removed for each \f(CW\*(C`\-X\*(C'\fR or \f(CW\*(C`stat\*(C'\fR call whether done from +Perl code or internally from Perl's C code. The glob being looked up was +\&\f(CW\*(C`${^WIN32_SLOPPY_STAT}\*(C'\fR which is a special variable. This makes \f(CW\*(C`\-X\*(C'\fR and +\&\f(CW\*(C`stat\*(C'\fR slightly faster. +.IP \(bu 4 +During miniperl's process startup, during the build process, 4 to 8 IO calls +related to the process starting \fI.pl\fR and the \fIbuildcustomize.pl\fR file were +removed from the code opening and executing the first 1 or 2 \fI.pl\fR files. +.IP \(bu 4 +Builds using Microsoft Visual C++ 2003 and earlier no longer produce +an "INTERNAL COMPILER ERROR" message. [perl #126045] +.IP \(bu 4 +Visual C++ 2013 builds will now execute on XP and higher. Previously they would +only execute on Vista and higher. +.IP \(bu 4 +You can now build perl with GNU Make and GCC. [perl #123440] +.IP \(bu 4 +\&\f(CW\*(C`truncate($filename, $size)\*(C'\fR now works for files over 4GB in size. +[perl #125347] +.IP \(bu 4 +Parallel building has been added to the dmake \f(CW\*(C`makefile.mk\*(C'\fR makefile. All +Win32 compilers are supported. +.IP \(bu 4 +Building a 64\-bit perl with a 64\-bit GCC but a 32\-bit gmake would +result in an invalid \f(CW$Config{archname}\fR for the resulting perl. +[perl #127584] +.IP \(bu 4 +Errors set by Winsock functions are now put directly into \f(CW$^E\fR, and the +relevant \f(CW\*(C`WSAE*\*(C'\fR error codes are now exported from the Errno and POSIX +modules for testing this against. +.Sp +The previous behavior of putting the errors (converted to POSIX-style \f(CW\*(C`E*\*(C'\fR +error codes since Perl 5.20.0) into \f(CW$!\fR was buggy due to the non-equivalence +of like-named Winsock and POSIX error constants, a relationship between which +has unfortunately been established in one way or another since Perl 5.8.0. +.Sp +The new behavior provides a much more robust solution for checking Winsock +errors in portable software without accidentally matching POSIX tests that were +intended for other OSes and may have different meanings for Winsock. +.Sp +The old behavior is currently retained, warts and all, for backwards +compatibility, but users are encouraged to change any code that tests \f(CW$!\fR +against \f(CW\*(C`E*\*(C'\fR constants for Winsock errors to instead test \f(CW$^E\fR against +\&\f(CW\*(C`WSAE*\*(C'\fR constants. After a suitable deprecation period, the old behavior may +be removed, leaving \f(CW$!\fR unchanged after Winsock function calls, to avoid any +possible confusion over which error variable to check. +.RE +.RS 4 +.RE +.IP ppc64el 4 +.IX Item "ppc64el" +.RS 4 +.PD 0 +.IP "floating point" 4 +.IX Item "floating point" +.PD +The floating point format of ppc64el (Debian naming for little-endian +PowerPC) is now detected correctly. +.RE +.RS 4 +.RE +.SH "Internal Changes" +.IX Header "Internal Changes" +.IP \(bu 4 +The implementation of perl's context stack system, and its internal API, +have been heavily reworked. Note that no significant changes have been +made to any external APIs, but XS code which relies on such internal +details may need to be fixed. The main changes are: +.RS 4 +.IP \(bu 4 +The \f(CWPUSHBLOCK()\fR, \f(CWPOPSUB()\fR etc. macros have been replaced with static +inline functions such as \f(CWcx_pushblock()\fR, \f(CWcx_popsub()\fR etc. These use +function args rather than implicitly relying on local vars such as +\&\f(CW\*(C`gimme\*(C'\fR and \f(CW\*(C`newsp\*(C'\fR being available. Also their functionality has +changed: in particular, \f(CWcx_popblock()\fR no longer decrements +\&\f(CW\*(C`cxstack_ix\*(C'\fR. The ordering of the steps in the \f(CW\*(C`pp_leave*\*(C'\fR functions +involving \f(CWcx_popblock()\fR, \f(CWcx_popsub()\fR etc. has changed. See the new +documentation, "Dynamic Scope and the Context Stack" in perlguts, for +details on how to use them. +.IP \(bu 4 +Various macros, which now consistently have a CX_ prefix, have been added: +.Sp +.Vb 1 +\& CX_CUR(), CX_LEAVE_SCOPE(), CX_POP() +.Ve +.Sp +or renamed: +.Sp +.Vb 1 +\& CX_POP_SAVEARRAY(), CX_DEBUG(), CX_PUSHSUBST(), CX_POPSUBST() +.Ve +.IP \(bu 4 +\&\f(CWcx_pushblock()\fR now saves \f(CW\*(C`PL_savestack_ix\*(C'\fR and \f(CW\*(C`PL_tmps_floor\*(C'\fR, so +\&\f(CW\*(C`pp_enter*\*(C'\fR and \f(CW\*(C`pp_leave*\*(C'\fR no longer do +.Sp +.Vb 1 +\& ENTER; SAVETMPS; ....; LEAVE +.Ve +.IP \(bu 4 +\&\f(CWcx_popblock()\fR now also restores \f(CW\*(C`PL_curpm\*(C'\fR. +.IP \(bu 4 +In \f(CWdounwind()\fR for every context type, the current savestack frame is +now processed before each context is popped; formerly this was only done +for sub-like context frames. This action has been removed from +\&\f(CWcx_popsub()\fR and placed into its own macro, \f(CWCX_LEAVE_SCOPE(cx)\fR, which +must be called before \f(CWcx_popsub()\fR etc. +.Sp +\&\f(CWdounwind()\fR now also does a \f(CWcx_popblock()\fR on the last popped frame +(formerly it only did the \f(CWcx_popsub()\fR etc. actions on each frame). +.IP \(bu 4 +The temps stack is now freed on scope exit; previously, temps created +during the last statement of a block wouldn't be freed until the next +\&\f(CW\*(C`nextstate\*(C'\fR following the block (apart from an existing hack that did +this for recursive subs in scalar context); and in something like +\&\f(CW\*(C`f(g())\*(C'\fR, the temps created by the last statement in \f(CWg()\fR would +formerly not be freed until the statement following the return from +\&\f(CWf()\fR. +.IP \(bu 4 +Most values that were saved on the savestack on scope entry are now +saved in suitable new fields in the context struct, and saved and +restored directly by \f(CWcx_pushfoo()\fR and \f(CWcx_popfoo()\fR, which is much +faster. +.IP \(bu 4 +Various context struct fields have been added, removed or modified. +.IP \(bu 4 +The handling of \f(CW@_\fR in \f(CWcx_pushsub()\fR and \f(CWcx_popsub()\fR has been +considerably tidied up, including removing the \f(CW\*(C`argarray\*(C'\fR field from the +context struct, and extracting out some common (but rarely used) code into +a separate function, \f(CWclear_defarray()\fR. Also, useful subsets of +\&\f(CWcx_popsub()\fR which had been unrolled in places like \f(CW\*(C`pp_goto\*(C'\fR have been +gathered into the new functions \f(CWcx_popsub_args()\fR and +\&\f(CWcx_popsub_common()\fR. +.IP \(bu 4 +\&\f(CW\*(C`pp_leavesub\*(C'\fR and \f(CW\*(C`pp_leavesublv\*(C'\fR now use the same function as the rest +of the \f(CW\*(C`pp_leave*\*(C'\fR's to process return args. +.IP \(bu 4 +\&\f(CW\*(C`CXp_FOR_PAD\*(C'\fR and \f(CW\*(C`CXp_FOR_GV\*(C'\fR flags have been added, and +\&\f(CW\*(C`CXt_LOOP_FOR\*(C'\fR has been split into \f(CW\*(C`CXt_LOOP_LIST\*(C'\fR, \f(CW\*(C`CXt_LOOP_ARY\*(C'\fR. +.IP \(bu 4 +Some variables formerly declared by \f(CW\*(C`dMULTICALL\*(C'\fR (but not documented) have +been removed. +.RE +.RS 4 +.RE +.IP \(bu 4 +The obscure \f(CW\*(C`PL_timesbuf\*(C'\fR variable, effectively a vestige of Perl 1, has +been removed. It was documented as deprecated in Perl 5.20, with a statement +that it would be removed early in the 5.21.x series; that has now finally +happened. +[GH #13632] <https://github.com/Perl/perl5/issues/13632> +.IP \(bu 4 +An unwarranted assertion in \f(CWPerl_newATTRSUB_x()\fR has been removed. If +a stub subroutine +definition with a prototype has been seen, then any subsequent stub (or +definition) of the same subroutine with an attribute was causing an assertion +failure because of a null pointer. +[GH #15081] <https://github.com/Perl/perl5/issues/15081> +.IP \(bu 4 +\&\f(CW\*(C`::\*(C'\fR has been replaced by \f(CW\*(C`_\|_\*(C'\fR in \f(CW\*(C`ExtUtils::ParseXS\*(C'\fR, like it's done for +parameters/return values. This is more consistent, and simplifies writing XS +code wrapping C++ classes into a nested Perl namespace (it requires only +a typedef for \f(CW\*(C`Foo_\|_Bar\*(C'\fR rather than two, one for \f(CW\*(C`Foo_Bar\*(C'\fR and the other +for \f(CW\*(C`Foo::Bar\*(C'\fR). +.IP \(bu 4 +The \f(CWto_utf8_case()\fR function is now deprecated. Instead use +\&\f(CW\*(C`toUPPER_utf8\*(C'\fR, \f(CW\*(C`toTITLE_utf8\*(C'\fR, \f(CW\*(C`toLOWER_utf8\*(C'\fR, and \f(CW\*(C`toFOLD_utf8\*(C'\fR. +(See <http://nntp.perl.org/group/perl.perl5.porters/233287>.) +.IP \(bu 4 +Perl core code and the threads extension have been annotated so that, +if Perl is configured to use threads, then during compile-time clang (3.6 +or later) will warn about suspicious uses of mutexes. +See <http://clang.llvm.org/docs/ThreadSafetyAnalysis.html> for more +information. +.IP \(bu 4 +The \f(CWsignbit()\fR emulation has been enhanced. This will help older +and/or more exotic platforms or configurations. +.IP \(bu 4 +Most EBCDIC-specific code in the core has been unified with non-EBCDIC +code, to avoid repetition and make maintenance easier. +.IP \(bu 4 +MSWin32 code for \f(CW$^X\fR has been moved out of the \fIwin32\fR directory to +\&\fIcaretx.c\fR, where other operating systems set that variable. +.IP \(bu 4 +\&\f(CWsv_ref()\fR is now part of the API. +.IP \(bu 4 +"sv_backoff" in perlapi had its return type changed from \f(CW\*(C`int\*(C'\fR to \f(CW\*(C`void\*(C'\fR. It +previously has always returned \f(CW0\fR since Perl 5.000 stable but that was +undocumented. Although \f(CW\*(C`sv_backoff\*(C'\fR is marked as public API, XS code is not +expected to be impacted since the proper API call would be through public API +\&\f(CW\*(C`sv_setsv(sv, &PL_sv_undef)\*(C'\fR, or quasi-public \f(CW\*(C`SvOOK_off\*(C'\fR, or non-public +\&\f(CW\*(C`SvOK_off\*(C'\fR calls, and the return value of \f(CW\*(C`sv_backoff\*(C'\fR was previously a +meaningless constant that can be rewritten as \f(CW\*(C`(sv_backoff(sv),0)\*(C'\fR. +.IP \(bu 4 +The \f(CW\*(C`EXTEND\*(C'\fR and \f(CW\*(C`MEXTEND\*(C'\fR macros have been improved to avoid various issues +with integer truncation and wrapping. In particular, some casts formerly used +within the macros have been removed. This means for example that passing an +unsigned \f(CW\*(C`nitems\*(C'\fR argument is likely to raise a compiler warning now +(it's always been documented to require a signed value; formerly int, +lately SSize_t). +.IP \(bu 4 +\&\f(CW\*(C`PL_sawalias\*(C'\fR and \f(CW\*(C`GPf_ALIASED_SV\*(C'\fR have been removed. +.IP \(bu 4 +\&\f(CW\*(C`GvASSIGN_GENERATION\*(C'\fR and \f(CW\*(C`GvASSIGN_GENERATION_set\*(C'\fR have been removed. +.SH "Selected Bug Fixes" +.IX Header "Selected Bug Fixes" +.IP \(bu 4 +It now works properly to specify a user-defined property, such as +.Sp +.Vb 1 +\& qr/\ep{mypkg1::IsMyProperty}/i +.Ve +.Sp +with \f(CW\*(C`/i\*(C'\fR caseless matching, an explicit package name, and +\&\fIIsMyProperty\fR not defined at the time of the pattern compilation. +.IP \(bu 4 +Perl's \f(CWmemcpy()\fR, \f(CWmemmove()\fR, \f(CWmemset()\fR and \f(CWmemcmp()\fR fallbacks are now +more compatible with the originals. [perl #127619] +.IP \(bu 4 +Fixed the issue where a \f(CW\*(C`s///r\*(C'\fR) with \fB\-DPERL_NO_COW\fR attempts +to modify the source SV, resulting in the program dying. [perl #127635] +.IP \(bu 4 +Fixed an EBCDIC-platform-only case where a pattern could fail to match. This +occurred when matching characters from the set of C1 controls when the +target matched string was in UTF\-8. +.IP \(bu 4 +Narrow the filename check in \fIstrict.pm\fR and \fIwarnings.pm\fR. Previously, +it assumed that if the filename (without the \fI.pmc?\fR extension) differed +from the package name, if was a misspelled use statement (i.e. \f(CW\*(C`use Strict\*(C'\fR +instead of \f(CW\*(C`use strict\*(C'\fR). We now check whether there's really a +miscapitalization happening, and not some other issue. +.IP \(bu 4 +Turn an assertion into a more user friendly failure when parsing +regexes. [perl #127599] +.IP \(bu 4 +Correctly raise an error when trying to compile patterns with +unterminated character classes while there are trailing backslashes. +[perl #126141]. +.IP \(bu 4 +Line numbers larger than 2**31\-1 but less than 2**32 are no longer +returned by \f(CWcaller()\fR as negative numbers. [perl #126991] +.IP \(bu 4 +\&\f(CW\*(C`unless ( \fR\f(CIassignment\fR\f(CW )\*(C'\fR now properly warns when syntax +warnings are enabled. [perl #127122] +.IP \(bu 4 +Setting an \f(CW\*(C`ISA\*(C'\fR glob to an array reference now properly adds +\&\f(CW\*(C`isaelem\*(C'\fR magic to any existing elements. Previously modifying such +an element would not update the ISA cache, so method calls would call +the wrong function. Perl would also crash if the \f(CW\*(C`ISA\*(C'\fR glob was +destroyed, since new code added in 5.23.7 would try to release the +\&\f(CW\*(C`isaelem\*(C'\fR magic from the elements. [perl #127351] +.IP \(bu 4 +If a here-doc was found while parsing another operator, the parser had +already read end of file, and the here-doc was not terminated, perl +could produce an assertion or a segmentation fault. This now reliably +complains about the unterminated here-doc. [perl #125540] +.IP \(bu 4 +\&\f(CWuntie()\fR would sometimes return the last value returned by the \f(CWUNTIE()\fR +handler as well as its normal value, messing up the stack. [perl +#126621] +.IP \(bu 4 +Fixed an operator precedence problem when \f(CW\*(C` castflags & 2\*(C'\fR is true. +[perl #127474] +.IP \(bu 4 +Caching of DESTROY methods could result in a non-pointer or a +non-STASH stored in the \f(CWSvSTASH()\fR slot of a stash, breaking the B +\&\f(CWSTASH()\fR method. The DESTROY method is now cached in the MRO metadata +for the stash. [perl #126410] +.IP \(bu 4 +The AUTOLOAD method is now called when searching for a DESTROY method, +and correctly sets \f(CW$AUTOLOAD\fR too. [perl #124387] [perl #127494] +.IP \(bu 4 +Avoid parsing beyond the end of the buffer when processing a \f(CW\*(C`#line\*(C'\fR +directive with no filename. [perl #127334] +.IP \(bu 4 +Perl now raises a warning when a regular expression pattern looks like +it was supposed to contain a POSIX class, like \f(CW\*(C`qr/[[:alpha:]]/\*(C'\fR, but +there was some slight defect in its specification which causes it to +instead be treated as a regular bracketed character class. An example +would be missing the second colon in the above like this: +\&\f(CW\*(C`qr/[[:alpha]]/\*(C'\fR. This compiles to match a sequence of two characters. +The second is \f(CW"]"\fR, and the first is any of: \f(CW"["\fR, \f(CW":"\fR, \f(CW"a"\fR, +\&\f(CW"h"\fR, \f(CW"l"\fR, or \f(CW"p"\fR. This is unlikely to be the intended +meaning, and now a warning is raised. No warning is raised unless the +specification is very close to one of the 14 legal POSIX classes. (See +"POSIX Character Classes" in perlrecharclass.) +[perl #8904] +.IP \(bu 4 +Certain regex patterns involving a complemented POSIX class in an +inverted bracketed character class, and matching something else +optionally would improperly fail to match. An example of one that could +fail is \f(CW\*(C`qr/_?[^\eWbar]\ex{100}/\*(C'\fR. This has been fixed. +[perl #127537] +.IP \(bu 4 +Perl 5.22 added support to the C99 hexadecimal floating point notation, +but sometimes misparses hex floats. This has been fixed. +[perl #127183] +.IP \(bu 4 +A regression that allowed undeclared barewords in hash keys to work despite +strictures has been fixed. +[GH #15099] <https://github.com/Perl/perl5/issues/15099> +.IP \(bu 4 +Calls to the placeholder \f(CW&PL_sv_yes\fR used internally when an \f(CWimport()\fR +or \f(CWunimport()\fR method isn't found now correctly handle scalar context. +[GH #14902] <https://github.com/Perl/perl5/issues/14902> +.IP \(bu 4 +Report more context when we see an array where we expect to see an +operator and avoid an assertion failure. +[GH #14472] <https://github.com/Perl/perl5/issues/14472> +.IP \(bu 4 +Modifying an array that was previously a package \f(CW@ISA\fR no longer +causes assertion failures or crashes. +[GH #14492] <https://github.com/Perl/perl5/issues/14492> +.IP \(bu 4 +Retain binary compatibility across plain and DEBUGGING perl builds. +[GH #15122] <https://github.com/Perl/perl5/issues/15122> +.IP \(bu 4 +Avoid leaking memory when setting \f(CW$ENV{foo}\fR on darwin. +[GH #14955] <https://github.com/Perl/perl5/issues/14955> +.IP \(bu 4 +\&\f(CW\*(C`/...\eG/\*(C'\fR no longer crashes on utf8 strings. When \f(CW\*(C`\eG\*(C'\fR is a fixed number +of characters from the start of the regex, perl needs to count back that +many characters from the current \f(CWpos()\fR position and start matching from +there. However, it was counting back bytes rather than characters, which +could lead to panics on utf8 strings. +.IP \(bu 4 +In some cases operators that return integers would return negative +integers as large positive integers. +[GH #15049] <https://github.com/Perl/perl5/issues/15049> +.IP \(bu 4 +The \f(CWpipe()\fR operator would assert for DEBUGGING builds instead of +producing the correct error message. The condition asserted on is +detected and reported on correctly without the assertions, so the +assertions were removed. +[GH #15015] <https://github.com/Perl/perl5/issues/15015> +.IP \(bu 4 +In some cases, failing to parse a here-doc would attempt to use freed +memory. This was caused by a pointer not being restored correctly. +[GH #15009] <https://github.com/Perl/perl5/issues/15009> +.IP \(bu 4 +\&\f(CW\*(C`@x = sort { *a = 0; $a <=> $b } 0 .. 1\*(C'\fR no longer frees the GP +for *a before restoring its SV slot. +[GH #14595] <https://github.com/Perl/perl5/issues/14595> +.IP \(bu 4 +Multiple problems with the new hexadecimal floating point printf +format \f(CW%a\fR were fixed: +[GH #15032] <https://github.com/Perl/perl5/issues/15032>, +[GH #15033] <https://github.com/Perl/perl5/issues/15033>, +[GH #15074] <https://github.com/Perl/perl5/issues/15074> +.IP \(bu 4 +Calling \f(CWmg_set()\fR in \f(CWleave_scope()\fR no longer leaks. +.IP \(bu 4 +A regression from Perl v5.20 was fixed in which debugging output of regular +expression compilation was wrong. (The pattern was correctly compiled, but +what got displayed for it was wrong.) +.IP \(bu 4 +\&\f(CW\*(C`\eb{sb}\*(C'\fR works much better. In Perl v5.22.0, this new construct didn't +seem to give the expected results, yet passed all the tests in the +extensive suite furnished by Unicode. It turns out that it was because +these were short input strings, and the failures had to do with longer +inputs. +.IP \(bu 4 +Certain syntax errors in +"Extended Bracketed Character Classes" in perlrecharclass caused panics +instead of the proper error message. This has now been fixed. [perl +#126481] +.IP \(bu 4 +Perl 5.20 added a message when a quantifier in a regular +expression was useless, but then caused the parser to skip it; +this caused the surplus quantifier to be silently ignored, instead +of throwing an error. This is now fixed. [perl #126253] +.IP \(bu 4 +The switch to building non-XS modules last in win32/makefile.mk (introduced +by design as part of the changes to enable parallel building) caused the +build of POSIX to break due to problems with the version module. This +is now fixed. +.IP \(bu 4 +Improved parsing of hex float constants. +.IP \(bu 4 +Fixed an issue with \f(CW\*(C`pack\*(C'\fR where \f(CW\*(C`pack "H"\*(C'\fR (and \f(CW\*(C`pack "h"\*(C'\fR) +could read past the source when given a non\-utf8 source, and a utf8 target. +[perl #126325] +.IP \(bu 4 +Fixed several cases where perl would abort due to a segmentation fault, +or a C\-level assert. [perl #126615], [perl #126602], [perl #126193]. +.IP \(bu 4 +There were places in regular expression patterns where comments (\f(CW\*(C`(?#...)\*(C'\fR) +weren't allowed, but should have been. This is now fixed. +[GH #12755] <https://github.com/Perl/perl5/issues/12755> +.IP \(bu 4 +Some regressions from Perl 5.20 have been fixed, in which some syntax errors in +\&\f(CW\*(C`(?[...])\*(C'\fR constructs +within regular expression patterns could cause a segfault instead of a proper +error message. +[GH #14933] <https://github.com/Perl/perl5/issues/14933> +[GH #14996] <https://github.com/Perl/perl5/issues/14996> +.IP \(bu 4 +Another problem with +\&\f(CW\*(C`(?[...])\*(C'\fR +constructs has been fixed wherein things like \f(CW\*(C`\ec]\*(C'\fR could cause panics. +[GH #14934] <https://github.com/Perl/perl5/issues/14934> +.IP \(bu 4 +Some problems with attempting to extend the perl stack to around 2G or 4G +entries have been fixed. This was particularly an issue on 32\-bit perls built +to use 64\-bit integers, and was easily noticeable with the list repetition +operator, e.g. +.Sp +.Vb 1 +\& @a = (1) x $big_number +.Ve +.Sp +Formerly perl may have crashed, depending on the exact value of \f(CW$big_number\fR; +now it will typically raise an exception. +[GH #14880] <https://github.com/Perl/perl5/issues/14880> +.IP \(bu 4 +In a regex conditional expression \f(CW\*(C`(?(condition)yes\-pattern|no\-pattern)\*(C'\fR, if +the condition is \f(CW\*(C`(?!)\*(C'\fR then perl failed the match outright instead of +matching the no-pattern. This has been fixed. +[GH #14947] <https://github.com/Perl/perl5/issues/14947> +.IP \(bu 4 +The special backtracking control verbs \f(CW\*(C`(*VERB:ARG)\*(C'\fR now all allow an optional +argument and set \f(CW\*(C`REGERROR\*(C'\fR/\f(CW\*(C`REGMARK\*(C'\fR appropriately as well. +[GH #14937] <https://github.com/Perl/perl5/issues/14937> +.IP \(bu 4 +Several bugs, including a segmentation fault, have been fixed with the boundary +checking constructs (introduced in Perl 5.22) \f(CW\*(C`\eb{gcb}\*(C'\fR, \f(CW\*(C`\eb{sb}\*(C'\fR, \f(CW\*(C`\eb{wb}\*(C'\fR, +\&\f(CW\*(C`\eB{gcb}\*(C'\fR, \f(CW\*(C`\eB{sb}\*(C'\fR, and \f(CW\*(C`\eB{wb}\*(C'\fR. All the \f(CW\*(C`\eB{}\*(C'\fR ones now match an empty +string; none of the \f(CW\*(C`\eb{}\*(C'\fR ones do. +[GH #14976] <https://github.com/Perl/perl5/issues/14976> +.IP \(bu 4 +Duplicating a closed file handle for write no longer creates a +filename of the form \fIGLOB(0xXXXXXXXX)\fR. [perl #125115] +.IP \(bu 4 +Warning fatality is now ignored when rewinding the stack. This +prevents infinite recursion when the now fatal error also causes +rewinding of the stack. [perl #123398] +.IP \(bu 4 +In perl v5.22.0, the logic changed when parsing a numeric parameter to the \-C +option, such that the successfully parsed number was not saved as the option +value if it parsed to the end of the argument. [perl #125381] +.IP \(bu 4 +The PadlistNAMES macro is an lvalue again. +.IP \(bu 4 +Zero \-DPERL_TRACE_OPS memory for sub-threads. +.Sp +\&\f(CWperl_clone_using()\fR was missing Zero init of PL_op_exec_cnt[]. This +caused sub-threads in threaded \-DPERL_TRACE_OPS builds to spew exceedingly +large op-counts at destruct. These counts would print \f(CW%x\fR as "ABABABAB", +clearly a mem-poison value. +.IP \(bu 4 +A leak in the XS typemap caused one scalar to be leaked each time a \f(CW\*(C`FILE *\*(C'\fR +or a \f(CW\*(C`PerlIO *\*(C'\fR was \f(CW\*(C`OUTPUT:\*(C'\fRed or imported to Perl, since perl 5.000. These +particular typemap entries are thought to be extremely rarely used by XS +modules. [perl #124181] +.IP \(bu 4 +\&\f(CWalarm()\fR and \f(CWsleep()\fR will now warn if the argument is a negative number +and return undef. Previously they would pass the negative value to the +underlying C function which may have set up a timer with a surprising value. +.IP \(bu 4 +Perl can again be compiled with any Unicode version. This used to +(mostly) work, but was lost in v5.18 through v5.20. The property +\&\f(CW\*(C`Name_Alias\*(C'\fR did not exist prior to Unicode 5.0. Unicode::UCD +incorrectly said it did. This has been fixed. +.IP \(bu 4 +Very large code-points (beyond Unicode) in regular expressions no +longer cause a buffer overflow in some cases when converted to UTF\-8. +[GH #14858] <https://github.com/Perl/perl5/issues/14858> +.IP \(bu 4 +The integer overflow check for the range operator (...) in list +context now correctly handles the case where the size of the range is +larger than the address space. This could happen on 32\-bits with +\&\-Duse64bitint. +[GH #14843] <https://github.com/Perl/perl5/issues/14843> +.IP \(bu 4 +A crash with \f(CW\*(C`%::=(); J\->${\e"::"}\*(C'\fR has been fixed. +[GH #14790] <https://github.com/Perl/perl5/issues/14790> +.IP \(bu 4 +\&\f(CW\*(C`qr/(?[ () ])/\*(C'\fR no longer segfaults, giving a syntax error message instead. +[perl #125805] +.IP \(bu 4 +Regular expression possessive quantifier v5.20 regression now fixed. +\&\f(CW\*(C`qr/\*(C'\fR\fIPAT\fR\f(CW\*(C`{\*(C'\fR\fImin\fR,\fImax\fR\f(CW\*(C`}+\*(C'\fR\f(CW\*(C`/\*(C'\fR is supposed to behave identically +to \f(CW\*(C`qr/(?>\*(C'\fR\fIPAT\fR\f(CW\*(C`{\*(C'\fR\fImin\fR,\fImax\fR\f(CW\*(C`})/\*(C'\fR. Since v5.20, this didn't +work if \fImin\fR and \fImax\fR were equal. [perl #125825] +.IP \(bu 4 +\&\f(CW\*(C`BEGIN <>\*(C'\fR no longer segfaults and properly produces an error +message. [perl #125341] +.IP \(bu 4 +In \f(CW\*(C`tr///\*(C'\fR an illegal backwards range like \f(CW\*(C`tr/\ex{101}\-\ex{100}//\*(C'\fR was +not always detected, giving incorrect results. This is now fixed. +.SH Acknowledgements +.IX Header "Acknowledgements" +Perl 5.24.0 represents approximately 11 months of development since Perl 5.24.0 +and contains approximately 360,000 lines of changes across 1,800 files from 75 +authors. +.PP +Excluding auto-generated files, documentation and release tools, there were +approximately 250,000 lines of changes to 1,200 .pm, .t, .c and .h files. +.PP +Perl continues to flourish into its third decade thanks to a vibrant community +of users and developers. The following people are known to have contributed the +improvements that became Perl 5.24.0: +.PP +Aaron Crane, Aaron Priven, Abigail, Achim Gratz, Alexander D'Archangel, Alex +Vandiver, Andreas König, Andy Broad, Andy Dougherty, Aristotle Pagaltzis, +Chase Whitener, Chas. Owens, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn +Ilmari Mannsåker, Dan Collins, Daniel Dragan, David Golden, David Mitchell, +Doug Bell, Dr.Ruud, Ed Avis, Ed J, Father Chrysostomos, Herbert Breunung, +H.Merijn Brand, Hugo van der Sanden, Ivan Pozdeev, James E Keenan, Jan Dubois, +Jarkko Hietaniemi, Jerry D. Hedden, Jim Cromie, John Peacock, John SJ Anderson, +Karen Etheridge, Karl Williamson, kmx, Leon Timmermans, Ludovic E. R. +Tolhurst-Cleaver, Lukas Mai, Martijn Lievaart, Matthew Horsfall, Mattia Barbon, +Max Maischein, Mohammed El-Afifi, Nicholas Clark, Nicolas R., Niko Tyni, Peter +John Acklam, Peter Martini, Peter Rabbitson, Pip Cet, Rafael Garcia-Suarez, +Reini Urban, Ricardo Signes, Sawyer X, Shlomi Fish, Sisyphus, Stanislaw Pusep, +Steffen Müller, Stevan Little, Steve Hay, Sullivan Beck, Thomas Sibley, Todd +Rinaldo, Tom Hukins, Tony Cook, Unicode Consortium, Victor Adam, Vincent Pit, +Vladimir Timofeev, Yves Orton, Zachary Storer, 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 articles recently +posted to the comp.lang.perl.misc newsgroup and the perl bug database at +https://rt.perl.org/ . There may also be information at +http://www.perl.org/ , the Perl Home Page. +.PP +If you believe you have an unreported bug, please run the perlbug program +included with your release. Be sure to trim your bug down to a tiny but +sufficient test case. Your bug report, along with the output of \f(CW\*(C`perl \-V\*(C'\fR, +will be sent off to perlbug@perl.org to be analysed by the Perl porting team. +.PP +If the bug you are reporting has security implications which make it +inappropriate to send to a publicly archived mailing list, then see +"SECURITY VULNERABILITY CONTACT INFORMATION" in perlsec +for details of how to report the issue. +.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. |