xref: /openbsd-src/gnu/usr.bin/perl/pod/perl5360delta.pod (revision e068048151d29f2562a32185e21a8ba885482260)
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; q��string��>>.  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