diff options
Diffstat (limited to 'upstream/archlinux/man1/perl5360delta.1perl')
-rw-r--r-- | upstream/archlinux/man1/perl5360delta.1perl | 1254 |
1 files changed, 1254 insertions, 0 deletions
diff --git a/upstream/archlinux/man1/perl5360delta.1perl b/upstream/archlinux/man1/perl5360delta.1perl new file mode 100644 index 00000000..a24081bd --- /dev/null +++ b/upstream/archlinux/man1/perl5360delta.1perl @@ -0,0 +1,1254 @@ +.\" -*- 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 "PERL5360DELTA 1perl" +.TH PERL5360DELTA 1perl 2024-02-11 "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 +perl5360delta \- what is new for perl v5.36.0 +.SH DESCRIPTION +.IX Header "DESCRIPTION" +This document describes differences between the 5.34.0 release and the 5.36.0 +release. +.SH "Core Enhancements" +.IX Header "Core Enhancements" +.ie n .SS """use v5.36""" +.el .SS "\f(CWuse v5.36\fP" +.IX Subsection "use v5.36" +As always, \f(CW\*(C`use v5.36\*(C'\fR turns on the feature bundle for that version of Perl. +.PP +The 5.36 bundle enables the \f(CW\*(C`signatures\*(C'\fR feature. Introduced in Perl version +5.20.0, and modified several times since, the subroutine signatures feature is +now no longer considered experimental. It is now considered a stable language +feature and no longer prints a warning. +.PP +.Vb 1 +\& use v5.36; +\& +\& sub add ($x, $y) { +\& return $x + $y; +\& } +.Ve +.PP +Despite this, certain elements of signatured subroutines remain experimental; +see below. +.PP +The 5.36 bundle enables the \f(CW\*(C`isa\*(C'\fR feature. Introduced in Perl version 5.32.0, +this operator has remained unchanged since then. The operator is now considered +a stable language feature. For more detail see "Class Instance +Operator" in perlop. +.PP +The 5.36 bundle also \fIdisables\fR the features \f(CW\*(C`indirect\*(C'\fR, and +\&\f(CW\*(C`multidimensional\*(C'\fR. These will forbid, respectively: the use of "indirect" +method calls (like \f(CW\*(C`$x = new Class;\*(C'\fR); the use of a list expression as a hash +key to simulate sparse multidimensional arrays. The specifics of these changes +can be found in feature, but the short version is: this is a bit like having +more \f(CW\*(C`use strict\*(C'\fR turned on, disabling features that cause more trouble than +they're worth. +.PP +Furthermore, \f(CW\*(C`use v5.36\*(C'\fR will also enable warnings as if you'd written \f(CW\*(C`use +warnings\*(C'\fR. +.PP +Finally, with this release, the experimental \f(CW\*(C`switch\*(C'\fR feature, present in +every feature bundle since they were introduced in v5.10, has been removed from +the v5.36 bundle. If you want to use it (against our advice), you'll have to +enable it explicitly. +.SS "\-g command-line flag" +.IX Subsection "-g command-line flag" +A new command-line flag, \-g, is available. It is a simpler alias for \-0777. +.PP +For more information, see "\-g" in perlrun. +.SS "Unicode 14.0 is supported" +.IX Subsection "Unicode 14.0 is supported" +See <https://www.unicode.org/versions/Unicode14.0.0/> for details. +.SS "regex sets are no longer considered experimental" +.IX Subsection "regex sets are no longer considered experimental" +Prior to this release, the regex sets feature (officially named +"Extended Bracketed Character Classes") was considered experimental. +Introduced in Perl version 5.18.0, and modified several times since, +this is now considered a stable language feature and its use no longer +prints a warning. See "Extended Bracketed Character +Classes" in perlrecharclass. +.SS "Variable length lookbehind is mostly no longer considered experimental" +.IX Subsection "Variable length lookbehind is mostly no longer considered experimental" +Prior to this release, any form of variable length lookbehind was +considered experimental. With this release the experimental status has +been reduced to cover only lookbehind that contains capturing parenthesis. +This is because it is not clear if +.PP +.Vb 1 +\& "aaz"=~/(?=z)(?<=(a|aa))/ +.Ve +.PP +should match and leave \f(CW$1\fR equaling "a" or "aa". Currently it will match +the longest possible alternative, "aa". While we are confident that the overall +construct will now match only when it should, we are not confident that we +will keep the current "longest match" behavior. +.SS "SIGFPE no longer deferred" +.IX Subsection "SIGFPE no longer deferred" +Floating-point exceptions are now delivered immediately, in the same way +as other "fault"\-like signals such as SIGSEGV. This means one has at +least a chance to catch such a signal with a \f(CW$SIG{FPE}\fR handler, e.g. +so that \f(CW\*(C`die\*(C'\fR can report the line in perl that triggered it. +.SS "Stable boolean tracking" +.IX Subsection "Stable boolean tracking" +The "true" and "false" boolean values, often accessed by constructions like +\&\f(CW\*(C`!!0\*(C'\fR and \f(CW\*(C`!!1\*(C'\fR, as well as being returned from many core functions and +operators, now remember their boolean nature even through assignment into +variables. The new function \f(CWis_bool()\fR in builtin can check whether +a value has boolean nature. +.PP +This is likely to be useful when interoperating with other languages or +data-type serialisation, among other places. +.SS "iterating over multiple values at a time (experimental)" +.IX Subsection "iterating over multiple values at a time (experimental)" +You can now iterate over multiple values at a time by specifying a list of +lexicals within parentheses. For example, +.PP +.Vb 2 +\& for my ($key, $value) (%hash) { ... } +\& for my ($left, $right, $gripping) (@moties) { ... } +.Ve +.PP +Prior to perl v5.36, attempting to specify a list after \f(CW\*(C`for my\*(C'\fR was a syntax +error. +.PP +This feature is currently experimental and will cause a warning of category +\&\f(CW\*(C`experimental::for_list\*(C'\fR. For more detail see "Compound Statements" in perlsyn. +See also "builtin::indexed" in this document, which is a handy companion to +n\-at-a-time foreach. +.SS "builtin functions (experimental)" +.IX Subsection "builtin functions (experimental)" +A new core module builtin has been added, which provides documentation for +new always-present functions that are built into the interpreter. +.PP +.Vb 1 +\& say "Reference type of arrays is ", builtin::reftype([]); +.Ve +.PP +It also provides a lexical import mechanism for providing short name versions +of these functions. +.PP +.Vb 2 +\& use builtin \*(Aqreftype\*(Aq; +\& say "Reference type of arrays is ", reftype([]); +.Ve +.PP +This builtin function mechanism and the functions it provides are all +currently \fBexperimental\fR. We expect that \f(CW\*(C`builtin\*(C'\fR itself will cease to be +experimental in the near future, but that individual functions in it may become +stable on an ongoing basis. Other functions will be added to \f(CW\*(C`builtin\*(C'\fR over +time. +.PP +For details, see builtin, but here's a summary of builtin functions in +v5.36: +.IP builtin::trim 4 +.IX Item "builtin::trim" +This function treats its argument as a string, returning the result of removing +all white space at its beginning and ending. +.IP builtin::indexed 4 +.IX Item "builtin::indexed" +This function returns a list twice as big as its argument list, where each item +is preceded by its index within that list. This is primarily useful for using +the new \f(CW\*(C`foreach\*(C'\fR syntax with multiple iterator variables to iterate over an +array or list, while also tracking the index of each item: +.Sp +.Vb 1 +\& use builtin \*(Aqindexed\*(Aq; +\& +\& foreach my ($index, $val) (indexed @array) { +\& ... +\& } +.Ve +.IP "builtin::true, builtin::false, builtin::is_bool" 4 +.IX Item "builtin::true, builtin::false, builtin::is_bool" +\&\f(CW\*(C`true\*(C'\fR and \f(CW\*(C`false\*(C'\fR return boolean true and false values. Perl is still perl, +and doesn't have strict typing of booleans, but these values will be known to +have been created as booleans. \f(CW\*(C`is_bool\*(C'\fR will tell you whether a value was +known to have been created as a boolean. +.IP "builtin::weaken, builtin::unweaken, builtin::is_weak" 4 +.IX Item "builtin::weaken, builtin::unweaken, builtin::is_weak" +These functions will, respectively: weaken a reference; strengthen a reference; +and return whether a reference is weak. (A weak reference is not counted for +garbage collection purposes. See perlref.) These can take the place of +some similar routines in Scalar::Util. +.IP "builtin::blessed, builtin::refaddr, builtin::reftype" 4 +.IX Item "builtin::blessed, builtin::refaddr, builtin::reftype" +These functions provide more data about references (or non-references, +actually!) and can take the place of similar routines found in Scalar::Util. +.IP "builtin::ceil, builtin::floor" 4 +.IX Item "builtin::ceil, builtin::floor" +\&\f(CW\*(C`ceil\*(C'\fR returns the smallest integer greater than or equal to its argument. +\&\f(CW\*(C`floor\*(C'\fR returns the largest integer less than or equal to its argument. These +can take the place of similar routines found in POSIX. +.ie n .SS """defer"" blocks (experimental)" +.el .SS "\f(CWdefer\fP blocks (experimental)" +.IX Subsection "defer blocks (experimental)" +This release adds support for \f(CW\*(C`defer\*(C'\fR blocks, which are blocks of code +prefixed by the \f(CW\*(C`defer\*(C'\fR modifier. They provide a section of code which runs +at a later time, during scope exit. +.PP +In brief, when a \f(CW\*(C`defer\*(C'\fR block is reached at runtime, its body is set aside to +be run when the enclosing scope is exited. It is unlike a UNITCHECK (among +other reasons) in that if the block \fIcontaining\fR the \f(CW\*(C`defer\*(C'\fR block is exited +before the block is reached, it will not be run. +.PP +\&\f(CW\*(C`defer\*(C'\fR blocks can be used to take the place of "scope guard" objects where an +object is passed a code block to be run by its destructor. +.PP +For more information, see "defer blocks" in perlsyn. +.ie n .SS "try/catch can now have a ""finally"" block (experimental)" +.el .SS "try/catch can now have a \f(CWfinally\fP block (experimental)" +.IX Subsection "try/catch can now have a finally block (experimental)" +The experimental \f(CW\*(C`try\*(C'\fR/\f(CW\*(C`catch\*(C'\fR syntax has been extended to support an +optional third block introduced by the \f(CW\*(C`finally\*(C'\fR keyword. +.PP +.Vb 10 +\& try { +\& attempt(); +\& print "Success\en"; +\& } +\& catch ($e) { +\& print "Failure\en"; +\& } +\& finally { +\& print "This happens regardless\en"; +\& } +.Ve +.PP +This provides code which runs at the end of the \f(CW\*(C`try\*(C'\fR/\f(CW\*(C`catch\*(C'\fR construct, +even if aborted by an exception or control-flow keyword. They are similar +to \f(CW\*(C`defer\*(C'\fR blocks. +.PP +For more information, see "Try Catch Exception Handling" in perlsyn. +.SS "non-ASCII delimiters for quote-like operators (experimental)" +.IX Subsection "non-ASCII delimiters for quote-like operators (experimental)" +Perl traditionally has allowed just four pairs of string/pattern +delimiters: \f(CW\*(C`(\ )\*(C'\fR \f(CW\*(C`{\ }\*(C'\fR \f(CW\*(C`[\ ]\*(C'\fR and \f(CW\*(C`<\ >\*(C'\fR, all in the +ASCII range. Unicode has hundreds more possibilities, and using this +feature enables many of them. When enabled, you can say \f(CW\*(C`qr«\ »\*(C'\fR for +example, or \f(CW\*(C`use\ utf8;\ q𝄃string𝄂\*(C'\fR. See "The +\&'extra_paired_delimiters' feature" in feature for details. +.ie n .SS "@_ is now experimental within signatured subs" +.el .SS "\f(CW@_\fP is now experimental within signatured subs" +.IX Subsection "@_ is now experimental within signatured subs" +Even though subroutine signatures are now stable, use of the legacy arguments +array (\f(CW@_\fR) with a subroutine that has a signature \fIremains\fR experimental, +with its own warning category. Silencing the \f(CW\*(C`experimental::signatures\*(C'\fR +warning category is not sufficient to dismiss this. The new warning is emitted +with the category name \f(CW\*(C`experimental::args_array_with_signatures\*(C'\fR. +.PP +Any subroutine that has a signature and tries to make use of the defaults +argument array or an element thereof (\f(CW@_\fR or \f(CW$_[INDEX]\fR), either +explicitly or implicitly (such as \f(CW\*(C`shift\*(C'\fR or \f(CW\*(C`pop\*(C'\fR with no argument) will +provoke a warning at compile-time: +.PP +.Vb 1 +\& use v5.36; +\& +\& sub f ($x, $y = 123) { +\& say "The first argument is $_[0]"; +\& } +.Ve +.PP + +.PP +.Vb 2 +\& Use of @_ in array element with signatured subroutine is experimental +\& at file.pl line 4. +.Ve +.PP +The behaviour of code which attempts to do this is no longer specified, and +may be subject to change in a future version. +.SH "Incompatible Changes" +.IX Header "Incompatible Changes" +.SS "A physically empty sort is now a compile-time error" +.IX Subsection "A physically empty sort is now a compile-time error" +.Vb 3 +\& @a = sort @empty; # unaffected +\& @a = sort; # now a compile\-time error +\& @a = sort (); # also a compile\-time error +.Ve +.PP +A bare sort used to be a weird way to create an empty list; now it croaks +at compile time. This change is intended to free up some of the syntax space +for possible future enhancements to \f(CW\*(C`sort\*(C'\fR. +.SH Deprecations +.IX Header "Deprecations" +.ie n .SS """use VERSION"" (where VERSION is below v5.11) after ""use v5.11"" is deprecated" +.el .SS "\f(CWuse VERSION\fP (where VERSION is below v5.11) after \f(CWuse v5.11\fP is deprecated" +.IX Subsection "use VERSION (where VERSION is below v5.11) after use v5.11 is deprecated" +When in the scope of \f(CW\*(C`use v5.11\*(C'\fR or later, a \f(CW\*(C`use vX\*(C'\fR line where \fIX\fR is +lower than v5.11 will now issue a warning: +.PP +.Vb 1 +\& Downgrading a use VERSION declaration to below v5.11 is deprecated +.Ve +.PP +For example: +.PP +.Vb 4 +\& use v5.14; +\& say "The say statement is permitted"; +\& use v5.8; # This will print a warning +\& print "We must use print\en"; +.Ve +.PP +This is because the Perl team plans to change the behavior in this case. Since +Perl v5.12 (and parts of v5.11), strict is enabled \fIunless it had previously +been disabled\fR. In other words: +.PP +.Vb 3 +\& no strict; +\& use v5.12; # will not enable strict, because "no strict" preceded it +\& $x = 1; # permitted, despite no "my" declaration +.Ve +.PP +In the future, this behavior will be eliminated and \f(CW\*(C`use VERSION\*(C'\fR will +\&\fIalways\fR enable strict for versions v5.12 and later. +.PP +Code which wishes to mix versions in this manner should use lexical scoping +with block syntax to ensure that the differently versioned regions remain +lexically isolated. +.PP +.Vb 4 +\& { +\& use v5.14; +\& say "The say statement is permitted"; +\& } +\& +\& { +\& use v5.8; # No warning is emitted +\& print "We must use print\en"; +\& } +.Ve +.PP +Of course, this is probably not something you ever need to do! If the first +block compiles, it means you're using perl v5.14.0 or later. +.SH "Performance Enhancements" +.IX Header "Performance Enhancements" +.IP \(bu 4 +We now probe for compiler support for C11 thread local storage, and where +available use this for "implicit context" for XS extensions making API calls for +a threaded Perl build. This requires fewer function calls at the C level than +POSIX thread specific storage. We continue to use the pthreads approach if +the C11 approach is not available. +.Sp +\&\fIConfigure\fR run with the defaults will build an unthreaded Perl (which is +slightly faster), but most operating systems ship a threaded Perl. +.IP \(bu 4 +Perl can now be configured to no longer allocate keys for large hashes +from the shared string table. +.Sp +The same internal datatype (\f(CW\*(C`PVHV\*(C'\fR) is used for all of +.RS 4 +.IP \(bu 4 +Symbol tables +.IP \(bu 4 +Objects (by default) +.IP \(bu 4 +Associative arrays +.RE +.RS 4 +.Sp +The shared string table was originally added to improve performance for blessed +hashes used as objects, because every object instance has the same keys, so it +is an optimisation to share memory between them. It also makes sense for symbol +tables, where derived classes will have the same keys (typically method names), +and the OP trees built for method calls can also share memory. The shared +string table behaves roughly like a cache for hash keys. +.Sp +But for hashes actually used as associative arrays \- mapping keys to values \- +typically the keys are not re-used in other hashes. For example, "seen" hashes +are keyed by object IDs (or addresses), and logically these keys won't repeat +in other hashes. +.Sp +Storing these "used just once" keys in the shared string table increases CPU +and RAM use for no gain. For such keys the shared string table behaves as a +cache with a 0% hit rate. Storing all the keys there increases the total size +of the shared string table, as well as increasing the number of times it is +resized as it grows. \fBWorse\fR \- in any environment that has "copy on write" +memory for child process (such as a pre-forking server), the memory pages used +for the shared string table rapidly need to be copied as the child process +manipulates hashes. Hence if most of the shared string table is such that keys +are used only in one place, there is no benefit from re-use within the perl +interpreter, but a high cost due to more pages for the OS to copy. +.Sp +The perl interpreter can now be Configured to disable shared hash keys +for "large" hashes (that are neither objects nor symbol tables). To do +so, add \f(CW\*(C`\-Accflags=\*(Aq\-DPERL_USE_UNSHARED_KEYS_IN_LARGE_HASHES\*(Aq\*(C'\fR to +your \fIConfigure\fR options. "Large" is a heuristic \-\- currently the +heuristic is that sharing is disabled when adding a key to a hash +triggers allocation of more storage, and the hash has more than 42 keys. +.Sp +This \fBmight\fR cause slightly increased memory usage for programs that create +(unblessed) data structures that contain multiple large hashes that share the +same keys. But generally our testing suggests that for the specific cases +described it is a win, and other code is unaffected. +.RE +.IP \(bu 4 +In certain scenarios, creation of new scalars is now noticeably faster. +.Sp +For example, the following code is now executing ~30% faster: +.Sp +.Vb 4 +\& $str = "A" x 64; +\& for (0..1_000_000) { +\& @svs = split //, $str +\& } +.Ve +.Sp +(You can read more about this one in [perl +#19414] <https://github.com/Perl/perl5/pull/19414>.) +.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.38 to 2.40. +.IP \(bu 4 +Attribute::Handlers has been upgraded from version 1.01 to 1.02. +.IP \(bu 4 +attributes has been upgraded from version 0.33 to 0.34. +.IP \(bu 4 +B has been upgraded from version 1.82 to 1.83. +.IP \(bu 4 +B::Concise has been upgraded from version 1.004 to 1.006. +.IP \(bu 4 +B::Deparse has been upgraded from version 1.56 to 1.64. +.IP \(bu 4 +bignum has been upgraded from version 0.51 to 0.65. +.IP \(bu 4 +charnames has been upgraded from version 1.48 to 1.50. +.IP \(bu 4 +Compress::Raw::Bzip2 has been upgraded from version 2.101 to 2.103. +.IP \(bu 4 +Compress::Raw::Zlib has been upgraded from version 2.101 to 2.105. +.IP \(bu 4 +CPAN has been upgraded from version 2.28 to 2.33. +.IP \(bu 4 +Data::Dumper has been upgraded from version 2.179 to 2.184. +.IP \(bu 4 +DB_File has been upgraded from version 1.855 to 1.857. +.IP \(bu 4 +Devel::Peek has been upgraded from version 1.30 to 1.32. +.IP \(bu 4 +Devel::PPPort has been upgraded from version 3.62 to 3.68. +.IP \(bu 4 +diagnostics has been upgraded from version 1.37 to 1.39. +.IP \(bu 4 +Digest has been upgraded from version 1.19 to 1.20. +.IP \(bu 4 +DynaLoader has been upgraded from version 1.50 to 1.52. +.IP \(bu 4 +Encode has been upgraded from version 3.08 to 3.17. +.IP \(bu 4 +Errno has been upgraded from version 1.33 to 1.36. +.IP \(bu 4 +experimental has been upgraded from version 0.024 to 0.028. +.IP \(bu 4 +Exporter has been upgraded from version 5.76 to 5.77. +.IP \(bu 4 +ExtUtils::MakeMaker has been upgraded from version 7.62 to 7.64. +.IP \(bu 4 +ExtUtils::Miniperl has been upgraded from version 1.10 to 1.11. +.IP \(bu 4 +ExtUtils::ParseXS has been upgraded from version 3.43 to 3.45. +.IP \(bu 4 +ExtUtils::Typemaps has been upgraded from version 3.43 to 3.45. +.IP \(bu 4 +Fcntl has been upgraded from version 1.14 to 1.15. +.IP \(bu 4 +feature has been upgraded from version 1.64 to 1.72. +.IP \(bu 4 +File::Compare has been upgraded from version 1.1006 to 1.1007. +.IP \(bu 4 +File::Copy has been upgraded from version 2.35 to 2.39. +.IP \(bu 4 +File::Fetch has been upgraded from version 1.00 to 1.04. +.IP \(bu 4 +File::Find has been upgraded from version 1.39 to 1.40. +.IP \(bu 4 +File::Glob has been upgraded from version 1.33 to 1.37. +.IP \(bu 4 +File::Spec has been upgraded from version 3.80 to 3.84. +.IP \(bu 4 +File::stat has been upgraded from version 1.09 to 1.12. +.IP \(bu 4 +FindBin has been upgraded from version 1.52 to 1.53. +.IP \(bu 4 +GDBM_File has been upgraded from version 1.19 to 1.23. +.IP \(bu 4 +Hash::Util has been upgraded from version 0.25 to 0.28. +.IP \(bu 4 +Hash::Util::FieldHash has been upgraded from version 1.21 to 1.26. +.IP \(bu 4 +HTTP::Tiny has been upgraded from version 0.076 to 0.080. +.IP \(bu 4 +I18N::Langinfo has been upgraded from version 0.19 to 0.21. +.IP \(bu 4 +if has been upgraded from version 0.0609 to 0.0610. +.IP \(bu 4 +IO has been upgraded from version 1.46 to 1.50. +.IP \(bu 4 +IO-Compress has been upgraded from version 2.102 to 2.106. +.IP \(bu 4 +IPC::Open3 has been upgraded from version 1.21 to 1.22. +.IP \(bu 4 +JSON::PP has been upgraded from version 4.06 to 4.07. +.IP \(bu 4 +libnet has been upgraded from version 3.13 to 3.14. +.IP \(bu 4 +Locale::Maketext has been upgraded from version 1.29 to 1.31. +.IP \(bu 4 +Math::BigInt has been upgraded from version 1.999818 to 1.999830. +.IP \(bu 4 +Math::BigInt::FastCalc has been upgraded from version 0.5009 to 0.5012. +.IP \(bu 4 +Math::BigRat has been upgraded from version 0.2614 to 0.2621. +.IP \(bu 4 +Module::CoreList has been upgraded from version 5.20210520 to 5.20220520. +.IP \(bu 4 +mro has been upgraded from version 1.25_001 to 1.26. +.IP \(bu 4 +NEXT has been upgraded from version 0.68 to 0.69. +.IP \(bu 4 +Opcode has been upgraded from version 1.50 to 1.57. +.IP \(bu 4 +open has been upgraded from version 1.12 to 1.13. +.IP \(bu 4 +overload has been upgraded from version 1.33 to 1.35. +.IP \(bu 4 +perlfaq has been upgraded from version 5.20210411 to 5.20210520. +.IP \(bu 4 +PerlIO has been upgraded from version 1.11 to 1.12. +.IP \(bu 4 +Pod::Functions has been upgraded from version 1.13 to 1.14. +.IP \(bu 4 +Pod::Html has been upgraded from version 1.27 to 1.33. +.IP \(bu 4 +Pod::Simple has been upgraded from version 3.42 to 3.43. +.IP \(bu 4 +POSIX has been upgraded from version 1.97 to 2.03. +.IP \(bu 4 +re has been upgraded from version 0.41 to 0.43. +.IP \(bu 4 +Scalar::Util has been upgraded from version 1.55 to 1.62. +.IP \(bu 4 +sigtrap has been upgraded from version 1.09 to 1.10. +.IP \(bu 4 +Socket has been upgraded from version 2.031 to 2.033. +.IP \(bu 4 +sort has been upgraded from version 2.04 to 2.05. +.IP \(bu 4 +Storable has been upgraded from version 3.23 to 3.26. +.IP \(bu 4 +Sys::Hostname has been upgraded from version 1.23 to 1.24. +.IP \(bu 4 +Test::Harness has been upgraded from version 3.43 to 3.44. +.IP \(bu 4 +Test::Simple has been upgraded from version 1.302183 to 1.302190. +.IP \(bu 4 +Text::ParseWords has been upgraded from version 3.30 to 3.31. +.IP \(bu 4 +Text::Tabs has been upgraded from version 2013.0523 to 2021.0814. +.IP \(bu 4 +Text::Wrap has been upgraded from version 2013.0523 to 2021.0814. +.IP \(bu 4 +threads has been upgraded from version 2.26 to 2.27. +.IP \(bu 4 +threads::shared has been upgraded from version 1.62 to 1.64. +.IP \(bu 4 +Tie::Handle has been upgraded from version 4.2 to 4.3. +.IP \(bu 4 +Tie::Hash has been upgraded from version 1.05 to 1.06. +.IP \(bu 4 +Tie::Scalar has been upgraded from version 1.05 to 1.06. +.IP \(bu 4 +Tie::SubstrHash has been upgraded from version 1.00 to 1.01. +.IP \(bu 4 +Time::HiRes has been upgraded from version 1.9767 to 1.9770. +.IP \(bu 4 +Unicode::Collate has been upgraded from version 1.29 to 1.31. +.IP \(bu 4 +Unicode::Normalize has been upgraded from version 1.28 to 1.31. +.IP \(bu 4 +Unicode::UCD has been upgraded from version 0.75 to 0.78. +.IP \(bu 4 +UNIVERSAL has been upgraded from version 1.13 to 1.14. +.IP \(bu 4 +version has been upgraded from version 0.9928 to 0.9929. +.IP \(bu 4 +VMS::Filespec has been upgraded from version 1.12 to 1.13. +.IP \(bu 4 +VMS::Stdio has been upgraded from version 2.45 to 2.46. +.IP \(bu 4 +warnings has been upgraded from version 1.51 to 1.58. +.IP \(bu 4 +Win32 has been upgraded from version 0.57 to 0.59. +.IP \(bu 4 +XS::APItest has been upgraded from version 1.16 to 1.22. +.IP \(bu 4 +XS::Typemap has been upgraded from version 0.18 to 0.19. +.IP \(bu 4 +XSLoader has been upgraded from version 0.30 to 0.31. +.SH Documentation +.IX Header "Documentation" +.SS "New Documentation" +.IX Subsection "New Documentation" +\fIPorting/vote_admin_guide.pod\fR +.IX Subsection "Porting/vote_admin_guide.pod" +.PP +This document provides the process for administering an election or vote +within the Perl Core Team. +.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 +\fIperlapi\fR +.IX Subsection "perlapi" +.IP \(bu 4 +This has been cleaned up some, and more than 80% of the (previously +many) undocumented functions have now either been documented or deemed +to have been inappropriately marked as API. +.Sp +As always, Patches Welcome! +.PP +\fIperldeprecation\fR +.IX Subsection "perldeprecation" +.IP \(bu 4 +notes the new location for functions moved from Pod::Html to +Pod::Html::Util that are no longer intended to be used outside of core. +.PP +\fIperlexperiment\fR +.IX Subsection "perlexperiment" +.IP \(bu 4 +notes the \f(CW\*(C`:win32\*(C'\fR IO pseudolayer is removed (this happened in 5.35.2). +.PP +\fIperlgov\fR +.IX Subsection "perlgov" +.IP \(bu 4 +The election process has been finetuned to allow the vote to be skipped if there +are no more candidates than open seats. +.IP \(bu 4 +A special election is now allowed to be postponed for up to twelve weeks, for +example until a normal election. +.PP +\fIperlop\fR +.IX Subsection "perlop" +.IP \(bu 4 +now notes that an invocant only needs to be an object or class name +for method calls, not for subroutine references. +.PP +\fIperlre\fR +.IX Subsection "perlre" +.IP \(bu 4 +Updated to discourage the use of the /d regexp modifier. +.PP +\fIperlrun\fR +.IX Subsection "perlrun" +.IP \(bu 4 +\&\fB\-?\fR is now a synonym for \fB\-h\fR +.IP \(bu 4 +\&\fB\-g\fR is now a synonym for \fB\-0777\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 +Can't "%s" out of a "defer" block +.Sp +(F) An attempt was made to jump out of the scope of a defer block by using +a control-flow statement such as \f(CW\*(C`return\*(C'\fR, \f(CW\*(C`goto\*(C'\fR or a loop control. This is +not permitted. +.IP \(bu 4 +Can't modify \f(CW%s\fR in \f(CW%s\fR (for scalar +assignment to \f(CW\*(C`undef\*(C'\fR) +.Sp +Attempting to perform a scalar assignment to \f(CW\*(C`undef\*(C'\fR, for example via +\&\f(CW\*(C`undef = $foo;\*(C'\fR, previously triggered a fatal runtime error with the +message "Modification of a read-only value attempted." +It is more helpful to detect such attempted assignments prior to runtime, so +they are now compile time errors, resulting in the message "Can't modify undef +operator in scalar assignment". +.IP \(bu 4 +panic: newFORLOOP, \f(CW%s\fR +.Sp +The parser failed an internal consistency check while trying to parse +a \f(CW\*(C`foreach\*(C'\fR loop. +.PP +\fINew Warnings\fR +.IX Subsection "New Warnings" +.IP \(bu 4 +Built-in function '%s' is experimental +.Sp +A call is being made to a function in the \f(CW\*(C`builtin::\*(C'\fR namespace, which is +currently experimental. +.IP \(bu 4 +defer is experimental +.Sp +The \f(CW\*(C`defer\*(C'\fR block modifier is experimental. If you want to use the feature, +disable the warning with \f(CW\*(C`no warnings \*(Aqexperimental::defer\*(Aq\*(C'\fR, but know that in +doing so you are taking the risk that your code may break in a future Perl +version. +.IP \(bu 4 +Downgrading a use VERSION declaration to below v5.11 is deprecated +.Sp +This warning is emitted on a \f(CW\*(C`use VERSION\*(C'\fR statement that +requests a version below v5.11 (when the effects of \f(CW\*(C`use strict\*(C'\fR would be +disabled), after a previous declaration of one having a larger number (which +would have enabled these effects) +.IP \(bu 4 +for my (...) is experimental +.Sp +This warning is emitted if you use \f(CW\*(C`for\*(C'\fR to iterate multiple values at +a time. This syntax is currently experimental and its behaviour may +change in future releases of Perl. +.IP \(bu 4 +Implicit use of \f(CW@_\fR in \f(CW%s\fR with signatured subroutine is experimental +.Sp +An expression that implicitly involves the \f(CW@_\fR arguments array was found in +a subroutine that uses a signature. +.IP \(bu 4 +Use of \f(CW@_\fR in \f(CW%s\fR with signatured subroutine is experimental +.Sp +An expression involving the \f(CW@_\fR arguments array was found in a subroutine that uses a signature. +.IP \(bu 4 +Wide character in \f(CW$0\fR +.Sp +Attempts to put wide characters into the program name (\f(CW$0\fR) now provoke this +warning. +.SS "Changes to Existing Diagnostics" +.IX Subsection "Changes to Existing Diagnostics" +.IP \(bu 4 +\&'/' does not take a repeat count in \f(CW%s\fR +.Sp +This warning used to not include the \f(CW\*(C`in %s\*(C'\fR. +.IP \(bu 4 +Subroutine \f(CW%s\fR redefined +.Sp +Localized subroutine redefinitions no longer trigger this warning. +.IP \(bu 4 +unexpected constant lvalue entersub entry via type/targ \f(CW%d:\fR%d" now has a panic prefix +.Sp +This makes it consistent with other checks of internal consistency when +compiling a subroutine. +.IP \(bu 4 +Useless use of sort in scalar context is now in the new \f(CW\*(C`scalar\*(C'\fR category. +.Sp +When \f(CW\*(C`sort\*(C'\fR is used in scalar context, it provokes a warning that doing this +is not useful. This warning used to be in the \f(CW\*(C`void\*(C'\fR category. A new category +for warnings about scalar context has now been added, called \f(CW\*(C`scalar\*(C'\fR. +.IP \(bu 4 +Removed a number of diagnostics +.Sp +Many diagnostics that have been removed from the perl core across many years +have now \fIalso\fR been removed from the documentation. +.SH "Configuration and Compilation" +.IX Header "Configuration and Compilation" +.IP \(bu 4 +The Perl C source code now uses some C99 features, which we have verified are +supported by all compilers we target. This means that Perl's headers now +contain some code that is legal in C99 but not C89. +.Sp +This may cause problems for some XS modules that unconditionally add +\&\f(CW\*(C`\-Werror=declaration\-after\-statement\*(C'\fR to their C compiler flags if compiling +with gcc or clang. Earlier versions of Perl support long obsolete compilers +that are strict in rejecting certain C99 features, particularly mixed +declarations and code, and hence it makes sense for XS module authors to audit +that their code does not violate this. However, doing this is now only +possible on these earlier versions of Perl, hence these modules need to be +changed to only add this flag for \f(CW\*(C`$] < 5.035005\*(C'\fR. +.IP \(bu 4 +The makedepend step is now run in parallel by using make +.Sp +When using MAKEFLAGS=\-j8, this significantly reduces the time required for: +.Sp +.Vb 1 +\& sh ./makedepend MAKE=make cflags +.Ve +.IP \(bu 4 +\&\fIConfigure\fR now tests whether \f(CW\*(C`#include <xlocale.h>\*(C'\fR is required +to use the POSIX 1003 thread-safe locale functions or some related +extensions. This prevents problems where a non-public \fIxlocale.h\fR is +removed in a library update, or \fIxlocale.h\fR isn't intended for public +use. (github #18936 <https://github.com/Perl/perl5/pull/18936>) +.SH Testing +.IX Header "Testing" +Tests were added and changed to reflect the other additions and changes +in this release. +.SH "Platform Support" +.IX Header "Platform Support" +.SS Windows +.IX Subsection "Windows" +.IP \(bu 4 +Support for old MSVC++ (pre\-VC12) has been removed +.Sp +These did not support C99 and hence can no longer be used to compile perl. +.IP \(bu 4 +Support for compiling perl on Windows using Microsoft Visual Studio 2022 +(containing Visual C++ 14.3) has been added. +.IP \(bu 4 +The :win32 IO layer has been removed. This experimental replacement for the +:unix layer never reached maturity in its nearly two decades of existence. +.SS VMS +.IX Subsection "VMS" +.ie n .IP """keys %ENV"" on VMS returns consistent results" 4 +.el .IP "\f(CWkeys %ENV\fR on VMS returns consistent results" 4 +.IX Item "keys %ENV on VMS returns consistent results" +On VMS entries in the \f(CW%ENV\fR hash are loaded from the OS environment on +first access, hence the first iteration of \f(CW%ENV\fR requires the entire +environment to be scanned to find all possible keys. This initialisation had +always been done correctly for full iteration, but previously was not +happening for \f(CW%ENV\fR in scalar context, meaning that \f(CW\*(C`scalar %ENV\*(C'\fR would +return 0 if called before any other \f(CW%ENV\fR access, or would only return the +count of keys accessed if there had been no iteration. +.Sp +These bugs are now fixed \- \f(CW%ENV\fR and \f(CW\*(C`keys %ENV\*(C'\fR in scalar context now +return the correct result \- the count of all keys in the environment. +.SS "Discontinued Platforms" +.IX Subsection "Discontinued Platforms" +.IP "AT&T UWIN" 4 +.IX Item "AT&T UWIN" +UWIN is a UNIX compatibility layer for Windows. It was last released +in 2012 and has been superseded by Cygwin these days. +.IP DOS/DJGPP 4 +.IX Item "DOS/DJGPP" +DJGPP is a port of the GNU toolchain to 32\-bit x86 systems running +DOS. The last known attempt to build Perl on it was on 5.20, which +only got as far as building miniperl. +.IP NetWare 4 +.IX Item "NetWare" +Support code for Novell NetWare has been removed. NetWare was a +server operating system by Novell. The port was last updated in July +2002, and the platform itself in May 2009. +.Sp +Unrelated changes accidentally broke the build for the NetWare port in +September 2009, and in 12 years no-one has reported this. +.SS "Platform-Specific Notes" +.IX Subsection "Platform-Specific Notes" +.IP z/OS 4 +.IX Item "z/OS" +This update enables us to build EBCDIC static/dynamic and 31\-bit/64\-bit +addressing mode Perl. The number of tests that pass is consistent with the +baseline before these updates. +.Sp +These changes also provide the base support to be able to provide ASCII +static/dynamic and 31\-bit/64\-bit addressing mode Perl. +.Sp +The z/OS (previously called OS/390) README was updated to describe ASCII and +EBCDIC builds. +.SH "Internal Changes" +.IX Header "Internal Changes" +.IP \(bu 4 +Since the removal of PERL_OBJECT in Perl 5.8, PERL_IMPLICIT_CONTEXT and +MULTIPLICITY have been synonymous and they were being used interchangeably. +To simplify the code, all instances of PERL_IMPLICIT_CONTEXT have been +replaced with MULTIPLICITY. +.Sp +PERL_IMPLICIT_CONTEXT will remain defined for compatibility with XS modules. +.IP \(bu 4 +The API constant formerly named \f(CW\*(C`G_ARRAY\*(C'\fR, indicating list context, has now +been renamed to a more accurate \f(CW\*(C`G_LIST\*(C'\fR. A compatibilty macro \f(CW\*(C`G_ARRAY\*(C'\fR has +been added to allow existing code to work unaffected. New code should be +written using the new constant instead. This is supported by \f(CW\*(C`Devel::PPPort\*(C'\fR +version 3.63. +.IP \(bu 4 +Macros have been added to \fIperl.h\fR to facilitate version comparisons: +\&\f(CW\*(C`PERL_GCC_VERSION_GE\*(C'\fR, \f(CW\*(C`PERL_GCC_VERSION_GT\*(C'\fR, \f(CW\*(C`PERL_GCC_VERSION_LE\*(C'\fR and +\&\f(CW\*(C`PERL_GCC_VERSION_LT\*(C'\fR. +.Sp +Inline functions have been added to \fIembed.h\fR to determine the position of +the least significant 1 bit in a word: \f(CW\*(C`lsbit_pos32\*(C'\fR and \f(CW\*(C`lsbit_pos64\*(C'\fR. +.IP \(bu 4 +\&\f(CW\*(C`Perl_ptr_table_clear\*(C'\fR has been deleted. This has been marked as deprecated +since v5.14.0 (released in 2011), and is not used by any code on CPAN. +.IP \(bu 4 +Added new boolean macros and functions. See "Stable boolean tracking" for +related information and perlapi for documentation. +.RS 4 +.IP \(bu 4 +sv_setbool +.IP \(bu 4 +sv_setbool_mg +.IP \(bu 4 +SvIsBOOL +.RE +.RS 4 +.RE +.IP \(bu 4 +Added 4 missing functions for dealing with RVs: +.RS 4 +.IP \(bu 4 +sv_setrv_noinc +.IP \(bu 4 +sv_setrv_noinc_mg +.IP \(bu 4 +sv_setrv_inc +.IP \(bu 4 +sv_setrv_inc_mg +.RE +.RS 4 +.RE +.IP \(bu 4 +\&\f(CWxs_handshake()\fR's two failure modes now provide distinct messages. +.IP \(bu 4 +Memory for hash iterator state (\f(CW\*(C`struct xpvhv_aux\*(C'\fR) is now allocated as part +of the hash body, instead of as part of the block of memory allocated for the +main hash array. +.IP \(bu 4 +A new \fBphase_name()\fR interface provides access to the name for each interpreter +phase (i.e., PL_phase value). +.IP \(bu 4 +The \f(CW\*(C`pack\*(C'\fR behavior of \f(CW\*(C`U\*(C'\fR has changed for EBCDIC. +.IP \(bu 4 +New equality-test functions \f(CW\*(C`sv_numeq\*(C'\fR and \f(CW\*(C`sv_streq\*(C'\fR have been added, along +with \f(CW\*(C`..._flags\*(C'\fR\-suffixed variants. These expose a simple and consistent API +to perform numerical or string comparison which is aware of operator +overloading. +.IP \(bu 4 +Reading the string form of an integer value no longer sets the flag \f(CW\*(C`SVf_POK\*(C'\fR. +The string form is still cached internally, and still re-read directly by the +macros \f(CWSvPV(sv)\fR \fIetc\fR (inline, without calling a C function). XS code that +already calls the APIs to get values will not be affected by this change. XS +code that accesses flags directly instead of using API calls to express its +intent \fImight\fR break, but such code likely is already buggy if passed some +other values, such as floating point values or objects with string overloading. +.Sp +This small change permits code (such as JSON serializers) to reliably determine +between +.RS 4 +.IP \(bu 4 +a value that was initially \fBwritten\fR as an integer, but then \fBread\fR as a string +.Sp +.Vb 2 +\& my $answer = 42; +\& print "The answer is $answer\en"; +.Ve +.IP \(bu 4 +that same value that was initially \fBwritten\fR as a string, but then \fBread\fR as an integer +.Sp +.Vb 3 +\& my $answer = "42"; +\& print "That doesn\*(Aqt look right\en" +\& unless $answer == 6 * 9; +.Ve +.RE +.RS 4 +.Sp +For the first case (originally written as an integer), we now have: +.Sp +.Vb 6 +\& use Devel::Peek; +\& my $answer = 42; +\& Dump ($answer); +\& my $void = "$answer"; +\& print STDERR "\en"; +\& Dump($answer) +\& +\& +\& SV = IV(0x562538925778) at 0x562538925788 +\& REFCNT = 1 +\& FLAGS = (IOK,pIOK) +\& IV = 42 +\& +\& SV = PVIV(0x5625389263c0) at 0x562538925788 +\& REFCNT = 1 +\& FLAGS = (IOK,pIOK,pPOK) +\& IV = 42 +\& PV = 0x562538919b50 "42"\e0 +\& CUR = 2 +\& LEN = 10 +.Ve +.Sp +For the second (originally written as a string), we now have: +.Sp +.Vb 6 +\& use Devel::Peek; +\& my $answer = "42"; +\& Dump ($answer); +\& my $void = $answer == 6 * 9; +\& print STDERR "\en"; +\& Dump($answer)\*(Aq +\& +\& +\& SV = PV(0x5586ffe9bfb0) at 0x5586ffec0788 +\& REFCNT = 1 +\& FLAGS = (POK,IsCOW,pPOK) +\& PV = 0x5586ffee7fd0 "42"\e0 +\& CUR = 2 +\& LEN = 10 +\& COW_REFCNT = 1 +\& +\& SV = PVIV(0x5586ffec13c0) at 0x5586ffec0788 +\& REFCNT = 1 +\& FLAGS = (IOK,POK,IsCOW,pIOK,pPOK) +\& IV = 42 +\& PV = 0x5586ffee7fd0 "42"\e0 +\& CUR = 2 +\& LEN = 10 +\& COW_REFCNT = 1 +.Ve +.Sp +(One can't rely on the presence or absence of the flag \f(CW\*(C`SVf_IsCOW\*(C'\fR to +determine the history of operations on a scalar.) +.Sp +Previously both cases would be indistinguishable, with all 4 flags set: +.Sp +.Vb 7 +\& SV = PVIV(0x55d4d62edaf0) at 0x55d4d62f0930 +\& REFCNT = 1 +\& FLAGS = (IOK,POK,pIOK,pPOK) +\& IV = 42 +\& PV = 0x55d4d62e1740 "42"\e0 +\& CUR = 2 +\& LEN = 10 +.Ve +.Sp +(and possibly \f(CW\*(C`SVf_IsCOW\*(C'\fR, but not always) +.Sp +This now means that if XS code \fIreally\fR needs to determine which form a value +was first written as, it should implement logic roughly +.Sp +.Vb 6 +\& if (flags & SVf_IOK|SVf_NOK) && !(flags & SVf_POK) +\& serialize as number +\& else if (flags & SVf_POK) +\& serialize as string +\& else +\& the existing guesswork ... +.Ve +.Sp +Note that this doesn't cover "dualvars" \- scalars that report different +values when asked for their string form or number form (such as \f(CW$!\fR). +Most serialization formats cannot represent such duplicity. +.Sp +\&\fIThe existing guesswork\fR remains because as well as dualvars, values might +be \f(CW\*(C`undef\*(C'\fR, references, overloaded references, typeglobs and other things that +Perl itself can represent but do not map one-to-one into external formats, so +need some amount of approximation or encapsulation. +.RE +.IP \(bu 4 +\&\f(CW\*(C`sv_dump\*(C'\fR (and Devel::Peek’s \f(CW\*(C`Dump\*(C'\fR function) now escapes high-bit +octets in the PV as hex rather than octal. Since most folks understand hex +more readily than octal, this should make these dumps a bit more legible. +This does \fBnot\fR affect any other diagnostic interfaces like \f(CW\*(C`pv_display\*(C'\fR. +.SH "Selected Bug Fixes" +.IX Header "Selected Bug Fixes" +.IP \(bu 4 +\&\fButime()\fR now correctly sets errno/\f(CW$!\fR when called on a closed handle. +.IP \(bu 4 +The flags on the OPTVAL parameter to \fBsetsockopt()\fR were previously +checked before magic was called, possibly treating a numeric value as +a packed buffer or vice versa. It also ignored the UTF\-8 flag, +potentially treating the internal representation of an upgraded SV as +the bytes to supply to the \fBsetsockopt()\fR system call. (github #18660 <https://github.com/Perl/perl5/issues/18660>) +.IP \(bu 4 +Only set IOKp, not IOK on $) and $(. +This was issue #18955 <https://github.com/Perl/perl5/issues/18955>: This will prevent serializers from serializing these +variables as numbers (which loses the additional groups). +This restores behaviour from 5.16 +.IP \(bu 4 +Use of the \f(CW\*(C`mktables\*(C'\fR debugging facility would cause perl to croak since +v5.31.10; this problem has now been fixed. +.IP \(bu 4 +\&\f(CW\*(C`makedepend\*(C'\fR logic is now compatible with BSD make (fixes +GH #19046 <https://github.com/Perl/perl5/issues/19046>). +.IP \(bu 4 +Calling \f(CW\*(C`untie\*(C'\fR on a tied hash that is partway through iteration now frees the +iteration state immediately. +.Sp +Iterating a tied hash causes perl to store a copy of the current hash key to +track the iteration state, with this stored copy passed as the second parameter +to \f(CW\*(C`NEXTKEY\*(C'\fR. This internal state is freed immediately when tie hash iteration +completes, or if the hash is destroyed, but due to an implementation oversight, +it was not freed if the hash was untied. In that case, the internal copy of the +key would persist until the earliest of +.RS 4 +.IP 1. 4 +\&\f(CW\*(C`tie\*(C'\fR was called again on the same hash +.IP 2. 4 +The (now untied) hash was iterated (ie passed to any of \f(CW\*(C`keys\*(C'\fR, \f(CW\*(C`values\*(C'\fR or +\&\f(CW\*(C`each\*(C'\fR) +.IP 3. 4 +The hash was destroyed. +.RE +.RS 4 +.Sp +This inconsistency is now fixed \- the internal state is now freed immediately by +\&\f(CW\*(C`untie\*(C'\fR. +.Sp +As the precise timing of this behaviour can be observed with pure Perl code +(the timing of \f(CW\*(C`DESTROY\*(C'\fR on objects returned from \f(CW\*(C`FIRSTKEY\*(C'\fR and \f(CW\*(C`NEXTKEY\*(C'\fR) +it's just possible that some code is sensitive to it. +.RE +.IP \(bu 4 +The \f(CWInternals::getcwd()\fR function added for bootstrapping miniperl +in perl 5.30.0 is now only available in miniperl. [github #19122] +.IP \(bu 4 +Setting a breakpoint on a BEGIN or equivalently a \f(CW\*(C`use\*(C'\fR statement +could cause a memory write to a freed \f(CW\*(C`dbstate\*(C'\fR op. +[GH #19198 <https://github.com/Perl/perl5/issues/19198>] +.IP \(bu 4 +When bareword filehandles are disabled, the parser was interpreting +any bareword as a filehandle, even when immediatey followed by parens. +.SH "Errata From Previous Releases" +.IX Header "Errata From Previous Releases" +.IP \(bu 4 +perl5300delta mistakenly identified a CVE whose correct identification is +CVE\-2015\-1592. +.SH Obituaries +.IX Header "Obituaries" +Raun "Spider" Boardman (SPIDB on CPAN), author of at least 66 commits to the +Perl 5 core distribution between 1996 and 2002, passed away May 24, 2021 from +complications of COVID. He will be missed. +.PP +David H. Adler (DHA) passed away on November 16, 2021. In 1997, David +co-founded NY.pm, the first Perl user group, and in 1998 co-founded Perl +Mongers to help establish other user groups across the globe. He was a +frequent attendee at Perl conferences in both North America and Europe and well +known for his role in organizing \fIBad Movie Night\fR celebrations at those +conferences. He also contributed to the work of the Perl Foundation, including +administering the White Camel awards for community service. He will be missed. +.SH Acknowledgements +.IX Header "Acknowledgements" +Perl 5.36.0 represents approximately a year of development since Perl +5.34.0 and contains approximately 250,000 lines of changes across 2,000 +files from 82 authors. +.PP +Excluding auto-generated files, documentation and release tools, there were +approximately 190,000 lines of changes to 1,300 .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.36.0: +.PP +Alyssa Ross, Andrew Fresh, Aristotle Pagaltzis, Asher Mancinelli, Atsushi +Sugawara, Ben Cornett, Bernd, Biswapriyo Nath, Brad Barden, Bram, Branislav +Zahradník, brian d foy, Chad Granum, Chris 'BinGOs' Williams, Christian +Walde (Mithaldu), Christopher Yeleighton, Craig A. Berry, cuishuang, Curtis +Poe, Dagfinn Ilmari Mannsåker, Dan Book, Daniel Laügt, Dan Jacobson, Dan +Kogai, Dave Cross, Dave Lambley, David Cantrell, David Golden, David +Marshall, David Mitchell, E. Choroba, Eugen Konkov, Felipe Gasper, François +Perrad, Graham Knop, H.Merijn Brand, Hugo van der Sanden, Ilya Sashcheka, +Ivan Panchenko, Jakub Wilk, James E Keenan, James Raspass, Karen Etheridge, +Karl Williamson, Leam Hall, Leon Timmermans, Magnus Woldrich, Matthew +Horsfall, Max Maischein, Michael G Schwern, Michiel Beijen, Mike Fulton, +Neil Bowers, Nicholas Clark, Nicolas R, Niyas Sait, Olaf Alders, Paul Evans, +Paul Marquess, Petar-Kaleychev, Pete Houston, Renee Baecker, Ricardo Signes, +Richard Leach, Robert Rothenberg, Sawyer X, Scott Baker, Sergey Poznyakoff, +Sergey Zhmylove, Sisyphus, Slaven Rezic, Steve Hay, Sven Kirmess, TAKAI +Kousuke, Thibault Duponchelle, Todd Rinaldo, Tomasz Konojacki, Tomoyuki +Sadahiro, Tony Cook, Unicode Consortium, Yves Orton, Михаил +Козачков. +.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 AUTHORS 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. |