1204dddbbSafresh1=encoding utf8 2204dddbbSafresh1 3204dddbbSafresh1=head1 NAME 4204dddbbSafresh1 5204dddbbSafresh1perl5360delta - what is new for perl v5.36.0 6204dddbbSafresh1 7204dddbbSafresh1=head1 DESCRIPTION 8204dddbbSafresh1 9204dddbbSafresh1This document describes differences between the 5.34.0 release and the 5.36.0 10204dddbbSafresh1release. 11204dddbbSafresh1 12204dddbbSafresh1=head1 Core Enhancements 13204dddbbSafresh1 14204dddbbSafresh1=head2 C<use v5.36> 15204dddbbSafresh1 16204dddbbSafresh1As always, C<use v5.36> turns on the feature bundle for that version of Perl. 17204dddbbSafresh1 18204dddbbSafresh1The 5.36 bundle enables the C<signatures> feature. Introduced in Perl version 19204dddbbSafresh15.20.0, and modified several times since, the subroutine signatures feature is 20204dddbbSafresh1now no longer considered experimental. It is now considered a stable language 21204dddbbSafresh1feature and no longer prints a warning. 22204dddbbSafresh1 23204dddbbSafresh1 use v5.36; 24204dddbbSafresh1 25204dddbbSafresh1 sub add ($x, $y) { 26204dddbbSafresh1 return $x + $y; 27204dddbbSafresh1 } 28204dddbbSafresh1 29204dddbbSafresh1Despite this, certain elements of signatured subroutines remain experimental; 30204dddbbSafresh1see below. 31204dddbbSafresh1 32204dddbbSafresh1The 5.36 bundle enables the C<isa> feature. Introduced in Perl version 5.32.0, 33204dddbbSafresh1this operator has remained unchanged since then. The operator is now considered 34204dddbbSafresh1a stable language feature. For more detail see L<perlop/Class Instance 35204dddbbSafresh1Operator>. 36204dddbbSafresh1 37204dddbbSafresh1The 5.36 bundle also I<disables> the features C<indirect>, and 38204dddbbSafresh1C<multidimensional>. These will forbid, respectively: the use of "indirect" 39204dddbbSafresh1method calls (like C<$x = new Class;>); the use of a list expression as a hash 40204dddbbSafresh1key to simulate sparse multidimensional arrays. The specifics of these changes 41204dddbbSafresh1can be found in L<feature>, but the short version is: this is a bit like having 42204dddbbSafresh1more C<use strict> turned on, disabling features that cause more trouble than 43204dddbbSafresh1they're worth. 44204dddbbSafresh1 45204dddbbSafresh1Furthermore, C<use v5.36> will also enable warnings as if you'd written C<use 46204dddbbSafresh1warnings>. 47204dddbbSafresh1 48204dddbbSafresh1Finally, with this release, the experimental C<switch> feature, present in 49204dddbbSafresh1every feature bundle since they were introduced in v5.10, has been removed from 50204dddbbSafresh1the v5.36 bundle. If you want to use it (against our advice), you'll have to 51204dddbbSafresh1enable it explicitly. 52204dddbbSafresh1 53204dddbbSafresh1=head2 -g command-line flag 54204dddbbSafresh1 55204dddbbSafresh1A new command-line flag, -g, is available. It is a simpler alias for -0777. 56204dddbbSafresh1 57204dddbbSafresh1For more information, see L<perlrun/-g>. 58204dddbbSafresh1 59204dddbbSafresh1=head2 Unicode 14.0 is supported 60204dddbbSafresh1 61204dddbbSafresh1See L<https://www.unicode.org/versions/Unicode14.0.0/> for details. 62204dddbbSafresh1 63204dddbbSafresh1=head2 regex sets are no longer considered experimental 64204dddbbSafresh1 65204dddbbSafresh1Prior to this release, the regex sets feature (officially named 66204dddbbSafresh1"Extended Bracketed Character Classes") was considered experimental. 67204dddbbSafresh1Introduced in Perl version 5.18.0, and modified several times since, 68204dddbbSafresh1this is now considered a stable language feature and its use no longer 69204dddbbSafresh1prints a warning. See L<perlrecharclass/Extended Bracketed Character 70204dddbbSafresh1Classes>. 71204dddbbSafresh1 72204dddbbSafresh1=head2 Variable length lookbehind is mostly no longer considered experimental 73204dddbbSafresh1 74204dddbbSafresh1Prior to this release, any form of variable length lookbehind was 75204dddbbSafresh1considered experimental. With this release the experimental status has 76204dddbbSafresh1been reduced to cover only lookbehind that contains capturing parenthesis. 77204dddbbSafresh1This is because it is not clear if 78204dddbbSafresh1 79204dddbbSafresh1 "aaz"=~/(?=z)(?<=(a|aa))/ 80204dddbbSafresh1 81204dddbbSafresh1should match and leave $1 equaling "a" or "aa". Currently it will match 82204dddbbSafresh1the longest possible alternative, "aa". While we are confident that the overall 83204dddbbSafresh1construct will now match only when it should, we are not confident that we 84204dddbbSafresh1will keep the current "longest match" behavior. 85204dddbbSafresh1 86204dddbbSafresh1=head2 SIGFPE no longer deferred 87204dddbbSafresh1 88204dddbbSafresh1Floating-point exceptions are now delivered immediately, in the same way 89204dddbbSafresh1as other "fault"-like signals such as SIGSEGV. This means one has at 90204dddbbSafresh1least a chance to catch such a signal with a C<$SIG{FPE}> handler, e.g. 91204dddbbSafresh1so that C<die> can report the line in perl that triggered it. 92204dddbbSafresh1 93204dddbbSafresh1=head2 Stable boolean tracking 94204dddbbSafresh1 95204dddbbSafresh1The "true" and "false" boolean values, often accessed by constructions like 96204dddbbSafresh1C<!!0> and C<!!1>, as well as being returned from many core functions and 97204dddbbSafresh1operators, now remember their boolean nature even through assignment into 98204dddbbSafresh1variables. The new function C<is_bool()> in L<builtin> can check whether 99204dddbbSafresh1a value has boolean nature. 100204dddbbSafresh1 101204dddbbSafresh1This is likely to be useful when interoperating with other languages or 102204dddbbSafresh1data-type serialisation, among other places. 103204dddbbSafresh1 104204dddbbSafresh1=head2 iterating over multiple values at a time (experimental) 105204dddbbSafresh1 106204dddbbSafresh1You can now iterate over multiple values at a time by specifying a list of 107204dddbbSafresh1lexicals within parentheses. For example, 108204dddbbSafresh1 109204dddbbSafresh1 for my ($key, $value) (%hash) { ... } 110204dddbbSafresh1 for my ($left, $right, $gripping) (@moties) { ... } 111204dddbbSafresh1 112204dddbbSafresh1Prior to perl v5.36, attempting to specify a list after C<for my> was a syntax 113204dddbbSafresh1error. 114204dddbbSafresh1 115204dddbbSafresh1This feature is currently experimental and will cause a warning of category 116204dddbbSafresh1C<experimental::for_list>. For more detail see L<perlsyn/Compound Statements>. 117204dddbbSafresh1See also L</builtin::indexed> in this document, which is a handy companion to 118204dddbbSafresh1n-at-a-time foreach. 119204dddbbSafresh1 120204dddbbSafresh1=head2 builtin functions (experimental) 121204dddbbSafresh1 122204dddbbSafresh1A new core module L<builtin> has been added, which provides documentation for 123204dddbbSafresh1new always-present functions that are built into the interpreter. 124204dddbbSafresh1 125204dddbbSafresh1 say "Reference type of arrays is ", builtin::reftype([]); 126204dddbbSafresh1 127204dddbbSafresh1It also provides a lexical import mechanism for providing short name versions 128204dddbbSafresh1of these functions. 129204dddbbSafresh1 130204dddbbSafresh1 use builtin 'reftype'; 131204dddbbSafresh1 say "Reference type of arrays is ", reftype([]); 132204dddbbSafresh1 133204dddbbSafresh1This builtin function mechanism and the functions it provides are all 134204dddbbSafresh1currently B<experimental>. We expect that C<builtin> itself will cease to be 135204dddbbSafresh1experimental in the near future, but that individual functions in it may become 136204dddbbSafresh1stable on an ongoing basis. Other functions will be added to C<builtin> over 137204dddbbSafresh1time. 138204dddbbSafresh1 139204dddbbSafresh1For details, see L<builtin>, but here's a summary of builtin functions in 140204dddbbSafresh1v5.36: 141204dddbbSafresh1 142204dddbbSafresh1=over 4 143204dddbbSafresh1 144204dddbbSafresh1=item builtin::trim 145204dddbbSafresh1 146204dddbbSafresh1This function treats its argument as a string, returning the result of removing 147204dddbbSafresh1all white space at its beginning and ending. 148204dddbbSafresh1 149204dddbbSafresh1=item builtin::indexed 150204dddbbSafresh1 151204dddbbSafresh1This function returns a list twice as big as its argument list, where each item 152204dddbbSafresh1is preceded by its index within that list. This is primarily useful for using 153204dddbbSafresh1the new C<foreach> syntax with multiple iterator variables to iterate over an 154204dddbbSafresh1array or list, while also tracking the index of each item: 155204dddbbSafresh1 156204dddbbSafresh1 use builtin 'indexed'; 157204dddbbSafresh1 158204dddbbSafresh1 foreach my ($index, $val) (indexed @array) { 159204dddbbSafresh1 ... 160204dddbbSafresh1 } 161204dddbbSafresh1 162204dddbbSafresh1=item builtin::true, builtin::false, builtin::is_bool 163204dddbbSafresh1 164204dddbbSafresh1C<true> and C<false> return boolean true and false values. Perl is still perl, 165204dddbbSafresh1and doesn't have strict typing of booleans, but these values will be known to 166204dddbbSafresh1have been created as booleans. C<is_bool> will tell you whether a value was 167204dddbbSafresh1known to have been created as a boolean. 168204dddbbSafresh1 169204dddbbSafresh1=item builtin::weaken, builtin::unweaken, builtin::is_weak 170204dddbbSafresh1 171204dddbbSafresh1These functions will, respectively: weaken a reference; strengthen a reference; 172204dddbbSafresh1and return whether a reference is weak. (A weak reference is not counted for 173204dddbbSafresh1garbage collection purposes. See L<perlref>.) These can take the place of 174204dddbbSafresh1some similar routines in L<Scalar::Util>. 175204dddbbSafresh1 176204dddbbSafresh1=item builtin::blessed, builtin::refaddr, builtin::reftype 177204dddbbSafresh1 178204dddbbSafresh1These functions provide more data about references (or non-references, 179204dddbbSafresh1actually!) and can take the place of similar routines found in L<Scalar::Util>. 180204dddbbSafresh1 181204dddbbSafresh1=item builtin::ceil, builtin::floor 182204dddbbSafresh1 183204dddbbSafresh1C<ceil> returns the smallest integer greater than or equal to its argument. 184204dddbbSafresh1C<floor> returns the largest integer less than or equal to its argument. These 185204dddbbSafresh1can take the place of similar routines found in L<POSIX>. 186204dddbbSafresh1 187204dddbbSafresh1=back 188204dddbbSafresh1 189204dddbbSafresh1=head2 C<defer> blocks (experimental) 190204dddbbSafresh1 191204dddbbSafresh1This release adds support for C<defer> blocks, which are blocks of code 192204dddbbSafresh1prefixed by the C<defer> modifier. They provide a section of code which runs 193204dddbbSafresh1at a later time, during scope exit. 194204dddbbSafresh1 195204dddbbSafresh1In brief, when a C<defer> block is reached at runtime, its body is set aside to 196204dddbbSafresh1be run when the enclosing scope is exited. It is unlike a UNITCHECK (among 197204dddbbSafresh1other reasons) in that if the block I<containing> the C<defer> block is exited 198204dddbbSafresh1before the block is reached, it will not be run. 199204dddbbSafresh1 200204dddbbSafresh1C<defer> blocks can be used to take the place of "scope guard" objects where an 201204dddbbSafresh1object is passed a code block to be run by its destructor. 202204dddbbSafresh1 203204dddbbSafresh1For more information, see L<perlsyn/"defer blocks">. 204204dddbbSafresh1 205204dddbbSafresh1=head2 try/catch can now have a C<finally> block (experimental) 206204dddbbSafresh1 207204dddbbSafresh1The experimental C<try>/C<catch> syntax has been extended to support an 208204dddbbSafresh1optional third block introduced by the C<finally> keyword. 209204dddbbSafresh1 210204dddbbSafresh1 try { 211204dddbbSafresh1 attempt(); 212204dddbbSafresh1 print "Success\n"; 213204dddbbSafresh1 } 214204dddbbSafresh1 catch ($e) { 215204dddbbSafresh1 print "Failure\n"; 216204dddbbSafresh1 } 217204dddbbSafresh1 finally { 218204dddbbSafresh1 print "This happens regardless\n"; 219204dddbbSafresh1 } 220204dddbbSafresh1 221204dddbbSafresh1This provides code which runs at the end of the C<try>/C<catch> construct, 222204dddbbSafresh1even if aborted by an exception or control-flow keyword. They are similar 223204dddbbSafresh1to C<defer> blocks. 224204dddbbSafresh1 225204dddbbSafresh1For more information, see L<perlsyn/"Try Catch Exception Handling">. 226204dddbbSafresh1 227204dddbbSafresh1=head2 non-ASCII delimiters for quote-like operators (experimental) 228204dddbbSafresh1 229204dddbbSafresh1Perl traditionally has allowed just four pairs of string/pattern 230204dddbbSafresh1delimiters: S<C<( )>> S<C<{ }>> S<C<[ ]>> and S<C<< < > >>>, all in the 231204dddbbSafresh1ASCII range. Unicode has hundreds more possibilities, and using this 232204dddbbSafresh1feature enables many of them. When enabled, you can say S<C<qr« »>> for 233204dddbbSafresh1example, or S<C<use utf8; qstring>>. See L<feature/The 234204dddbbSafresh1'extra_paired_delimiters' feature> for details. 235204dddbbSafresh1 236204dddbbSafresh1=head2 @_ is now experimental within signatured subs 237204dddbbSafresh1 238204dddbbSafresh1Even though subroutine signatures are now stable, use of the legacy arguments 239204dddbbSafresh1array (C<@_>) with a subroutine that has a signature I<remains> experimental, 240204dddbbSafresh1with its own warning category. Silencing the C<experimental::signatures> 241204dddbbSafresh1warning category is not sufficient to dismiss this. The new warning is emitted 242204dddbbSafresh1with the category name C<experimental::args_array_with_signatures>. 243204dddbbSafresh1 244204dddbbSafresh1Any subroutine that has a signature and tries to make use of the defaults 245204dddbbSafresh1argument array or an element thereof (C<@_> or C<$_[INDEX]>), either 246204dddbbSafresh1explicitly or implicitly (such as C<shift> or C<pop> with no argument) will 247204dddbbSafresh1provoke a warning at compile-time: 248204dddbbSafresh1 249204dddbbSafresh1 use v5.36; 250204dddbbSafresh1 251204dddbbSafresh1 sub f ($x, $y = 123) { 252204dddbbSafresh1 say "The first argument is $_[0]"; 253204dddbbSafresh1 } 254204dddbbSafresh1 255204dddbbSafresh1Z<> 256204dddbbSafresh1 257204dddbbSafresh1 Use of @_ in array element with signatured subroutine is experimental 258204dddbbSafresh1 at file.pl line 4. 259204dddbbSafresh1 260204dddbbSafresh1The behaviour of code which attempts to do this is no longer specified, and 261204dddbbSafresh1may be subject to change in a future version. 262204dddbbSafresh1 263204dddbbSafresh1=head1 Incompatible Changes 264204dddbbSafresh1 265204dddbbSafresh1=head2 A physically empty sort is now a compile-time error 266204dddbbSafresh1 267204dddbbSafresh1 @a = sort @empty; # unaffected 268204dddbbSafresh1 @a = sort; # now a compile-time error 269204dddbbSafresh1 @a = sort (); # also a compile-time error 270204dddbbSafresh1 271204dddbbSafresh1A bare sort used to be a weird way to create an empty list; now it croaks 272204dddbbSafresh1at compile time. This change is intended to free up some of the syntax space 273204dddbbSafresh1for possible future enhancements to C<sort>. 274204dddbbSafresh1 275204dddbbSafresh1=head1 Deprecations 276204dddbbSafresh1 277204dddbbSafresh1=head2 C<use VERSION> (where VERSION is below v5.11) after C<use v5.11> is deprecated 278204dddbbSafresh1 279204dddbbSafresh1When in the scope of C<use v5.11> or later, a C<use vX> line where I<X> is 280204dddbbSafresh1lower than v5.11 will now issue a warning: 281204dddbbSafresh1 282204dddbbSafresh1 Downgrading a use VERSION declaration to below v5.11 is deprecated 283204dddbbSafresh1 284204dddbbSafresh1For example: 285204dddbbSafresh1 286204dddbbSafresh1 use v5.14; 287204dddbbSafresh1 say "The say statement is permitted"; 288204dddbbSafresh1 use v5.8; # This will print a warning 289204dddbbSafresh1 print "We must use print\n"; 290204dddbbSafresh1 291204dddbbSafresh1This is because the Perl team plans to change the behavior in this case. Since 292204dddbbSafresh1Perl v5.12 (and parts of v5.11), strict is enabled I<unless it had previously 293204dddbbSafresh1been disabled>. In other words: 294204dddbbSafresh1 295204dddbbSafresh1 no strict; 296204dddbbSafresh1 use v5.12; # will not enable strict, because "no strict" preceded it 297204dddbbSafresh1 $x = 1; # permitted, despite no "my" declaration 298204dddbbSafresh1 299204dddbbSafresh1In the future, this behavior will be eliminated and C<use VERSION> will 300204dddbbSafresh1I<always> enable strict for versions v5.12 and later. 301204dddbbSafresh1 302204dddbbSafresh1Code which wishes to mix versions in this manner should use lexical scoping 303204dddbbSafresh1with block syntax to ensure that the differently versioned regions remain 304204dddbbSafresh1lexically isolated. 305204dddbbSafresh1 306204dddbbSafresh1 { 307204dddbbSafresh1 use v5.14; 308204dddbbSafresh1 say "The say statement is permitted"; 309204dddbbSafresh1 } 310204dddbbSafresh1 311204dddbbSafresh1 { 312204dddbbSafresh1 use v5.8; # No warning is emitted 313204dddbbSafresh1 print "We must use print\n"; 314204dddbbSafresh1 } 315204dddbbSafresh1 316204dddbbSafresh1Of course, this is probably not something you ever need to do! If the first 317204dddbbSafresh1block compiles, it means you're using perl v5.14.0 or later. 318204dddbbSafresh1 319204dddbbSafresh1=head1 Performance Enhancements 320204dddbbSafresh1 321204dddbbSafresh1=over 4 322204dddbbSafresh1 323204dddbbSafresh1=item * 324204dddbbSafresh1 325204dddbbSafresh1We now probe for compiler support for C11 thread local storage, and where 326204dddbbSafresh1available use this for "implicit context" for XS extensions making API calls for 327204dddbbSafresh1a threaded Perl build. This requires fewer function calls at the C level than 328*e0680481Safresh1POSIX thread specific storage. We continue to use the pthreads approach if 329204dddbbSafresh1the C11 approach is not available. 330204dddbbSafresh1 331204dddbbSafresh1F<Configure> run with the defaults will build an unthreaded Perl (which is 332204dddbbSafresh1slightly faster), but most operating systems ship a threaded Perl. 333204dddbbSafresh1 334204dddbbSafresh1=item * 335204dddbbSafresh1 336204dddbbSafresh1Perl can now be configured to no longer allocate keys for large hashes 337204dddbbSafresh1from the shared string table. 338204dddbbSafresh1 339204dddbbSafresh1The same internal datatype (C<PVHV>) is used for all of 340204dddbbSafresh1 341204dddbbSafresh1=over 4 342204dddbbSafresh1 343204dddbbSafresh1=item * 344204dddbbSafresh1 345204dddbbSafresh1Symbol tables 346204dddbbSafresh1 347204dddbbSafresh1=item * 348204dddbbSafresh1 349204dddbbSafresh1Objects (by default) 350204dddbbSafresh1 351204dddbbSafresh1=item * 352204dddbbSafresh1 353204dddbbSafresh1Associative arrays 354204dddbbSafresh1 355204dddbbSafresh1=back 356204dddbbSafresh1 357204dddbbSafresh1The shared string table was originally added to improve performance for blessed 358204dddbbSafresh1hashes used as objects, because every object instance has the same keys, so it 359204dddbbSafresh1is an optimisation to share memory between them. It also makes sense for symbol 360204dddbbSafresh1tables, where derived classes will have the same keys (typically method names), 361204dddbbSafresh1and the OP trees built for method calls can also share memory. The shared 362204dddbbSafresh1string table behaves roughly like a cache for hash keys. 363204dddbbSafresh1 364204dddbbSafresh1But for hashes actually used as associative arrays - mapping keys to values - 365204dddbbSafresh1typically the keys are not re-used in other hashes. For example, "seen" hashes 366204dddbbSafresh1are keyed by object IDs (or addresses), and logically these keys won't repeat 367204dddbbSafresh1in other hashes. 368204dddbbSafresh1 369204dddbbSafresh1Storing these "used just once" keys in the shared string table increases CPU 370204dddbbSafresh1and RAM use for no gain. For such keys the shared string table behaves as a 371204dddbbSafresh1cache with a 0% hit rate. Storing all the keys there increases the total size 372204dddbbSafresh1of the shared string table, as well as increasing the number of times it is 373204dddbbSafresh1resized as it grows. B<Worse> - in any environment that has "copy on write" 374204dddbbSafresh1memory for child process (such as a pre-forking server), the memory pages used 375204dddbbSafresh1for the shared string table rapidly need to be copied as the child process 376204dddbbSafresh1manipulates hashes. Hence if most of the shared string table is such that keys 377204dddbbSafresh1are used only in one place, there is no benefit from re-use within the perl 378204dddbbSafresh1interpreter, but a high cost due to more pages for the OS to copy. 379204dddbbSafresh1 380204dddbbSafresh1The perl interpreter can now be Configured to disable shared hash keys 381204dddbbSafresh1for "large" hashes (that are neither objects nor symbol tables). To do 382204dddbbSafresh1so, add C<-Accflags='-DPERL_USE_UNSHARED_KEYS_IN_LARGE_HASHES'> to 383204dddbbSafresh1your F<Configure> options. "Large" is a heuristic -- currently the 384204dddbbSafresh1heuristic is that sharing is disabled when adding a key to a hash 385204dddbbSafresh1triggers allocation of more storage, and the hash has more than 42 keys. 386204dddbbSafresh1 387204dddbbSafresh1This B<might> cause slightly increased memory usage for programs that create 388204dddbbSafresh1(unblessed) data structures that contain multiple large hashes that share the 389204dddbbSafresh1same keys. But generally our testing suggests that for the specific cases 390204dddbbSafresh1described it is a win, and other code is unaffected. 391204dddbbSafresh1 392204dddbbSafresh1=item * 393204dddbbSafresh1 394204dddbbSafresh1In certain scenarios, creation of new scalars is now noticeably faster. 395204dddbbSafresh1 396204dddbbSafresh1For example, the following code is now executing ~30% faster: 397204dddbbSafresh1 398204dddbbSafresh1 $str = "A" x 64; 399204dddbbSafresh1 for (0..1_000_000) { 400204dddbbSafresh1 @svs = split //, $str 401204dddbbSafresh1 } 402204dddbbSafresh1 403204dddbbSafresh1(You can read more about this one in L<[perl 404204dddbbSafresh1#19414]|https://github.com/Perl/perl5/pull/19414>.) 405204dddbbSafresh1 406204dddbbSafresh1=back 407204dddbbSafresh1 408204dddbbSafresh1=head1 Modules and Pragmata 409204dddbbSafresh1 410204dddbbSafresh1=head2 Updated Modules and Pragmata 411204dddbbSafresh1 412204dddbbSafresh1=over 4 413204dddbbSafresh1 414204dddbbSafresh1=item * 415204dddbbSafresh1 416204dddbbSafresh1L<Archive::Tar> has been upgraded from version 2.38 to 2.40. 417204dddbbSafresh1 418204dddbbSafresh1=item * 419204dddbbSafresh1 420204dddbbSafresh1L<Attribute::Handlers> has been upgraded from version 1.01 to 1.02. 421204dddbbSafresh1 422204dddbbSafresh1=item * 423204dddbbSafresh1 424204dddbbSafresh1L<attributes> has been upgraded from version 0.33 to 0.34. 425204dddbbSafresh1 426204dddbbSafresh1=item * 427204dddbbSafresh1 428204dddbbSafresh1L<B> has been upgraded from version 1.82 to 1.83. 429204dddbbSafresh1 430204dddbbSafresh1=item * 431204dddbbSafresh1 432204dddbbSafresh1L<B::Concise> has been upgraded from version 1.004 to 1.006. 433204dddbbSafresh1 434204dddbbSafresh1=item * 435204dddbbSafresh1 436204dddbbSafresh1L<B::Deparse> has been upgraded from version 1.56 to 1.64. 437204dddbbSafresh1 438204dddbbSafresh1=item * 439204dddbbSafresh1 440204dddbbSafresh1L<bignum> has been upgraded from version 0.51 to 0.65. 441204dddbbSafresh1 442204dddbbSafresh1=item * 443204dddbbSafresh1 444204dddbbSafresh1L<charnames> has been upgraded from version 1.48 to 1.50. 445204dddbbSafresh1 446204dddbbSafresh1=item * 447204dddbbSafresh1 448204dddbbSafresh1L<Compress::Raw::Bzip2> has been upgraded from version 2.101 to 2.103. 449204dddbbSafresh1 450204dddbbSafresh1=item * 451204dddbbSafresh1 452204dddbbSafresh1L<Compress::Raw::Zlib> has been upgraded from version 2.101 to 2.105. 453204dddbbSafresh1 454204dddbbSafresh1=item * 455204dddbbSafresh1 456204dddbbSafresh1L<CPAN> has been upgraded from version 2.28 to 2.33. 457204dddbbSafresh1 458204dddbbSafresh1=item * 459204dddbbSafresh1 460204dddbbSafresh1L<Data::Dumper> has been upgraded from version 2.179 to 2.184. 461204dddbbSafresh1 462204dddbbSafresh1=item * 463204dddbbSafresh1 464204dddbbSafresh1L<DB_File> has been upgraded from version 1.855 to 1.857. 465204dddbbSafresh1 466204dddbbSafresh1=item * 467204dddbbSafresh1 468204dddbbSafresh1L<Devel::Peek> has been upgraded from version 1.30 to 1.32. 469204dddbbSafresh1 470204dddbbSafresh1=item * 471204dddbbSafresh1 472204dddbbSafresh1L<Devel::PPPort> has been upgraded from version 3.62 to 3.68. 473204dddbbSafresh1 474204dddbbSafresh1=item * 475204dddbbSafresh1 476204dddbbSafresh1L<diagnostics> has been upgraded from version 1.37 to 1.39. 477204dddbbSafresh1 478204dddbbSafresh1=item * 479204dddbbSafresh1 480204dddbbSafresh1L<Digest> has been upgraded from version 1.19 to 1.20. 481204dddbbSafresh1 482204dddbbSafresh1=item * 483204dddbbSafresh1 484204dddbbSafresh1L<DynaLoader> has been upgraded from version 1.50 to 1.52. 485204dddbbSafresh1 486204dddbbSafresh1=item * 487204dddbbSafresh1 488204dddbbSafresh1L<Encode> has been upgraded from version 3.08 to 3.17. 489204dddbbSafresh1 490204dddbbSafresh1=item * 491204dddbbSafresh1 492204dddbbSafresh1L<Errno> has been upgraded from version 1.33 to 1.36. 493204dddbbSafresh1 494204dddbbSafresh1=item * 495204dddbbSafresh1 496204dddbbSafresh1L<experimental> has been upgraded from version 0.024 to 0.028. 497204dddbbSafresh1 498204dddbbSafresh1=item * 499204dddbbSafresh1 500204dddbbSafresh1L<Exporter> has been upgraded from version 5.76 to 5.77. 501204dddbbSafresh1 502204dddbbSafresh1=item * 503204dddbbSafresh1 504204dddbbSafresh1L<ExtUtils::MakeMaker> has been upgraded from version 7.62 to 7.64. 505204dddbbSafresh1 506204dddbbSafresh1=item * 507204dddbbSafresh1 508204dddbbSafresh1L<ExtUtils::Miniperl> has been upgraded from version 1.10 to 1.11. 509204dddbbSafresh1 510204dddbbSafresh1=item * 511204dddbbSafresh1 512204dddbbSafresh1L<ExtUtils::ParseXS> has been upgraded from version 3.43 to 3.45. 513204dddbbSafresh1 514204dddbbSafresh1=item * 515204dddbbSafresh1 516204dddbbSafresh1L<ExtUtils::Typemaps> has been upgraded from version 3.43 to 3.45. 517204dddbbSafresh1 518204dddbbSafresh1=item * 519204dddbbSafresh1 520204dddbbSafresh1L<Fcntl> has been upgraded from version 1.14 to 1.15. 521204dddbbSafresh1 522204dddbbSafresh1=item * 523204dddbbSafresh1 524204dddbbSafresh1L<feature> has been upgraded from version 1.64 to 1.72. 525204dddbbSafresh1 526204dddbbSafresh1=item * 527204dddbbSafresh1 528204dddbbSafresh1L<File::Compare> has been upgraded from version 1.1006 to 1.1007. 529204dddbbSafresh1 530204dddbbSafresh1=item * 531204dddbbSafresh1 532204dddbbSafresh1L<File::Copy> has been upgraded from version 2.35 to 2.39. 533204dddbbSafresh1 534204dddbbSafresh1=item * 535204dddbbSafresh1 536204dddbbSafresh1L<File::Fetch> has been upgraded from version 1.00 to 1.04. 537204dddbbSafresh1 538204dddbbSafresh1=item * 539204dddbbSafresh1 540204dddbbSafresh1L<File::Find> has been upgraded from version 1.39 to 1.40. 541204dddbbSafresh1 542204dddbbSafresh1=item * 543204dddbbSafresh1 544204dddbbSafresh1L<File::Glob> has been upgraded from version 1.33 to 1.37. 545204dddbbSafresh1 546204dddbbSafresh1=item * 547204dddbbSafresh1 548204dddbbSafresh1L<File::Spec> has been upgraded from version 3.80 to 3.84. 549204dddbbSafresh1 550204dddbbSafresh1=item * 551204dddbbSafresh1 552204dddbbSafresh1L<File::stat> has been upgraded from version 1.09 to 1.12. 553204dddbbSafresh1 554204dddbbSafresh1=item * 555204dddbbSafresh1 556204dddbbSafresh1L<FindBin> has been upgraded from version 1.52 to 1.53. 557204dddbbSafresh1 558204dddbbSafresh1=item * 559204dddbbSafresh1 560204dddbbSafresh1L<GDBM_File> has been upgraded from version 1.19 to 1.23. 561204dddbbSafresh1 562204dddbbSafresh1=item * 563204dddbbSafresh1 564204dddbbSafresh1L<Hash::Util> has been upgraded from version 0.25 to 0.28. 565204dddbbSafresh1 566204dddbbSafresh1=item * 567204dddbbSafresh1 568204dddbbSafresh1L<Hash::Util::FieldHash> has been upgraded from version 1.21 to 1.26. 569204dddbbSafresh1 570204dddbbSafresh1=item * 571204dddbbSafresh1 572204dddbbSafresh1L<HTTP::Tiny> has been upgraded from version 0.076 to 0.080. 573204dddbbSafresh1 574204dddbbSafresh1=item * 575204dddbbSafresh1 576204dddbbSafresh1L<I18N::Langinfo> has been upgraded from version 0.19 to 0.21. 577204dddbbSafresh1 578204dddbbSafresh1=item * 579204dddbbSafresh1 580204dddbbSafresh1L<if> has been upgraded from version 0.0609 to 0.0610. 581204dddbbSafresh1 582204dddbbSafresh1=item * 583204dddbbSafresh1 584204dddbbSafresh1L<IO> has been upgraded from version 1.46 to 1.50. 585204dddbbSafresh1 586204dddbbSafresh1=item * 587204dddbbSafresh1 588204dddbbSafresh1IO-Compress has been upgraded from version 2.102 to 2.106. 589204dddbbSafresh1 590204dddbbSafresh1=item * 591204dddbbSafresh1 592204dddbbSafresh1L<IPC::Open3> has been upgraded from version 1.21 to 1.22. 593204dddbbSafresh1 594204dddbbSafresh1=item * 595204dddbbSafresh1 596204dddbbSafresh1L<JSON::PP> has been upgraded from version 4.06 to 4.07. 597204dddbbSafresh1 598204dddbbSafresh1=item * 599204dddbbSafresh1 600204dddbbSafresh1libnet has been upgraded from version 3.13 to 3.14. 601204dddbbSafresh1 602204dddbbSafresh1=item * 603204dddbbSafresh1 604204dddbbSafresh1L<Locale::Maketext> has been upgraded from version 1.29 to 1.31. 605204dddbbSafresh1 606204dddbbSafresh1=item * 607204dddbbSafresh1 608204dddbbSafresh1L<Math::BigInt> has been upgraded from version 1.999818 to 1.999830. 609204dddbbSafresh1 610204dddbbSafresh1=item * 611204dddbbSafresh1 612204dddbbSafresh1L<Math::BigInt::FastCalc> has been upgraded from version 0.5009 to 0.5012. 613204dddbbSafresh1 614204dddbbSafresh1=item * 615204dddbbSafresh1 616204dddbbSafresh1L<Math::BigRat> has been upgraded from version 0.2614 to 0.2621. 617204dddbbSafresh1 618204dddbbSafresh1=item * 619204dddbbSafresh1 620204dddbbSafresh1L<Module::CoreList> has been upgraded from version 5.20210520 to 5.20220520. 621204dddbbSafresh1 622204dddbbSafresh1=item * 623204dddbbSafresh1 624204dddbbSafresh1L<mro> has been upgraded from version 1.25_001 to 1.26. 625204dddbbSafresh1 626204dddbbSafresh1=item * 627204dddbbSafresh1 628204dddbbSafresh1L<NEXT> has been upgraded from version 0.68 to 0.69. 629204dddbbSafresh1 630204dddbbSafresh1=item * 631204dddbbSafresh1 632204dddbbSafresh1L<Opcode> has been upgraded from version 1.50 to 1.57. 633204dddbbSafresh1 634204dddbbSafresh1=item * 635204dddbbSafresh1 636204dddbbSafresh1L<open> has been upgraded from version 1.12 to 1.13. 637204dddbbSafresh1 638204dddbbSafresh1=item * 639204dddbbSafresh1 640204dddbbSafresh1L<overload> has been upgraded from version 1.33 to 1.35. 641204dddbbSafresh1 642204dddbbSafresh1=item * 643204dddbbSafresh1 644204dddbbSafresh1L<perlfaq> has been upgraded from version 5.20210411 to 5.20210520. 645204dddbbSafresh1 646204dddbbSafresh1=item * 647204dddbbSafresh1 648204dddbbSafresh1L<PerlIO> has been upgraded from version 1.11 to 1.12. 649204dddbbSafresh1 650204dddbbSafresh1=item * 651204dddbbSafresh1 652204dddbbSafresh1L<Pod::Functions> has been upgraded from version 1.13 to 1.14. 653204dddbbSafresh1 654204dddbbSafresh1=item * 655204dddbbSafresh1 656204dddbbSafresh1L<Pod::Html> has been upgraded from version 1.27 to 1.33. 657204dddbbSafresh1 658204dddbbSafresh1=item * 659204dddbbSafresh1 660204dddbbSafresh1L<Pod::Simple> has been upgraded from version 3.42 to 3.43. 661204dddbbSafresh1 662204dddbbSafresh1=item * 663204dddbbSafresh1 664204dddbbSafresh1L<POSIX> has been upgraded from version 1.97 to 2.03. 665204dddbbSafresh1 666204dddbbSafresh1=item * 667204dddbbSafresh1 668204dddbbSafresh1L<re> has been upgraded from version 0.41 to 0.43. 669204dddbbSafresh1 670204dddbbSafresh1=item * 671204dddbbSafresh1 672204dddbbSafresh1L<Scalar::Util> has been upgraded from version 1.55 to 1.62. 673204dddbbSafresh1 674204dddbbSafresh1=item * 675204dddbbSafresh1 676204dddbbSafresh1L<sigtrap> has been upgraded from version 1.09 to 1.10. 677204dddbbSafresh1 678204dddbbSafresh1=item * 679204dddbbSafresh1 680204dddbbSafresh1L<Socket> has been upgraded from version 2.031 to 2.033. 681204dddbbSafresh1 682204dddbbSafresh1=item * 683204dddbbSafresh1 684204dddbbSafresh1L<sort> has been upgraded from version 2.04 to 2.05. 685204dddbbSafresh1 686204dddbbSafresh1=item * 687204dddbbSafresh1 688204dddbbSafresh1L<Storable> has been upgraded from version 3.23 to 3.26. 689204dddbbSafresh1 690204dddbbSafresh1=item * 691204dddbbSafresh1 692204dddbbSafresh1L<Sys::Hostname> has been upgraded from version 1.23 to 1.24. 693204dddbbSafresh1 694204dddbbSafresh1=item * 695204dddbbSafresh1 696204dddbbSafresh1L<Test::Harness> has been upgraded from version 3.43 to 3.44. 697204dddbbSafresh1 698204dddbbSafresh1=item * 699204dddbbSafresh1 700204dddbbSafresh1L<Test::Simple> has been upgraded from version 1.302183 to 1.302190. 701204dddbbSafresh1 702204dddbbSafresh1=item * 703204dddbbSafresh1 704204dddbbSafresh1L<Text::ParseWords> has been upgraded from version 3.30 to 3.31. 705204dddbbSafresh1 706204dddbbSafresh1=item * 707204dddbbSafresh1 708204dddbbSafresh1L<Text::Tabs> has been upgraded from version 2013.0523 to 2021.0814. 709204dddbbSafresh1 710204dddbbSafresh1=item * 711204dddbbSafresh1 712204dddbbSafresh1L<Text::Wrap> has been upgraded from version 2013.0523 to 2021.0814. 713204dddbbSafresh1 714204dddbbSafresh1=item * 715204dddbbSafresh1 716204dddbbSafresh1L<threads> has been upgraded from version 2.26 to 2.27. 717204dddbbSafresh1 718204dddbbSafresh1=item * 719204dddbbSafresh1 720204dddbbSafresh1L<threads::shared> has been upgraded from version 1.62 to 1.64. 721204dddbbSafresh1 722204dddbbSafresh1=item * 723204dddbbSafresh1 724204dddbbSafresh1L<Tie::Handle> has been upgraded from version 4.2 to 4.3. 725204dddbbSafresh1 726204dddbbSafresh1=item * 727204dddbbSafresh1 728204dddbbSafresh1L<Tie::Hash> has been upgraded from version 1.05 to 1.06. 729204dddbbSafresh1 730204dddbbSafresh1=item * 731204dddbbSafresh1 732204dddbbSafresh1L<Tie::Scalar> has been upgraded from version 1.05 to 1.06. 733204dddbbSafresh1 734204dddbbSafresh1=item * 735204dddbbSafresh1 736204dddbbSafresh1L<Tie::SubstrHash> has been upgraded from version 1.00 to 1.01. 737204dddbbSafresh1 738204dddbbSafresh1=item * 739204dddbbSafresh1 740204dddbbSafresh1L<Time::HiRes> has been upgraded from version 1.9767 to 1.9770. 741204dddbbSafresh1 742204dddbbSafresh1=item * 743204dddbbSafresh1 744204dddbbSafresh1L<Unicode::Collate> has been upgraded from version 1.29 to 1.31. 745204dddbbSafresh1 746204dddbbSafresh1=item * 747204dddbbSafresh1 748204dddbbSafresh1L<Unicode::Normalize> has been upgraded from version 1.28 to 1.31. 749204dddbbSafresh1 750204dddbbSafresh1=item * 751204dddbbSafresh1 752204dddbbSafresh1L<Unicode::UCD> has been upgraded from version 0.75 to 0.78. 753204dddbbSafresh1 754204dddbbSafresh1=item * 755204dddbbSafresh1 756204dddbbSafresh1L<UNIVERSAL> has been upgraded from version 1.13 to 1.14. 757204dddbbSafresh1 758204dddbbSafresh1=item * 759204dddbbSafresh1 760204dddbbSafresh1L<version> has been upgraded from version 0.9928 to 0.9929. 761204dddbbSafresh1 762204dddbbSafresh1=item * 763204dddbbSafresh1 764204dddbbSafresh1L<VMS::Filespec> has been upgraded from version 1.12 to 1.13. 765204dddbbSafresh1 766204dddbbSafresh1=item * 767204dddbbSafresh1 768204dddbbSafresh1L<VMS::Stdio> has been upgraded from version 2.45 to 2.46. 769204dddbbSafresh1 770204dddbbSafresh1=item * 771204dddbbSafresh1 772204dddbbSafresh1L<warnings> has been upgraded from version 1.51 to 1.58. 773204dddbbSafresh1 774204dddbbSafresh1=item * 775204dddbbSafresh1 776204dddbbSafresh1L<Win32> has been upgraded from version 0.57 to 0.59. 777204dddbbSafresh1 778204dddbbSafresh1=item * 779204dddbbSafresh1 780204dddbbSafresh1L<XS::APItest> has been upgraded from version 1.16 to 1.22. 781204dddbbSafresh1 782204dddbbSafresh1=item * 783204dddbbSafresh1 784204dddbbSafresh1L<XS::Typemap> has been upgraded from version 0.18 to 0.19. 785204dddbbSafresh1 786204dddbbSafresh1=item * 787204dddbbSafresh1 788204dddbbSafresh1L<XSLoader> has been upgraded from version 0.30 to 0.31. 789204dddbbSafresh1 790204dddbbSafresh1=back 791204dddbbSafresh1 792204dddbbSafresh1=head1 Documentation 793204dddbbSafresh1 794204dddbbSafresh1=head2 New Documentation 795204dddbbSafresh1 796204dddbbSafresh1=head3 F<Porting/vote_admin_guide.pod> 797204dddbbSafresh1 798204dddbbSafresh1This document provides the process for administering an election or vote 799204dddbbSafresh1within the Perl Core Team. 800204dddbbSafresh1 801204dddbbSafresh1=head2 Changes to Existing Documentation 802204dddbbSafresh1 803204dddbbSafresh1We have attempted to update the documentation to reflect the changes 804204dddbbSafresh1listed in this document. If you find any we have missed, open an issue 805204dddbbSafresh1at L<https://github.com/Perl/perl5/issues>. 806204dddbbSafresh1 807204dddbbSafresh1Additionally, the following selected changes have been made: 808204dddbbSafresh1 809204dddbbSafresh1=head3 L<perlapi> 810204dddbbSafresh1 811204dddbbSafresh1=over 4 812204dddbbSafresh1 813204dddbbSafresh1=item * 814204dddbbSafresh1 815204dddbbSafresh1This has been cleaned up some, and more than 80% of the (previously 816204dddbbSafresh1many) undocumented functions have now either been documented or deemed 817204dddbbSafresh1to have been inappropriately marked as API. 818204dddbbSafresh1 819204dddbbSafresh1As always, Patches Welcome! 820204dddbbSafresh1 821204dddbbSafresh1=back 822204dddbbSafresh1 823204dddbbSafresh1=head3 L<perldeprecation> 824204dddbbSafresh1 825204dddbbSafresh1=over 4 826204dddbbSafresh1 827204dddbbSafresh1=item * 828204dddbbSafresh1 829204dddbbSafresh1notes the new location for functions moved from L<Pod::Html> to 830204dddbbSafresh1L<Pod::Html::Util> that are no longer intended to be used outside of core. 831204dddbbSafresh1 832204dddbbSafresh1=back 833204dddbbSafresh1 834204dddbbSafresh1=head3 L<perlexperiment> 835204dddbbSafresh1 836204dddbbSafresh1=over 4 837204dddbbSafresh1 838204dddbbSafresh1=item * 839204dddbbSafresh1 840204dddbbSafresh1notes the C<:win32> IO pseudolayer is removed (this happened in 5.35.2). 841204dddbbSafresh1 842204dddbbSafresh1=back 843204dddbbSafresh1 844204dddbbSafresh1=head3 L<perlgov> 845204dddbbSafresh1 846204dddbbSafresh1=over 4 847204dddbbSafresh1 848204dddbbSafresh1=item * 849204dddbbSafresh1 850204dddbbSafresh1The election process has been finetuned to allow the vote to be skipped if there 851204dddbbSafresh1are no more candidates than open seats. 852204dddbbSafresh1 853204dddbbSafresh1=item * 854204dddbbSafresh1 855204dddbbSafresh1A special election is now allowed to be postponed for up to twelve weeks, for 856204dddbbSafresh1example until a normal election. 857204dddbbSafresh1 858204dddbbSafresh1=back 859204dddbbSafresh1 860204dddbbSafresh1=head3 L<perlop> 861204dddbbSafresh1 862204dddbbSafresh1=over 4 863204dddbbSafresh1 864204dddbbSafresh1=item * 865204dddbbSafresh1 866204dddbbSafresh1now notes that an invocant only needs to be an object or class name 867204dddbbSafresh1for method calls, not for subroutine references. 868204dddbbSafresh1 869204dddbbSafresh1=back 870204dddbbSafresh1 871204dddbbSafresh1=head3 L<perlre> 872204dddbbSafresh1 873204dddbbSafresh1=over 4 874204dddbbSafresh1 875204dddbbSafresh1=item * 876204dddbbSafresh1 877204dddbbSafresh1Updated to discourage the use of the /d regexp modifier. 878204dddbbSafresh1 879204dddbbSafresh1=back 880204dddbbSafresh1 881204dddbbSafresh1=head3 L<perlrun> 882204dddbbSafresh1 883204dddbbSafresh1=over 4 884204dddbbSafresh1 885204dddbbSafresh1=item * 886204dddbbSafresh1 887204dddbbSafresh1B<-?> is now a synonym for B<-h> 888204dddbbSafresh1 889204dddbbSafresh1=item * 890204dddbbSafresh1 891204dddbbSafresh1B<-g> is now a synonym for B<-0777> 892204dddbbSafresh1 893204dddbbSafresh1=back 894204dddbbSafresh1 895204dddbbSafresh1=head1 Diagnostics 896204dddbbSafresh1 897204dddbbSafresh1The following additions or changes have been made to diagnostic output, 898204dddbbSafresh1including warnings and fatal error messages. For the complete list of 899204dddbbSafresh1diagnostic messages, see L<perldiag>. 900204dddbbSafresh1 901204dddbbSafresh1=head2 New Diagnostics 902204dddbbSafresh1 903204dddbbSafresh1=head3 New Errors 904204dddbbSafresh1 905204dddbbSafresh1=over 4 906204dddbbSafresh1 907204dddbbSafresh1=item * 908204dddbbSafresh1 909204dddbbSafresh1L<Can't "%s" out of a "defer" block|perldiag/"Can't "%s" out of a "defer" block"> 910204dddbbSafresh1 911204dddbbSafresh1(F) An attempt was made to jump out of the scope of a defer block by using 912204dddbbSafresh1a control-flow statement such as C<return>, C<goto> or a loop control. This is 913204dddbbSafresh1not permitted. 914204dddbbSafresh1 915204dddbbSafresh1=item * 916204dddbbSafresh1 917204dddbbSafresh1L<Can't modify %s in %s|perldiag/"Can't modify %s in %s"> (for scalar 918204dddbbSafresh1assignment to C<undef>) 919204dddbbSafresh1 920204dddbbSafresh1Attempting to perform a scalar assignment to C<undef>, for example via 921204dddbbSafresh1C<undef = $foo;>, previously triggered a fatal runtime error with the 922204dddbbSafresh1message "L<Modification of a read-only value attempted|perldiag/"Modification of a read-only value attempted">." 923204dddbbSafresh1It is more helpful to detect such attempted assignments prior to runtime, so 924204dddbbSafresh1they are now compile time errors, resulting in the message "Can't modify undef 925204dddbbSafresh1operator in scalar assignment". 926204dddbbSafresh1 927204dddbbSafresh1=item * 928204dddbbSafresh1 929204dddbbSafresh1L<panic: newFORLOOP, %s|perldiag/"panic: newFORLOOP, %s"> 930204dddbbSafresh1 931204dddbbSafresh1The parser failed an internal consistency check while trying to parse 932204dddbbSafresh1a C<foreach> loop. 933204dddbbSafresh1 934204dddbbSafresh1=back 935204dddbbSafresh1 936204dddbbSafresh1=head3 New Warnings 937204dddbbSafresh1 938204dddbbSafresh1=over 4 939204dddbbSafresh1 940204dddbbSafresh1=item * 941204dddbbSafresh1 942204dddbbSafresh1L<Built-in function '%s' is experimental|perldiag/"Built-in function '%s' is experimental"> 943204dddbbSafresh1 944204dddbbSafresh1A call is being made to a function in the C<builtin::> namespace, which is 945204dddbbSafresh1currently experimental. 946204dddbbSafresh1 947204dddbbSafresh1=item * 948204dddbbSafresh1 949204dddbbSafresh1L<defer is experimental|perldiag/"defer is experimental"> 950204dddbbSafresh1 951204dddbbSafresh1The C<defer> block modifier is experimental. If you want to use the feature, 952204dddbbSafresh1disable the warning with C<no warnings 'experimental::defer'>, but know that in 953204dddbbSafresh1doing so you are taking the risk that your code may break in a future Perl 954204dddbbSafresh1version. 955204dddbbSafresh1 956204dddbbSafresh1=item * 957204dddbbSafresh1 958204dddbbSafresh1L<Downgrading a use VERSION declaration to below v5.11 is deprecated|perldiag/"Downgrading a use VERSION declaration to below v5.11 is deprecated"> 959204dddbbSafresh1 960204dddbbSafresh1This warning is emitted on a C<use VERSION> statement that 961204dddbbSafresh1requests a version below v5.11 (when the effects of C<use strict> would be 962204dddbbSafresh1disabled), after a previous declaration of one having a larger number (which 963204dddbbSafresh1would have enabled these effects) 964204dddbbSafresh1 965204dddbbSafresh1=item * 966204dddbbSafresh1 967204dddbbSafresh1L<for my (...) is experimental|perldiag/"for my (...) is experimental"> 968204dddbbSafresh1 969204dddbbSafresh1This warning is emitted if you use C<for> to iterate multiple values at 970204dddbbSafresh1a time. This syntax is currently experimental and its behaviour may 971204dddbbSafresh1change in future releases of Perl. 972204dddbbSafresh1 973204dddbbSafresh1=item * 974204dddbbSafresh1 975204dddbbSafresh1L<Implicit use of @_ in %s with signatured subroutine is experimental|perldiag/"Implicit use of @_ in %s with signatured subroutine is experimental"> 976204dddbbSafresh1 977204dddbbSafresh1An expression that implicitly involves the C<@_> arguments array was found in 978204dddbbSafresh1a subroutine that uses a signature. 979204dddbbSafresh1 980204dddbbSafresh1=item * 981204dddbbSafresh1 982204dddbbSafresh1L<Use of @_ in %s with signatured subroutine is experimental|perldiag/"Use of @_ in %s with signatured subroutine is experimental"> 983204dddbbSafresh1 984204dddbbSafresh1An expression involving the C<@_> arguments array was found in a subroutine that uses a signature. 985204dddbbSafresh1 986204dddbbSafresh1=item * 987204dddbbSafresh1 988204dddbbSafresh1L<Wide character in $0|perldiag/"Wide character in %s"> 989204dddbbSafresh1 990204dddbbSafresh1Attempts to put wide characters into the program name (C<$0>) now provoke this 991204dddbbSafresh1warning. 992204dddbbSafresh1 993204dddbbSafresh1=back 994204dddbbSafresh1 995204dddbbSafresh1=head2 Changes to Existing Diagnostics 996204dddbbSafresh1 997204dddbbSafresh1=over 4 998204dddbbSafresh1 999204dddbbSafresh1=item * 1000204dddbbSafresh1 1001204dddbbSafresh1L<'E<sol>' does not take a repeat count in %s|perldiag/"'/' does not take a repeat count in %s"> 1002204dddbbSafresh1 1003204dddbbSafresh1This warning used to not include the C<in %s>. 1004204dddbbSafresh1 1005204dddbbSafresh1=item * 1006204dddbbSafresh1 1007204dddbbSafresh1L<Subroutine %s redefined|perldiag/"Subroutine %s redefined"> 1008204dddbbSafresh1 1009204dddbbSafresh1Localized subroutine redefinitions no longer trigger this warning. 1010204dddbbSafresh1 1011204dddbbSafresh1=item * 1012204dddbbSafresh1 1013204dddbbSafresh1L<unexpected constant lvalue entersub entry via typeE<sol>targ %d:%d"|perldiag/"panic: unexpected constant lvalue entersub entry via type/targ %d:%d"> now has a panic prefix 1014204dddbbSafresh1 1015204dddbbSafresh1This makes it consistent with other checks of internal consistency when 1016204dddbbSafresh1compiling a subroutine. 1017204dddbbSafresh1 1018204dddbbSafresh1=item * 1019204dddbbSafresh1 1020204dddbbSafresh1L<Useless use of sort in scalar context|perldiag/"Useless use of %s in scalar 1021204dddbbSafresh1context"> is now in the new C<scalar> category. 1022204dddbbSafresh1 1023204dddbbSafresh1When C<sort> is used in scalar context, it provokes a warning that doing this 1024204dddbbSafresh1is not useful. This warning used to be in the C<void> category. A new category 1025204dddbbSafresh1for warnings about scalar context has now been added, called C<scalar>. 1026204dddbbSafresh1 1027204dddbbSafresh1=item * 1028204dddbbSafresh1 1029204dddbbSafresh1Removed a number of diagnostics 1030204dddbbSafresh1 1031204dddbbSafresh1Many diagnostics that have been removed from the perl core across many years 1032204dddbbSafresh1have now I<also> been removed from the documentation. 1033204dddbbSafresh1 1034204dddbbSafresh1=back 1035204dddbbSafresh1 1036204dddbbSafresh1=head1 Configuration and Compilation 1037204dddbbSafresh1 1038204dddbbSafresh1=over 4 1039204dddbbSafresh1 1040204dddbbSafresh1=item * 1041204dddbbSafresh1 1042204dddbbSafresh1The Perl C source code now uses some C99 features, which we have verified are 1043204dddbbSafresh1supported by all compilers we target. This means that Perl's headers now 1044204dddbbSafresh1contain some code that is legal in C99 but not C89. 1045204dddbbSafresh1 1046204dddbbSafresh1This may cause problems for some XS modules that unconditionally add 1047204dddbbSafresh1C<-Werror=declaration-after-statement> to their C compiler flags if compiling 1048204dddbbSafresh1with gcc or clang. Earlier versions of Perl support long obsolete compilers 1049204dddbbSafresh1that are strict in rejecting certain C99 features, particularly mixed 1050204dddbbSafresh1declarations and code, and hence it makes sense for XS module authors to audit 1051204dddbbSafresh1that their code does not violate this. However, doing this is now only 1052204dddbbSafresh1possible on these earlier versions of Perl, hence these modules need to be 1053204dddbbSafresh1changed to only add this flag for C<< $] < 5.035005 >>. 1054204dddbbSafresh1 1055204dddbbSafresh1=item * 1056204dddbbSafresh1 1057204dddbbSafresh1The makedepend step is now run in parallel by using make 1058204dddbbSafresh1 1059204dddbbSafresh1When using MAKEFLAGS=-j8, this significantly reduces the time required for: 1060204dddbbSafresh1 1061204dddbbSafresh1 sh ./makedepend MAKE=make cflags 1062204dddbbSafresh1 1063204dddbbSafresh1=item * 1064204dddbbSafresh1 1065204dddbbSafresh1F<Configure> now tests whether C<< #include <xlocale.h> >> is required 1066204dddbbSafresh1to use the POSIX 1003 thread-safe locale functions or some related 1067204dddbbSafresh1extensions. This prevents problems where a non-public F<xlocale.h> is 1068204dddbbSafresh1removed in a library update, or F<xlocale.h> isn't intended for public 1069204dddbbSafresh1use. (github L<#18936|https://github.com/Perl/perl5/pull/18936>) 1070204dddbbSafresh1 1071204dddbbSafresh1=back 1072204dddbbSafresh1 1073204dddbbSafresh1=head1 Testing 1074204dddbbSafresh1 1075204dddbbSafresh1Tests were added and changed to reflect the other additions and changes 1076204dddbbSafresh1in this release. 1077204dddbbSafresh1 1078204dddbbSafresh1=head1 Platform Support 1079204dddbbSafresh1 1080204dddbbSafresh1=head2 Windows 1081204dddbbSafresh1 1082204dddbbSafresh1=over 4 1083204dddbbSafresh1 1084204dddbbSafresh1=item * 1085204dddbbSafresh1 1086204dddbbSafresh1Support for old MSVC++ (pre-VC12) has been removed 1087204dddbbSafresh1 1088204dddbbSafresh1These did not support C99 and hence can no longer be used to compile perl. 1089204dddbbSafresh1 1090204dddbbSafresh1=item * 1091204dddbbSafresh1 1092204dddbbSafresh1Support for compiling perl on Windows using Microsoft Visual Studio 2022 1093204dddbbSafresh1(containing Visual C++ 14.3) has been added. 1094204dddbbSafresh1 1095204dddbbSafresh1=item * 1096204dddbbSafresh1 1097204dddbbSafresh1The :win32 IO layer has been removed. This experimental replacement for the 1098204dddbbSafresh1:unix layer never reached maturity in its nearly two decades of existence. 1099204dddbbSafresh1 1100204dddbbSafresh1=back 1101204dddbbSafresh1 1102204dddbbSafresh1=head2 VMS 1103204dddbbSafresh1 1104204dddbbSafresh1=over 4 1105204dddbbSafresh1 1106204dddbbSafresh1=item C<keys %ENV> on VMS returns consistent results 1107204dddbbSafresh1 1108204dddbbSafresh1On VMS entries in the C<%ENV> hash are loaded from the OS environment on 1109204dddbbSafresh1first access, hence the first iteration of C<%ENV> requires the entire 1110204dddbbSafresh1environment to be scanned to find all possible keys. This initialisation had 1111204dddbbSafresh1always been done correctly for full iteration, but previously was not 1112204dddbbSafresh1happening for C<%ENV> in scalar context, meaning that C<scalar %ENV> would 1113204dddbbSafresh1return 0 if called before any other C<%ENV> access, or would only return the 1114204dddbbSafresh1count of keys accessed if there had been no iteration. 1115204dddbbSafresh1 1116204dddbbSafresh1These bugs are now fixed - C<%ENV> and C<keys %ENV> in scalar context now 1117204dddbbSafresh1return the correct result - the count of all keys in the environment. 1118204dddbbSafresh1 1119204dddbbSafresh1=back 1120204dddbbSafresh1 1121204dddbbSafresh1=head2 Discontinued Platforms 1122204dddbbSafresh1 1123204dddbbSafresh1=over 4 1124204dddbbSafresh1 1125204dddbbSafresh1=item AT&T UWIN 1126204dddbbSafresh1 1127204dddbbSafresh1UWIN is a UNIX compatibility layer for Windows. It was last released 1128204dddbbSafresh1in 2012 and has been superseded by Cygwin these days. 1129204dddbbSafresh1 1130204dddbbSafresh1=item DOS/DJGPP 1131204dddbbSafresh1 1132204dddbbSafresh1DJGPP is a port of the GNU toolchain to 32-bit x86 systems running 1133204dddbbSafresh1DOS. The last known attempt to build Perl on it was on 5.20, which 1134204dddbbSafresh1only got as far as building miniperl. 1135204dddbbSafresh1 1136204dddbbSafresh1=item NetWare 1137204dddbbSafresh1 1138204dddbbSafresh1Support code for Novell NetWare has been removed. NetWare was a 1139204dddbbSafresh1server operating system by Novell. The port was last updated in July 1140204dddbbSafresh12002, and the platform itself in May 2009. 1141204dddbbSafresh1 1142204dddbbSafresh1Unrelated changes accidentally broke the build for the NetWare port in 1143204dddbbSafresh1September 2009, and in 12 years no-one has reported this. 1144204dddbbSafresh1 1145204dddbbSafresh1=back 1146204dddbbSafresh1 1147204dddbbSafresh1=head2 Platform-Specific Notes 1148204dddbbSafresh1 1149204dddbbSafresh1=over 4 1150204dddbbSafresh1 1151204dddbbSafresh1=item z/OS 1152204dddbbSafresh1 1153204dddbbSafresh1This update enables us to build EBCDIC static/dynamic and 31-bit/64-bit 1154204dddbbSafresh1addressing mode Perl. The number of tests that pass is consistent with the 1155204dddbbSafresh1baseline before these updates. 1156204dddbbSafresh1 1157204dddbbSafresh1These changes also provide the base support to be able to provide ASCII 1158204dddbbSafresh1static/dynamic and 31-bit/64-bit addressing mode Perl. 1159204dddbbSafresh1 1160204dddbbSafresh1The z/OS (previously called OS/390) README was updated to describe ASCII and 1161204dddbbSafresh1EBCDIC builds. 1162204dddbbSafresh1 1163204dddbbSafresh1=back 1164204dddbbSafresh1 1165204dddbbSafresh1=head1 Internal Changes 1166204dddbbSafresh1 1167204dddbbSafresh1=over 4 1168204dddbbSafresh1 1169204dddbbSafresh1=item * 1170204dddbbSafresh1 1171204dddbbSafresh1Since the removal of PERL_OBJECT in Perl 5.8, PERL_IMPLICIT_CONTEXT and 1172204dddbbSafresh1MULTIPLICITY have been synonymous and they were being used interchangeably. 1173204dddbbSafresh1To simplify the code, all instances of PERL_IMPLICIT_CONTEXT have been 1174204dddbbSafresh1replaced with MULTIPLICITY. 1175204dddbbSafresh1 1176204dddbbSafresh1PERL_IMPLICIT_CONTEXT will remain defined for compatibility with XS modules. 1177204dddbbSafresh1 1178204dddbbSafresh1=item * 1179204dddbbSafresh1 1180204dddbbSafresh1The API constant formerly named C<G_ARRAY>, indicating list context, has now 1181204dddbbSafresh1been renamed to a more accurate C<G_LIST>. A compatibilty macro C<G_ARRAY> has 1182204dddbbSafresh1been added to allow existing code to work unaffected. New code should be 1183204dddbbSafresh1written using the new constant instead. This is supported by C<Devel::PPPort> 1184204dddbbSafresh1version 3.63. 1185204dddbbSafresh1 1186204dddbbSafresh1=item * 1187204dddbbSafresh1 1188204dddbbSafresh1Macros have been added to F<perl.h> to facilitate version comparisons: 1189204dddbbSafresh1C<PERL_GCC_VERSION_GE>, C<PERL_GCC_VERSION_GT>, C<PERL_GCC_VERSION_LE> and 1190204dddbbSafresh1C<PERL_GCC_VERSION_LT>. 1191204dddbbSafresh1 1192204dddbbSafresh1Inline functions have been added to F<embed.h> to determine the position of 1193204dddbbSafresh1the least significant 1 bit in a word: C<lsbit_pos32> and C<lsbit_pos64>. 1194204dddbbSafresh1 1195204dddbbSafresh1=item * 1196204dddbbSafresh1 1197204dddbbSafresh1C<Perl_ptr_table_clear> has been deleted. This has been marked as deprecated 1198204dddbbSafresh1since v5.14.0 (released in 2011), and is not used by any code on CPAN. 1199204dddbbSafresh1 1200204dddbbSafresh1=item * 1201204dddbbSafresh1 1202204dddbbSafresh1Added new boolean macros and functions. See L</Stable boolean tracking> for 1203204dddbbSafresh1related information and L<perlapi> for documentation. 1204204dddbbSafresh1 1205204dddbbSafresh1=over 4 1206204dddbbSafresh1 1207204dddbbSafresh1=item * 1208204dddbbSafresh1 1209204dddbbSafresh1sv_setbool 1210204dddbbSafresh1 1211204dddbbSafresh1=item * 1212204dddbbSafresh1 1213204dddbbSafresh1sv_setbool_mg 1214204dddbbSafresh1 1215204dddbbSafresh1=item * 1216204dddbbSafresh1 1217204dddbbSafresh1SvIsBOOL 1218204dddbbSafresh1 1219204dddbbSafresh1=back 1220204dddbbSafresh1 1221204dddbbSafresh1=item * 1222204dddbbSafresh1 1223204dddbbSafresh1Added 4 missing functions for dealing with RVs: 1224204dddbbSafresh1 1225204dddbbSafresh1=over 4 1226204dddbbSafresh1 1227204dddbbSafresh1=item * 1228204dddbbSafresh1 1229204dddbbSafresh1sv_setrv_noinc 1230204dddbbSafresh1 1231204dddbbSafresh1=item * 1232204dddbbSafresh1 1233204dddbbSafresh1sv_setrv_noinc_mg 1234204dddbbSafresh1 1235204dddbbSafresh1=item * 1236204dddbbSafresh1 1237204dddbbSafresh1sv_setrv_inc 1238204dddbbSafresh1 1239204dddbbSafresh1=item * 1240204dddbbSafresh1 1241204dddbbSafresh1sv_setrv_inc_mg 1242204dddbbSafresh1 1243204dddbbSafresh1=back 1244204dddbbSafresh1 1245204dddbbSafresh1=item * 1246204dddbbSafresh1 1247204dddbbSafresh1C<xs_handshake()>'s two failure modes now provide distinct messages. 1248204dddbbSafresh1 1249204dddbbSafresh1=item * 1250204dddbbSafresh1 1251204dddbbSafresh1Memory for hash iterator state (C<struct xpvhv_aux>) is now allocated as part 1252204dddbbSafresh1of the hash body, instead of as part of the block of memory allocated for the 1253204dddbbSafresh1main hash array. 1254204dddbbSafresh1 1255204dddbbSafresh1=item * 1256204dddbbSafresh1 1257204dddbbSafresh1A new phase_name() interface provides access to the name for each interpreter 1258204dddbbSafresh1phase (i.e., PL_phase value). 1259204dddbbSafresh1 1260204dddbbSafresh1=item * 1261204dddbbSafresh1 1262204dddbbSafresh1The C<pack> behavior of C<U> has changed for EBCDIC. 1263204dddbbSafresh1 1264204dddbbSafresh1=item * 1265204dddbbSafresh1 1266204dddbbSafresh1New equality-test functions C<sv_numeq> and C<sv_streq> have been added, along 1267204dddbbSafresh1with C<..._flags>-suffixed variants. These expose a simple and consistent API 1268204dddbbSafresh1to perform numerical or string comparison which is aware of operator 1269204dddbbSafresh1overloading. 1270204dddbbSafresh1 1271204dddbbSafresh1=item * 1272204dddbbSafresh1 1273204dddbbSafresh1Reading the string form of an integer value no longer sets the flag C<SVf_POK>. 1274204dddbbSafresh1The string form is still cached internally, and still re-read directly by the 1275204dddbbSafresh1macros C<SvPV(sv)> I<etc> (inline, without calling a C function). XS code that 1276204dddbbSafresh1already calls the APIs to get values will not be affected by this change. XS 1277204dddbbSafresh1code that accesses flags directly instead of using API calls to express its 1278204dddbbSafresh1intent I<might> break, but such code likely is already buggy if passed some 1279204dddbbSafresh1other values, such as floating point values or objects with string overloading. 1280204dddbbSafresh1 1281204dddbbSafresh1This small change permits code (such as JSON serializers) to reliably determine 1282204dddbbSafresh1between 1283204dddbbSafresh1 1284204dddbbSafresh1=over 4 1285204dddbbSafresh1 1286204dddbbSafresh1=item * 1287204dddbbSafresh1 1288204dddbbSafresh1a value that was initially B<written> as an integer, but then B<read> as a string 1289204dddbbSafresh1 1290204dddbbSafresh1 my $answer = 42; 1291204dddbbSafresh1 print "The answer is $answer\n"; 1292204dddbbSafresh1 1293204dddbbSafresh1=item * 1294204dddbbSafresh1 1295204dddbbSafresh1that same value that was initially B<written> as a string, but then B<read> as an integer 1296204dddbbSafresh1 1297204dddbbSafresh1 my $answer = "42"; 1298204dddbbSafresh1 print "That doesn't look right\n" 1299204dddbbSafresh1 unless $answer == 6 * 9; 1300204dddbbSafresh1 1301204dddbbSafresh1=back 1302204dddbbSafresh1 1303204dddbbSafresh1For the first case (originally written as an integer), we now have: 1304204dddbbSafresh1 1305204dddbbSafresh1 use Devel::Peek; 1306204dddbbSafresh1 my $answer = 42; 1307204dddbbSafresh1 Dump ($answer); 1308204dddbbSafresh1 my $void = "$answer"; 1309204dddbbSafresh1 print STDERR "\n"; 1310204dddbbSafresh1 Dump($answer) 1311204dddbbSafresh1 1312204dddbbSafresh1 1313204dddbbSafresh1 SV = IV(0x562538925778) at 0x562538925788 1314204dddbbSafresh1 REFCNT = 1 1315204dddbbSafresh1 FLAGS = (IOK,pIOK) 1316204dddbbSafresh1 IV = 42 1317204dddbbSafresh1 1318204dddbbSafresh1 SV = PVIV(0x5625389263c0) at 0x562538925788 1319204dddbbSafresh1 REFCNT = 1 1320204dddbbSafresh1 FLAGS = (IOK,pIOK,pPOK) 1321204dddbbSafresh1 IV = 42 1322204dddbbSafresh1 PV = 0x562538919b50 "42"\0 1323204dddbbSafresh1 CUR = 2 1324204dddbbSafresh1 LEN = 10 1325204dddbbSafresh1 1326204dddbbSafresh1For the second (originally written as a string), we now have: 1327204dddbbSafresh1 1328204dddbbSafresh1 use Devel::Peek; 1329204dddbbSafresh1 my $answer = "42"; 1330204dddbbSafresh1 Dump ($answer); 1331204dddbbSafresh1 my $void = $answer == 6 * 9; 1332204dddbbSafresh1 print STDERR "\n"; 1333204dddbbSafresh1 Dump($answer)' 1334204dddbbSafresh1 1335204dddbbSafresh1 1336204dddbbSafresh1 SV = PV(0x5586ffe9bfb0) at 0x5586ffec0788 1337204dddbbSafresh1 REFCNT = 1 1338204dddbbSafresh1 FLAGS = (POK,IsCOW,pPOK) 1339204dddbbSafresh1 PV = 0x5586ffee7fd0 "42"\0 1340204dddbbSafresh1 CUR = 2 1341204dddbbSafresh1 LEN = 10 1342204dddbbSafresh1 COW_REFCNT = 1 1343204dddbbSafresh1 1344204dddbbSafresh1 SV = PVIV(0x5586ffec13c0) at 0x5586ffec0788 1345204dddbbSafresh1 REFCNT = 1 1346204dddbbSafresh1 FLAGS = (IOK,POK,IsCOW,pIOK,pPOK) 1347204dddbbSafresh1 IV = 42 1348204dddbbSafresh1 PV = 0x5586ffee7fd0 "42"\0 1349204dddbbSafresh1 CUR = 2 1350204dddbbSafresh1 LEN = 10 1351204dddbbSafresh1 COW_REFCNT = 1 1352204dddbbSafresh1 1353204dddbbSafresh1(One can't rely on the presence or absence of the flag C<SVf_IsCOW> to 1354204dddbbSafresh1determine the history of operations on a scalar.) 1355204dddbbSafresh1 1356204dddbbSafresh1Previously both cases would be indistinguishable, with all 4 flags set: 1357204dddbbSafresh1 1358204dddbbSafresh1 SV = PVIV(0x55d4d62edaf0) at 0x55d4d62f0930 1359204dddbbSafresh1 REFCNT = 1 1360204dddbbSafresh1 FLAGS = (IOK,POK,pIOK,pPOK) 1361204dddbbSafresh1 IV = 42 1362204dddbbSafresh1 PV = 0x55d4d62e1740 "42"\0 1363204dddbbSafresh1 CUR = 2 1364204dddbbSafresh1 LEN = 10 1365204dddbbSafresh1 1366204dddbbSafresh1(and possibly C<SVf_IsCOW>, but not always) 1367204dddbbSafresh1 1368204dddbbSafresh1This now means that if XS code I<really> needs to determine which form a value 1369204dddbbSafresh1was first written as, it should implement logic roughly 1370204dddbbSafresh1 1371204dddbbSafresh1 if (flags & SVf_IOK|SVf_NOK) && !(flags & SVf_POK) 1372204dddbbSafresh1 serialize as number 1373204dddbbSafresh1 else if (flags & SVf_POK) 1374204dddbbSafresh1 serialize as string 1375204dddbbSafresh1 else 1376204dddbbSafresh1 the existing guesswork ... 1377204dddbbSafresh1 1378204dddbbSafresh1Note that this doesn't cover "dualvars" - scalars that report different 1379204dddbbSafresh1values when asked for their string form or number form (such as C<$!>). 1380204dddbbSafresh1Most serialization formats cannot represent such duplicity. 1381204dddbbSafresh1 1382204dddbbSafresh1I<The existing guesswork> remains because as well as dualvars, values might 1383204dddbbSafresh1be C<undef>, references, overloaded references, typeglobs and other things that 1384204dddbbSafresh1Perl itself can represent but do not map one-to-one into external formats, so 1385204dddbbSafresh1need some amount of approximation or encapsulation. 1386204dddbbSafresh1 1387204dddbbSafresh1=item * 1388204dddbbSafresh1 1389204dddbbSafresh1C<sv_dump> (and L<Devel::Peek>’s C<Dump> function) now escapes high-bit 1390204dddbbSafresh1octets in the PV as hex rather than octal. Since most folks understand hex 1391204dddbbSafresh1more readily than octal, this should make these dumps a bit more legible. 1392204dddbbSafresh1This does B<not> affect any other diagnostic interfaces like C<pv_display>. 1393204dddbbSafresh1 1394204dddbbSafresh1=back 1395204dddbbSafresh1 1396204dddbbSafresh1=head1 Selected Bug Fixes 1397204dddbbSafresh1 1398204dddbbSafresh1=over 4 1399204dddbbSafresh1 1400204dddbbSafresh1=item * 1401204dddbbSafresh1 1402204dddbbSafresh1utime() now correctly sets errno/C<$!> when called on a closed handle. 1403204dddbbSafresh1 1404204dddbbSafresh1=item * 1405204dddbbSafresh1 1406204dddbbSafresh1The flags on the OPTVAL parameter to setsockopt() were previously 1407204dddbbSafresh1checked before magic was called, possibly treating a numeric value as 1408204dddbbSafresh1a packed buffer or vice versa. It also ignored the UTF-8 flag, 1409204dddbbSafresh1potentially treating the internal representation of an upgraded SV as 1410204dddbbSafresh1the bytes to supply to the setsockopt() system call. (github L<#18660|https://github.com/Perl/perl5/issues/18660>) 1411204dddbbSafresh1 1412204dddbbSafresh1=item * 1413204dddbbSafresh1 1414204dddbbSafresh1Only set IOKp, not IOK on $) and $(. 1415204dddbbSafresh1This was issue L<#18955|https://github.com/Perl/perl5/issues/18955>: This will prevent serializers from serializing these 1416204dddbbSafresh1variables as numbers (which loses the additional groups). 1417204dddbbSafresh1This restores behaviour from 5.16 1418204dddbbSafresh1 1419204dddbbSafresh1=item * 1420204dddbbSafresh1 1421204dddbbSafresh1Use of the C<mktables> debugging facility would cause perl to croak since 1422204dddbbSafresh1v5.31.10; this problem has now been fixed. 1423204dddbbSafresh1 1424204dddbbSafresh1=item * 1425204dddbbSafresh1 1426204dddbbSafresh1C<makedepend> logic is now compatible with BSD make (fixes 1427204dddbbSafresh1L<GH #19046|https://github.com/Perl/perl5/issues/19046>). 1428204dddbbSafresh1 1429204dddbbSafresh1=item * 1430204dddbbSafresh1 1431204dddbbSafresh1Calling C<untie> on a tied hash that is partway through iteration now frees the 1432204dddbbSafresh1iteration state immediately. 1433204dddbbSafresh1 1434204dddbbSafresh1Iterating a tied hash causes perl to store a copy of the current hash key to 1435204dddbbSafresh1track the iteration state, with this stored copy passed as the second parameter 1436204dddbbSafresh1to C<NEXTKEY>. This internal state is freed immediately when tie hash iteration 1437204dddbbSafresh1completes, or if the hash is destroyed, but due to an implementation oversight, 1438204dddbbSafresh1it was not freed if the hash was untied. In that case, the internal copy of the 1439204dddbbSafresh1key would persist until the earliest of 1440204dddbbSafresh1 1441204dddbbSafresh1=over 4 1442204dddbbSafresh1 1443204dddbbSafresh1=item 1 1444204dddbbSafresh1 1445204dddbbSafresh1C<tie> was called again on the same hash 1446204dddbbSafresh1 1447204dddbbSafresh1=item 2 1448204dddbbSafresh1 1449204dddbbSafresh1The (now untied) hash was iterated (ie passed to any of C<keys>, C<values> or 1450204dddbbSafresh1C<each>) 1451204dddbbSafresh1 1452204dddbbSafresh1=item 3 1453204dddbbSafresh1 1454204dddbbSafresh1The hash was destroyed. 1455204dddbbSafresh1 1456204dddbbSafresh1=back 1457204dddbbSafresh1 1458204dddbbSafresh1This inconsistency is now fixed - the internal state is now freed immediately by 1459204dddbbSafresh1C<untie>. 1460204dddbbSafresh1 1461204dddbbSafresh1As the precise timing of this behaviour can be observed with pure Perl code 1462204dddbbSafresh1(the timing of C<DESTROY> on objects returned from C<FIRSTKEY> and C<NEXTKEY>) 1463204dddbbSafresh1it's just possible that some code is sensitive to it. 1464204dddbbSafresh1 1465204dddbbSafresh1=item * 1466204dddbbSafresh1 1467204dddbbSafresh1The C<Internals::getcwd()> function added for bootstrapping miniperl 1468204dddbbSafresh1in perl 5.30.0 is now only available in miniperl. [github #19122] 1469204dddbbSafresh1 1470204dddbbSafresh1=item * 1471204dddbbSafresh1 1472204dddbbSafresh1Setting a breakpoint on a BEGIN or equivalently a C<use> statement 1473204dddbbSafresh1could cause a memory write to a freed C<dbstate> op. 1474204dddbbSafresh1[L<GH #19198|https://github.com/Perl/perl5/issues/19198>] 1475204dddbbSafresh1 1476204dddbbSafresh1=item * 1477204dddbbSafresh1 1478204dddbbSafresh1When bareword filehandles are disabled, the parser was interpreting 1479204dddbbSafresh1any bareword as a filehandle, even when immediatey followed by parens. 1480204dddbbSafresh1 1481204dddbbSafresh1=back 1482204dddbbSafresh1 1483204dddbbSafresh1=head1 Errata From Previous Releases 1484204dddbbSafresh1 1485204dddbbSafresh1=over 4 1486204dddbbSafresh1 1487204dddbbSafresh1=item * 1488204dddbbSafresh1 1489204dddbbSafresh1L<perl5300delta> mistakenly identified a CVE whose correct identification is 1490204dddbbSafresh1CVE-2015-1592. 1491204dddbbSafresh1 1492204dddbbSafresh1=back 1493204dddbbSafresh1 1494204dddbbSafresh1=head1 Obituaries 1495204dddbbSafresh1 1496204dddbbSafresh1Raun "Spider" Boardman (SPIDB on CPAN), author of at least 66 commits to the 1497204dddbbSafresh1Perl 5 core distribution between 1996 and 2002, passed away May 24, 2021 from 1498204dddbbSafresh1complications of COVID. He will be missed. 1499204dddbbSafresh1 1500204dddbbSafresh1David H. Adler (DHA) passed away on November 16, 2021. In 1997, David 1501204dddbbSafresh1co-founded NY.pm, the first Perl user group, and in 1998 co-founded Perl 1502204dddbbSafresh1Mongers to help establish other user groups across the globe. He was a 1503204dddbbSafresh1frequent attendee at Perl conferences in both North America and Europe and well 1504204dddbbSafresh1known for his role in organizing I<Bad Movie Night> celebrations at those 1505204dddbbSafresh1conferences. He also contributed to the work of the Perl Foundation, including 1506204dddbbSafresh1administering the White Camel awards for community service. He will be missed. 1507204dddbbSafresh1 1508204dddbbSafresh1=head1 Acknowledgements 1509204dddbbSafresh1 1510204dddbbSafresh1Perl 5.36.0 represents approximately a year of development since Perl 1511204dddbbSafresh15.34.0 and contains approximately 250,000 lines of changes across 2,000 1512204dddbbSafresh1files from 82 authors. 1513204dddbbSafresh1 1514204dddbbSafresh1Excluding auto-generated files, documentation and release tools, there were 1515204dddbbSafresh1approximately 190,000 lines of changes to 1,300 .pm, .t, .c and .h files. 1516204dddbbSafresh1 1517204dddbbSafresh1Perl continues to flourish into its fourth decade thanks to a vibrant 1518204dddbbSafresh1community of users and developers. The following people are known to have 1519204dddbbSafresh1contributed the improvements that became Perl 5.36.0: 1520204dddbbSafresh1 1521204dddbbSafresh1Alyssa Ross, Andrew Fresh, Aristotle Pagaltzis, Asher Mancinelli, Atsushi 1522204dddbbSafresh1Sugawara, Ben Cornett, Bernd, Biswapriyo Nath, Brad Barden, Bram, Branislav 1523204dddbbSafresh1Zahradník, brian d foy, Chad Granum, Chris 'BinGOs' Williams, Christian 1524204dddbbSafresh1Walde (Mithaldu), Christopher Yeleighton, Craig A. Berry, cuishuang, Curtis 1525204dddbbSafresh1Poe, Dagfinn Ilmari Mannsåker, Dan Book, Daniel Laügt, Dan Jacobson, Dan 1526204dddbbSafresh1Kogai, Dave Cross, Dave Lambley, David Cantrell, David Golden, David 1527204dddbbSafresh1Marshall, David Mitchell, E. Choroba, Eugen Konkov, Felipe Gasper, François 1528204dddbbSafresh1Perrad, Graham Knop, H.Merijn Brand, Hugo van der Sanden, Ilya Sashcheka, 1529204dddbbSafresh1Ivan Panchenko, Jakub Wilk, James E Keenan, James Raspass, Karen Etheridge, 1530204dddbbSafresh1Karl Williamson, Leam Hall, Leon Timmermans, Magnus Woldrich, Matthew 1531204dddbbSafresh1Horsfall, Max Maischein, Michael G Schwern, Michiel Beijen, Mike Fulton, 1532204dddbbSafresh1Neil Bowers, Nicholas Clark, Nicolas R, Niyas Sait, Olaf Alders, Paul Evans, 1533204dddbbSafresh1Paul Marquess, Petar-Kaleychev, Pete Houston, Renee Baecker, Ricardo Signes, 1534204dddbbSafresh1Richard Leach, Robert Rothenberg, Sawyer X, Scott Baker, Sergey Poznyakoff, 1535204dddbbSafresh1Sergey Zhmylove, Sisyphus, Slaven Rezic, Steve Hay, Sven Kirmess, TAKAI 1536204dddbbSafresh1Kousuke, Thibault Duponchelle, Todd Rinaldo, Tomasz Konojacki, Tomoyuki 1537204dddbbSafresh1Sadahiro, Tony Cook, Unicode Consortium, Yves Orton, Михаил 1538204dddbbSafresh1Козачков. 1539204dddbbSafresh1 1540204dddbbSafresh1The list above is almost certainly incomplete as it is automatically 1541204dddbbSafresh1generated from version control history. In particular, it does not include 1542204dddbbSafresh1the names of the (very much appreciated) contributors who reported issues to 1543204dddbbSafresh1the Perl bug tracker. 1544204dddbbSafresh1 1545204dddbbSafresh1Many of the changes included in this version originated in the CPAN modules 1546204dddbbSafresh1included in Perl's core. We're grateful to the entire CPAN community for 1547204dddbbSafresh1helping Perl to flourish. 1548204dddbbSafresh1 1549204dddbbSafresh1For a more complete list of all of Perl's historical contributors, please 1550204dddbbSafresh1see the AUTHORS file in the Perl source distribution. 1551204dddbbSafresh1 1552204dddbbSafresh1=head1 Reporting Bugs 1553204dddbbSafresh1 1554204dddbbSafresh1If you find what you think is a bug, you might check the perl bug database 1555204dddbbSafresh1at L<https://github.com/Perl/perl5/issues>. There may also be information at 1556204dddbbSafresh1L<http://www.perl.org/>, the Perl Home Page. 1557204dddbbSafresh1 1558204dddbbSafresh1If you believe you have an unreported bug, please open an issue at 1559204dddbbSafresh1L<https://github.com/Perl/perl5/issues>. Be sure to trim your bug down to a 1560204dddbbSafresh1tiny but sufficient test case. 1561204dddbbSafresh1 1562204dddbbSafresh1If the bug you are reporting has security implications which make it 1563204dddbbSafresh1inappropriate to send to a public issue tracker, then see 1564204dddbbSafresh1L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION> 1565204dddbbSafresh1for details of how to report the issue. 1566204dddbbSafresh1 1567204dddbbSafresh1=head1 Give Thanks 1568204dddbbSafresh1 1569204dddbbSafresh1If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, 1570204dddbbSafresh1you can do so by running the C<perlthanks> program: 1571204dddbbSafresh1 1572204dddbbSafresh1 perlthanks 1573204dddbbSafresh1 1574204dddbbSafresh1This will send an email to the Perl 5 Porters list with your show of thanks. 1575204dddbbSafresh1 1576204dddbbSafresh1=head1 SEE ALSO 1577204dddbbSafresh1 1578204dddbbSafresh1The F<Changes> file for an explanation of how to view exhaustive details on 1579204dddbbSafresh1what changed. 1580204dddbbSafresh1 1581204dddbbSafresh1The F<INSTALL> file for how to build Perl. 1582204dddbbSafresh1 1583204dddbbSafresh1The F<README> file for general stuff. 1584204dddbbSafresh1 1585204dddbbSafresh1The F<Artistic> and F<Copying> files for copyright information. 1586204dddbbSafresh1 1587204dddbbSafresh1=cut 1588