xref: /openbsd/gnu/usr.bin/perl/pod/perl5320delta.pod (revision 256a93a4)
1=pod
2
3=encoding utf8
4
5=head1 NAME
6
7perl5320delta - what is new for perl v5.32.0
8
9=head1 DESCRIPTION
10
11This document describes differences between the 5.30.0 release and the 5.32.0
12release.
13
14If you are upgrading from an earlier release such as 5.28.0, first read
15L<perl5300delta>, which describes differences between 5.28.0 and 5.30.0.
16
17=head1 Core Enhancements
18
19=head2 The isa Operator
20
21A new experimental infix operator called C<isa> tests whether a given object
22is an instance of a given class or a class derived from it:
23
24    if( $obj isa Package::Name ) { ... }
25
26For more detail see L<perlop/Class Instance Operator>.
27
28=head2 Unicode 13.0 is supported
29
30See L<https://www.unicode.org/versions/Unicode13.0.0/> for details.
31
32=head2 Chained comparisons capability
33
34Some comparison operators, as their associativity, I<chain> with some
35operators of the same precedence (but never with operators of different
36precedence).
37
38    if ( $x < $y <= $z ) {...}
39
40behaves exactly like:
41
42    if ( $x < $y && $y <= $z ) {...}
43
44(assuming that C<"$y"> is as simple a scalar as it looks.)
45
46You can read more about this in L<perlop> under
47L<perlop/Operator Precedence and Associativity>.
48
49=head2 New Unicode properties C<Identifier_Status> and C<Identifier_Type> supported
50
51Unicode has revised its regular expression requirements:
52L<https://www.unicode.org/reports/tr18/tr18-21.html>.
53As part of that they are wanting more properties to be exposed, ones
54that aren't part of the strict UCD (Unicode character database). These
55two are used for examining inputs for security purposes. Details on
56their usage is at L<https://www.unicode.org/reports/tr39/>.
57
58=head2 It is now possible to write C<qr/\p{Name=...}/>, or
59C<qr!\p{na=/(SMILING|GRINNING) FACE/}!>
60
61The Unicode Name property is now accessible in regular expression
62patterns, as an alternative to C<\N{...}>.
63A comparison of the two methods is given in
64L<perlunicode/Comparison of \N{...} and \p{name=...}>.
65
66The second example above shows that wildcard subpatterns are also usable
67in this property. See L<perlunicode/Wildcards in Property Values>.
68
69=head2 Improvement of C<POSIX::mblen()>, C<mbtowc>, and C<wctomb>
70
71The C<POSIX::mblen()>, C<mbtowc>, and C<wctomb> functions now
72work on shift state locales and are thread-safe on C99 and above
73compilers when executed on a platform that has locale thread-safety; the
74length parameters are now optional.
75
76These functions are always executed under the current C language locale.
77(See L<perllocale>.)  Most locales are stateless, but a few, notably the
78very rarely encountered ISO 2022, maintain a state between calls to
79these functions. Previously the state was cleared on every call, but
80now the state is not reset unless the appropriate parameter is C<undef>.
81
82On threaded perls, the C99 functions L<mbrlen(3)>, L<mbrtowc(3)>, and
83L<wcrtomb(3)>, when available, are substituted for the plain functions.
84This makes these functions thread-safe when executing on a locale
85thread-safe platform.
86
87The string length parameters in C<mblen> and C<mbtowc> are now optional;
88useful only if you wish to restrict the length parsed in the source
89string to less than the actual length.
90
91=head2 Alpha assertions are no longer experimental
92
93See L<perlre/(*pla:pattern)>, L<perlre/(*plb:pattern)>,
94L<perlre/(*nla:pattern)>>, and L<perlre/(*nlb:pattern)>.
95Use of these no longer generates a warning; existing code that disables
96the warning category C<experimental::alpha_assertions> will continue to work
97without any changes needed. Enabling the category has no effect.
98
99=head2 Script runs are no longer experimental
100
101See L<perlre/Script Runs>. Use of these no longer generates a warning;
102existing code that disables the warning category
103C<experimental::script_run> will continue to work without any
104changes needed. Enabling the category has no effect.
105
106=head2 Feature checks are now faster
107
108Previously feature checks in the parser required a hash lookup when
109features were set outside of a feature bundle, this has been optimized
110to a bit mask check. [L<GH #17229|https://github.com/Perl/perl5/issues/17229>]
111
112=head2 Perl is now developed on GitHub
113
114Perl is now developed on GitHub. You can find us at
115L<https://github.com/Perl/perl5>.
116
117Non-security bugs should now be reported via GitHub. Security issues should
118continue to be reported as documented in L<perlsec>.
119
120=head2 Compiled patterns can now be dumped before optimization
121
122This is primarily useful for tracking down bugs in the regular
123expression compiler. This dump happens on C<-DDEBUGGING> perls, if you
124specify C<-Drv> on the command line; or on any perl if the pattern is
125compiled within the scope of S<C<use re qw(Debug DUMP_PRE_OPTIMIZE)>> or
126S<C<use re qw(Debug COMPILE EXTRA)>>. (All but the second case display
127other information as well.)
128
129=head1 Security
130
131=head2 [CVE-2020-10543] Buffer overflow caused by a crafted regular expression
132
133A signed C<size_t> integer overflow in the storage space calculations for
134nested regular expression quantifiers could cause a heap buffer overflow in
135Perl's regular expression compiler that overwrites memory allocated after the
136regular expression storage space with attacker supplied data.
137
138The target system needs a sufficient amount of memory to allocate partial
139expansions of the nested quantifiers prior to the overflow occurring.  This
140requirement is unlikely to be met on 64-bit systems.
141
142Discovered by: ManhND of The Tarantula Team, VinCSS (a member of Vingroup).
143
144=head2 [CVE-2020-10878] Integer overflow via malformed bytecode produced by a crafted regular expression
145
146Integer overflows in the calculation of offsets between instructions for the
147regular expression engine could cause corruption of the intermediate language
148state of a compiled regular expression.  An attacker could abuse this behaviour
149to insert instructions into the compiled form of a Perl regular expression.
150
151Discovered by: Hugo van der Sanden and Slaven Rezic.
152
153=head2 [CVE-2020-12723] Buffer overflow caused by a crafted regular expression
154
155Recursive calls to C<S_study_chunk()> by Perl's regular expression compiler to
156optimize the intermediate language representation of a regular expression could
157cause corruption of the intermediate language state of a compiled regular
158expression.
159
160Discovered by: Sergey Aleynikov.
161
162=head2 Additional Note
163
164An application written in Perl would only be vulnerable to any of the above
165flaws if it evaluates regular expressions supplied by the attacker.  Evaluating
166regular expressions in this fashion is known to be dangerous since the regular
167expression engine does not protect against denial of service attacks in this
168usage scenario.
169
170=head1 Incompatible Changes
171
172=head2 Certain pattern matching features are now prohibited in compiling
173Unicode property value wildcard subpatterns
174
175These few features are either inappropriate or interfere with the
176algorithm used to accomplish this task. The complete list is in
177L<perlunicode/Wildcards in Property Values>.
178
179=head2 Unused functions C<POSIX::mbstowcs> and C<POSIX::wcstombs> are removed
180
181These functions could never have worked due to a defective interface
182specification. There is clearly no demand for them, given that no one
183has ever complained in the many years the functions were claimed to be
184available, hence so-called "support" for them is now dropped.
185
186=head2 A bug fix for C<(?[...])> may have caused some patterns to no
187longer compile
188
189See L</Selected Bug Fixes>. The heuristics previously used may have let
190some constructs compile (perhaps not with the programmer's intended
191effect) that should have been errors. None are known, but it is
192possible that some erroneous constructs no longer compile.
193
194=head2 C<\p{I<user-defined>}> properties now always override official
195Unicode ones
196
197Previously, if and only if a user-defined property was declared prior to
198the compilation of the regular expression pattern that contains it, its
199definition was used instead of any official Unicode property with the
200same name. Now, it always overrides the official property. This
201change could break existing code that relied (likely unwittingly) on the
202previous behavior. Without this fix, if Unicode released a new version
203with a new property that happens to have the same name as the one you
204had long been using, your program would break when you upgraded to a
205perl that used that new Unicode version. See L<perlunicode/User-Defined
206Character Properties>. [L<GH #17205|https://github.com/Perl/perl5/issues/17205>]
207
208=head2 Modifiable variables are no longer permitted in constants
209
210Code like:
211
212    my $var;
213    $sub = sub () { $var };
214
215where C<$var> is referenced elsewhere in some sort of modifiable context now
216produces an exception when the sub is defined.
217
218This error can be avoided by adding a return to the sub definition:
219
220    $sub = sub () { return $var };
221
222This has been deprecated since Perl 5.22.
223L<[GH #17020]|https://github.com/Perl/perl5/issues/17020>
224
225=head2 Use of L<C<vec>|perlfunc/vec EXPR,OFFSET,BITS> on strings with code points above 0xFF is forbidden
226
227Such strings are represented internally in UTF-8, and C<vec> is a
228bit-oriented operation that will likely give unexpected results on those
229strings. This was deprecated in perl 5.28.0.
230
231=head2 Use of code points over 0xFF in string bitwise operators
232
233Some uses of these were already illegal after a previous deprecation
234cycle. The remaining uses are now prohibited, having been deprecated in perl
2355.28.0. See L<perldeprecation>.
236
237=head2 C<Sys::Hostname::hostname()> does not accept arguments
238
239This usage was deprecated in perl 5.28.0 and is now fatal.
240
241=head2 Plain "0" string now treated as a number for range operator
242
243Previously a range C<"0" .. "-1"> would produce a range of numeric
244strings from "0" through "99"; this now produces an empty list, just
245as C<0 .. -1> does. This also means that C<"0" .. "9"> now produces a
246list of integers, where previously it would produce a list of strings.
247
248This was due to a special case that treated strings starting with "0"
249as strings so ranges like C<"00" .. "03"> produced C<"00", "01", "02", "03">,
250but didn't specially handle the string C<"0">.
251L<[GH #16770]|https://github.com/Perl/perl5/issues/16770>
252
253=head2 C<\K> now disallowed in look-ahead and look-behind assertions
254
255This was disallowed because it causes unexpected behaviour, and no-one
256could define what the desired behaviour should be.
257L<[GH #14638]|https://github.com/Perl/perl5/issues/14638>
258
259=head1 Performance Enhancements
260
261=over 4
262
263=item *
264
265C<my_strnlen> has been sped up for systems that don't have their own
266C<strnlen> implementation.
267
268=item *
269
270C<grok_bin_oct_hex> (and so, C<grok_bin>, C<grok_oct>, and C<grok_hex>)
271have been sped up.
272
273=item *
274
275C<grok_number_flags> has been sped up.
276
277=item *
278
279C<sort> is now noticeably faster in cases such as C<< sort {$a <=> $b} >> or
280C<< sort {$b <=> $a} >>. [L<GH #17608|https://github.com/Perl/perl5/pull/17608>]
281
282=back
283
284=head1 Modules and Pragmata
285
286=head2 Updated Modules and Pragmata
287
288=over 4
289
290=item *
291
292L<Archive::Tar> has been upgraded from version 2.32 to 2.36.
293
294=item *
295
296L<autodie> has been upgraded from version 2.29 to 2.32.
297
298=item *
299
300L<B> has been upgraded from version 1.76 to 1.80.
301
302=item *
303
304L<B::Deparse> has been upgraded from version 1.49 to 1.54.
305
306=item *
307
308L<Benchmark> has been upgraded from version 1.22 to 1.23.
309
310=item *
311
312L<charnames> has been upgraded from version 1.45 to 1.48.
313
314=item *
315
316L<Class::Struct> has been upgraded from version 0.65 to 0.66.
317
318=item *
319
320L<Compress::Raw::Bzip2> has been upgraded from version 2.084 to 2.093.
321
322=item *
323
324L<Compress::Raw::Zlib> has been upgraded from version 2.084 to 2.093.
325
326=item *
327
328L<CPAN> has been upgraded from version 2.22 to 2.27.
329
330=item *
331
332L<DB_File> has been upgraded from version 1.843 to 1.853.
333
334=item *
335
336L<Devel::PPPort> has been upgraded from version 3.52 to 3.57.
337
338The test files generated on Win32 are now identical to when they are
339generated on POSIX-like systems.
340
341=item *
342
343L<diagnostics> has been upgraded from version 1.36 to 1.37.
344
345=item *
346
347L<Digest::MD5> has been upgraded from version 2.55 to 2.55_01.
348
349=item *
350
351L<Dumpvalue> has been upgraded from version 1.18 to 1.21.
352
353Previously, when dumping elements of an array and encountering an undefined
354value, the string printed would have been C<empty array>. This has been
355changed to what was apparently originally intended:  C<empty slot>.
356
357=item *
358
359L<DynaLoader> has been upgraded from version 1.45 to 1.47.
360
361=item *
362
363L<Encode> has been upgraded from version 3.01 to 3.06.
364
365=item *
366
367L<encoding> has been upgraded from version 2.22 to 3.00.
368
369=item *
370
371L<English> has been upgraded from version 1.10 to 1.11.
372
373=item *
374
375L<Exporter> has been upgraded from version 5.73 to 5.74.
376
377=item *
378
379L<ExtUtils::CBuilder> has been upgraded from version 0.280231 to 0.280234.
380
381=item *
382
383L<ExtUtils::MakeMaker> has been upgraded from version 7.34 to 7.44.
384
385=item *
386
387L<feature> has been upgraded from version 1.54 to 1.58.
388
389A new C<indirect> feature has been added, which is enabled by default
390but allows turning off L<indirect object syntax|perlobj/Indirect
391Object Syntax>.
392
393=item *
394
395L<File::Find> has been upgraded from version 1.36 to 1.37.
396
397On Win32, the tests no longer require either a file in the drive root
398directory, or a writable root directory.
399
400=item *
401
402L<File::Glob> has been upgraded from version 1.32 to 1.33.
403
404=item *
405
406L<File::stat> has been upgraded from version 1.08 to 1.09.
407
408=item *
409
410L<Filter::Simple> has been upgraded from version 0.95 to 0.96.
411
412=item *
413
414L<Getopt::Long> has been upgraded from version 2.5 to 2.51.
415
416=item *
417
418L<Hash::Util> has been upgraded from version 0.22 to 0.23.
419
420The Synopsis has been updated as the example code stopped working with
421newer perls.
422[L<GH #17399|https://github.com/Perl/perl5/issues/17399>]
423
424=item *
425
426L<I18N::Langinfo> has been upgraded from version 0.18 to 0.19.
427
428=item *
429
430L<I18N::LangTags> has been upgraded from version 0.43 to 0.44.
431
432Document the C<IGNORE_WIN32_LOCALE> environment variable.
433
434=item *
435
436L<IO> has been upgraded from version 1.40 to 1.43.
437
438L<IO::Socket> no longer caches a zero protocol value, since this
439indicates that the implementation will select a protocol. This means
440that on platforms that don't implement C<SO_PROTOCOL> for a given
441socket type the protocol method may return C<undef>.
442
443The supplied I<TO> is now always honoured on calls to the C<send()>
444method. L<[GH #16891]|https://github.com/Perl/perl5/issues/16891>
445
446=item *
447
448IO-Compress has been upgraded from version 2.084 to 2.093.
449
450=item *
451
452L<IPC::Cmd> has been upgraded from version 1.02 to 1.04.
453
454=item *
455
456L<IPC::Open3> has been upgraded from version 1.20 to 1.21.
457
458=item *
459
460L<JSON::PP> has been upgraded from version 4.02 to 4.04.
461
462=item *
463
464L<Math::BigInt> has been upgraded from version 1.999816 to 1.999818.
465
466=item *
467
468L<Math::BigInt::FastCalc> has been upgraded from version 0.5008 to 0.5009.
469
470=item *
471
472L<Module::CoreList> has been upgraded from version 5.20190522 to 5.20200620.
473
474=item *
475
476L<Module::Load::Conditional> has been upgraded from version 0.68 to 0.70.
477
478=item *
479
480L<Module::Metadata> has been upgraded from version 1.000036 to 1.000037.
481
482=item *
483
484L<mro> has been upgraded from version 1.22 to 1.23.
485
486=item *
487
488L<Net::Ping> has been upgraded from version 2.71 to 2.72.
489
490=item *
491
492L<Opcode> has been upgraded from version 1.43 to 1.47.
493
494=item *
495
496L<open> has been upgraded from version 1.11 to 1.12.
497
498=item *
499
500L<overload> has been upgraded from version 1.30 to 1.31.
501
502=item *
503
504L<parent> has been upgraded from version 0.237 to 0.238.
505
506=item *
507
508L<perlfaq> has been upgraded from version 5.20190126 to 5.20200523.
509
510=item *
511
512L<PerlIO> has been upgraded from version 1.10 to 1.11.
513
514=item *
515
516L<PerlIO::encoding> has been upgraded from version 0.27 to 0.28.
517
518=item *
519
520L<PerlIO::via> has been upgraded from version 0.17 to 0.18.
521
522=item *
523
524L<Pod::Html> has been upgraded from version 1.24 to 1.25.
525
526=item *
527
528L<Pod::Simple> has been upgraded from version 3.35 to 3.40.
529
530=item *
531
532L<podlators> has been upgraded from version 4.11 to 4.14.
533
534=item *
535
536L<POSIX> has been upgraded from version 1.88 to 1.94.
537
538=item *
539
540L<re> has been upgraded from version 0.37 to 0.40.
541
542=item *
543
544L<Safe> has been upgraded from version 2.40 to 2.41.
545
546=item *
547
548L<Scalar::Util> has been upgraded from version 1.50 to 1.55.
549
550=item *
551
552L<SelfLoader> has been upgraded from version 1.25 to 1.26.
553
554=item *
555
556L<Socket> has been upgraded from version 2.027 to 2.029.
557
558=item *
559
560L<Storable> has been upgraded from version 3.15 to 3.21.
561
562Use of C<note()> from L<Test::More> is now optional in tests. This works
563around a circular dependency with L<Test::More> when installing on very
564old perls from CPAN.
565
566Vstring magic strings over 2GB are now disallowed.
567
568Regular expressions objects weren't properly counted for object id
569purposes on retrieve. This would corrupt the resulting structure, or
570cause a runtime error in some cases. L<[GH #17037]|https://github.com/Perl/perl5/issues/17037>
571
572=item *
573
574L<Sys::Hostname> has been upgraded from version 1.22 to 1.23.
575
576=item *
577
578L<Sys::Syslog> has been upgraded from version 0.35 to 0.36.
579
580=item *
581
582L<Term::ANSIColor> has been upgraded from version 4.06 to 5.01.
583
584=item *
585
586L<Test::Simple> has been upgraded from version 1.302162 to 1.302175.
587
588=item *
589
590L<Thread> has been upgraded from version 3.04 to 3.05.
591
592=item *
593
594L<Thread::Queue> has been upgraded from version 3.13 to 3.14.
595
596=item *
597
598L<threads> has been upgraded from version 2.22 to 2.25.
599
600=item *
601
602L<threads::shared> has been upgraded from version 1.60 to 1.61.
603
604=item *
605
606L<Tie::File> has been upgraded from version 1.02 to 1.06.
607
608=item *
609
610L<Tie::Hash::NamedCapture> has been upgraded from version 0.10 to 0.13.
611
612=item *
613
614L<Tie::Scalar> has been upgraded from version 1.04 to 1.05.
615
616=item *
617
618L<Tie::StdHandle> has been upgraded from version 4.5 to 4.6.
619
620=item *
621
622L<Time::HiRes> has been upgraded from version 1.9760 to 1.9764.
623
624Removed obsolete code such as support for pre-5.6 perl and classic
625MacOS. L<[GH #17096]|https://github.com/Perl/perl5/issues/17096>
626
627=item *
628
629L<Time::Piece> has been upgraded from version 1.33 to 1.3401.
630
631=item *
632
633L<Unicode::Normalize> has been upgraded from version 1.26 to 1.27.
634
635=item *
636
637L<Unicode::UCD> has been upgraded from version 0.72 to 0.75.
638
639=item *
640
641L<VMS::Stdio> has been upgraded from version 2.44 to 2.45.
642
643=item *
644
645L<warnings> has been upgraded from version 1.44 to 1.47.
646
647=item *
648
649L<Win32> has been upgraded from version 0.52 to 0.53.
650
651=item *
652
653L<Win32API::File> has been upgraded from version 0.1203 to 0.1203_01.
654
655=item *
656
657L<XS::APItest> has been upgraded from version 1.00 to 1.09.
658
659=back
660
661=head2 Removed Modules and Pragmata
662
663=over 4
664
665=item *
666
667Pod::Parser has been removed from the core distribution.
668It still is available for download from CPAN. This resolves
669[L<#13194|https://github.com/Perl/perl5/issues/13194>].
670
671=back
672
673=head1 Documentation
674
675=head2 Changes to Existing Documentation
676
677We have attempted to update the documentation to reflect the changes
678listed in this document. If you find any we have missed, open an issue
679at L<https://github.com/Perl/perl5/issues>.
680
681Additionally, the following selected changes have been made:
682
683=head3 L<perldebguts>
684
685=over 4
686
687=item *
688
689Simplify a few regnode definitions
690
691Update C<BOUND> and C<NBOUND> definitions.
692
693=item *
694
695Add ANYOFHs regnode
696
697This node is like C<ANYOFHb>, but is used when more than one leading byte
698is the same in all the matched code points.
699
700C<ANYOFHb> is used to avoid having to convert from UTF-8 to code point for
701something that won't match. It checks that the first byte in the UTF-8
702encoded target is the desired one, thus ruling out most of the possible
703code points.
704
705=back
706
707=head3 L<perlapi>
708
709=over 4
710
711=item *
712
713C<sv_2pvbyte> updated to mention it will croak if the SV cannot be
714downgraded.
715
716=item *
717
718C<sv_setpvn> updated to mention that the UTF-8 flag will not be changed by
719this function, and a terminating NUL byte is guaranteed.
720
721=item *
722
723Documentation for C<PL_phase> has been added.
724
725=item *
726
727The documentation for C<grok_bin>, C<grok_oct>, and C<grok_hex> has been
728updated and clarified.
729
730=back
731
732=head3 L<perldiag>
733
734=over 4
735
736=item *
737
738Add documentation for experimental 'isa' operator
739
740(S experimental::isa) This warning is emitted if you use the (C<isa>)
741operator. This operator is currently experimental and its behaviour may
742change in future releases of Perl.
743
744=back
745
746=head3 L<perlfunc>
747
748=over 4
749
750=item C<caller>
751
752Like L<C<__FILE__>|/__FILE__> and L<C<__LINE__>|/__LINE__>, the filename and
753line number returned here may be altered by the mechanism described at
754L<perlsyn/"Plain Old Comments (Not!)">.
755
756=item C<__FILE__>
757
758It can be altered by the mechanism described at
759L<perlsyn/"Plain Old Comments (Not!)">.
760
761=item C<__LINE__>
762
763It can be altered by the mechanism described at
764L<perlsyn/"Plain Old Comments (Not!)">.
765
766=item C<return>
767
768Now mentions that you cannot return from C<do BLOCK>.
769
770=item C<open>
771
772The C<open()> section had been renovated significantly.
773
774=back
775
776=head3 L<perlguts>
777
778=over 4
779
780=item *
781
782No longer suggesting using perl's C<malloc>. Modern system C<malloc> is
783assumed to be much better than perl's implementation now.
784
785=item *
786
787Documentation about F<embed.fnc> flags has been removed. F<embed.fnc> now has
788sufficient comments within it. Anyone changing that file will see those
789comments first, so entries here are now redundant.
790
791=item *
792
793Updated documentation for C<UTF8f>
794
795=item *
796
797Added missing C<=for apidoc> lines
798
799=back
800
801=head3 L<perlhacktips>
802
803=over 4
804
805=item *
806
807The differences between Perl strings and C strings are now detailed.
808
809=back
810
811=head3 L<perlintro>
812
813=over 4
814
815=item *
816
817The documentation for the repetition operator C<x> have been clarified.
818[L<GH #17335|https://github.com/Perl/perl5/issues/17335>]
819
820=back
821
822=head3 L<perlipc>
823
824=over 4
825
826=item *
827
828The documentation surrounding C<open> and handle usage has been modernized
829to prefer 3-arg open and lexical variables instead of barewords.
830
831=item *
832
833Various updates and fixes including making all examples strict-safe and
834replacing C<-w> with C<use warnings>.
835
836=back
837
838=head3 L<perlop>
839
840=over 4
841
842=item *
843
844'isa' operator is experimental
845
846This is an experimental feature and is available when enabled
847by C<use feature 'isa'>. It emits a warning in the C<experimental::isa>
848category.
849
850=back
851
852=head3 L<perlpod>
853
854=over 4
855
856=item *
857
858Details of the various stacks within the perl interpreter are now explained
859here.
860
861=item *
862
863Advice has been added regarding the usage of C<< ZE<lt>E<gt> >>.
864
865=back
866
867=head3 L<perlport>
868
869=over 4
870
871=item *
872
873Update C<timegm> example to use the correct year format I<1970> instead of I<70>.
874[L<GH #16431|https://github.com/Perl/perl5/issues/16431>]
875
876=back
877
878=head3 L<perlreref>
879
880=over 4
881
882=item *
883
884Fix some typos.
885
886=back
887
888=head3 L<perlvar>
889
890=over 4
891
892=item *
893
894Now recommends stringifying C<$]> and comparing it numerically.
895
896=back
897
898=head3 L<perlapi>, L<perlintern>
899
900=over 4
901
902=item *
903
904Documentation has been added for several functions that were
905lacking it before.
906
907=back
908
909=head3 L<perlxs>
910
911=over 4
912
913=item *
914
915Suggest using C<libffi> for simple library bindings via CPAN modules
916like L<FFI::Platypus> or L<FFI::Raw>.
917
918=back
919
920=head3 L<POSIX>
921
922=over 4
923
924=item *
925
926C<setlocale> warning about threaded builds updated to note it does not
927apply on Perl 5.28.X and later.
928
929=item *
930
931C<< Posix::SigSet->new(...) >> updated to state it throws an error if any of
932the supplied signals cannot be added to the set.
933
934=back
935
936Additionally, the following selected changes have been made:
937
938=head3 Updating of links
939
940=over 4
941
942=item *
943
944Links to the now defunct L<https://search.cpan.org> site now point at
945the equivalent L<https://metacpan.org> URL. [L<GH #17393|https://github.com/Perl/perl5/issues/17393>]
946
947=item *
948
949The man page for L<ExtUtils::XSSymSet> is now only installed on VMS,
950which is the only platform the module is installed on. [L<GH #17424|https://github.com/Perl/perl5/issues/17424>]
951
952=item *
953
954URLs have been changed to C<https://> and stale links have been updated.
955
956Where applicable, the URLs in the documentation have been moved from using the
957C<http://> protocol to C<https://>. This also affects the location of the bug
958tracker at L<https://rt.perl.org>.
959
960=item *
961
962Some links to OS/2 libraries, Address Sanitizer and other system tools had gone
963stale. These have been updated with working links.
964
965=item *
966
967Some links to old email addresses on perl5-porters had gone stale. These have been
968updated with working links.
969
970=back
971
972=head1 Diagnostics
973
974The following additions or changes have been made to diagnostic output,
975including warnings and fatal error messages. For the complete list of
976diagnostic messages, see L<perldiag>.
977
978=head2 New Diagnostics
979
980=head3 New Errors
981
982=over 4
983
984=item *
985
986L<Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>
987|perldiag/"Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>">
988
989This is a replacement for several error messages listed under
990L</Changes to Existing Diagnostics>.
991
992=item *
993
994C<L<No digits found for %s literal|perldiag/"No digits found for %s literal">>
995
996(F) No hexadecimal digits were found following C<0x> or no binary digits were
997found following C<0b>.
998
999=back
1000
1001=head3 New Warnings
1002
1003=over 4
1004
1005=item *
1006
1007L<Code point 0x%X is not Unicode, and not portable|perldiag/"Code point 0x%X is not Unicode, and not portable">
1008
1009This is actually not a new message, but it is now output when the
1010warnings category C<portable> is enabled.
1011
1012When raised during regular expression pattern compilation, the warning
1013has extra text added at the end marking where precisely in the pattern
1014it occurred.
1015
1016=item *
1017
1018L<Non-hex character '%c' terminates \x early.  Resolved as "%s"|perldiag/"Non-hex character '%c' terminates \x early.  Resolved as "%s"">
1019
1020This replaces a warning that was much less specific, and which gave
1021false information. This new warning parallels the similar
1022already-existing one raised for C<\o{}>.
1023
1024=back
1025
1026=head2 Changes to Existing Diagnostics
1027
1028=over 4
1029
1030=item *
1031
1032L<Character following "\c" must be printable ASCII|perldiag/"Character following "\c" must be printable ASCII">
1033
1034...now has extra text added at the end, when raised during regular
1035expression pattern compilation, marking where precisely in the pattern
1036it occurred.
1037
1038=item *
1039
1040L<Use "%s" instead of "%s"|perldiag/"Use "%s" instead of "%s"">
1041
1042...now has extra text added at the end, when raised during regular
1043expression pattern compilation, marking where precisely in the pattern
1044it occurred.
1045
1046=item *
1047
1048L<Sequence "\c{" invalid|perldiag/"Sequence "\c{" invalid">
1049
1050...now has extra text added at the end, when raised during regular
1051expression pattern compilation, marking where precisely in the pattern
1052it occurred.
1053
1054=item *
1055
1056L<"\c%c" is more clearly written simply as "%s"|perldiag/""\c%c" is more clearly written simply as "%s"">
1057
1058...now has extra text added at the end, when raised during regular
1059expression pattern compilation, marking where precisely in the pattern
1060it occurred.
1061
1062=item *
1063
1064L<Non-octal character '%c' terminates \o early.  Resolved as "%s"|perldiag/"Non-octal character '%c' terminates \o early.  Resolved as "%s"">
1065
1066...now includes the phrase "terminates \o early", and has extra text added
1067at the end, when raised during regular expression pattern compilation,
1068marking where precisely in the pattern it occurred. In some instances
1069the text of the resolution has been clarified.
1070
1071=item *
1072
1073L<'%s' resolved to '\o{%s}%d'|perldiag/'%s' resolved to '\o{%s}%d'>
1074
1075As of Perl 5.32, this message is no longer generated. Instead,
1076L<perldiag/Non-octal character '%c' terminates \o early.  Resolved as "%s">
1077is used instead.
1078
1079=item *
1080
1081L<Use of code point 0x%s is not allowed; the permissible max is 0x%X|perldiag/"Use of code point 0x%s is not allowed; the permissible max is 0x%X">
1082
1083Some instances of this message previously output the hex digits C<A>,
1084C<B>, C<C>, C<D>, C<E>, and C<F> in lower case. Now they are all
1085consistently upper case.
1086
1087=item *
1088
1089The following three diagnostics have been removed, and replaced by
1090L<C<Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>>
1091|perldiag/"Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>">:
1092C<Expecting close paren for nested extended charclass in regex; marked
1093by <-- HERE in mE<sol>%sE<sol>>,
1094C<Expecting close paren for wrapper for nested extended charclass in
1095regex; marked by <-- HERE in mE<sol>%sE<sol>>,
1096and
1097C<Expecting '(?flags:(?[...' in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>>.
1098
1099=item *
1100
1101The C<Code point 0x%X is not Unicode, and not portable> warning removed
1102the line C<Code points above 0xFFFF_FFFF require larger than a 32 bit word.>
1103as code points that large are no longer legal on 32-bit platforms.
1104
1105=item *
1106
1107L<Can't use global %s in %s|perldiag/"Can't use global %s in %s">
1108
1109This error message has been slightly reformatted from the original C<Can't use
1110global %s in "%s">, and in particular misleading error messages like C<Can't
1111use global $_ in "my"> are now rendered as C<Can't use global $_ in subroutine
1112signature>.
1113
1114=item *
1115
1116L<Constants from lexical variables potentially modified elsewhere are no longer permitted|perldiag/"Constants from lexical variables potentially modified elsewhere are no longer permitted">
1117
1118This error message replaces the former C<Constants from lexical variables
1119potentially modified elsewhere are deprecated. This will not be allowed in Perl
11205.32> to reflect the fact that this previously deprecated usage has now been
1121transformed into an exception. The message's classification has also been
1122updated from D (deprecated) to F (fatal).
1123
1124See also L</Incompatible Changes>.
1125
1126=item *
1127
1128C<\N{} here is restricted to one character> is now emitted in the same
1129circumstances where previously C<\N{} in inverted character class or as a range
1130end-point is restricted to one character> was.
1131
1132This is due to new circumstances having been added in Perl 5.30 that weren't
1133covered by the earlier wording.
1134
1135=back
1136
1137=head1 Utility Changes
1138
1139=head2 L<perlbug>
1140
1141=over 4
1142
1143=item * The bug tracker homepage URL now points to GitHub.
1144
1145=back
1146
1147=head2 L<streamzip>
1148
1149=over 4
1150
1151=item *
1152
1153This is a new utility, included as part of an
1154L<IO::Compress::Base> upgrade.
1155
1156L<streamzip> creates a zip file from stdin. The program will read data
1157from stdin, compress it into a zip container and, by default, write a
1158streamed zip file to stdout.
1159
1160=back
1161
1162=head1 Configuration and Compilation
1163
1164=head2 F<Configure>
1165
1166=over 4
1167
1168=item *
1169
1170For clang++, add C<< #include <stdlib.h> >> to Configure's probes for
1171C<futimes>, C<strtoll>, C<strtoul>, C<strtoull>, C<strtouq>, otherwise the
1172probes would fail to compile.
1173
1174=item *
1175
1176Use a compile and run test for C<lchown> to satisfy clang++ which should
1177more reliably detect it.
1178
1179=item *
1180
1181For C++ compilers, add C<< #include <stdio.h> >> to Configure's probes for
1182C<getpgrp> and C<setpgrp> as they use printf and C++ compilers may fail
1183compilation instead of just warning.
1184
1185=item *
1186
1187Check if the compiler can handle inline attribute.
1188
1189=item *
1190
1191Check for character data alignment.
1192
1193=item *
1194
1195F<Configure> now correctly handles gcc-10. Previously it was interpreting it
1196as gcc-1 and turned on C<-fpcc-struct-return>.
1197
1198=item *
1199
1200Perl now no longer probes for C<d_u32align>, defaulting to C<define> on all
1201platforms. This check was error-prone when it was done, which was on 32-bit
1202platforms only.
1203L<[GH #16680]|https://github.com/Perl/perl5/issues/16680>
1204
1205=item *
1206
1207Documentation and hints for building perl on Z/OS (native EBCDIC) have been
1208updated. This is still a work in progress.
1209
1210=item *
1211
1212A new probe for C<malloc_usable_size> has been added.
1213
1214=item *
1215
1216Improvements in F<Configure> to detection in C++ and clang++. Work ongoing by
1217Andy Dougherty. L<[GH #17033]|https://github.com/Perl/perl5/issues/17033>
1218
1219=item *
1220
1221F<autodoc.pl>
1222
1223This tool that regenerates L<perlintern> and L<perlapi> has been overhauled
1224significantly, restoring consistency in flags used in F<embed.fnc> and
1225L<Devel::PPPort> and allowing removal of many redundant C<=for apidoc>
1226entries in code.
1227
1228=item *
1229
1230The C<ECHO> macro is now defined. This is used in a C<dtrace> rule that was
1231originally changed for FreeBSD, and the FreeBSD make apparently predefines it.
1232The Solaris make does not predefine C<ECHO> which broke this rule on Solaris.
1233L<[GH #17057]|https://github.com/Perl/perl5/issues/17057>
1234
1235=item *
1236
1237Bison versions 3.1 through 3.4 are now supported.
1238
1239=back
1240
1241=head1 Testing
1242
1243Tests were added and changed to reflect the other additions and
1244changes in this release. Furthermore, these significant changes were
1245made:
1246
1247=over 4
1248
1249=item *
1250
1251F<t/run/switches.t> no longer uses (and re-uses) the F<tmpinplace/>
1252directory under F<t/>. This may prevent spurious failures. [L<GH #17424|https://github.com/Perl/perl5/issues/17424>]
1253
1254=item *
1255
1256Various bugs in C<POSIX::mbtowc> were fixed. Potential races with
1257other threads are now avoided, and previously the returned wide
1258character could well be garbage.
1259
1260=item *
1261
1262Various bugs in C<POSIX::wctomb> were fixed. Potential races with other
1263threads are now avoided, and previously it would segfault if the string
1264parameter was shared or hadn't been pre-allocated with a string of
1265sufficient length to hold the result.
1266
1267=item *
1268
1269Certain test output of scalars containing control characters and Unicode
1270has been fixed on EBCDIC.
1271
1272=item *
1273
1274F<t/charset_tools.pl>: Avoid some work on ASCII platforms.
1275
1276=item *
1277
1278F<t/re/regexp.t>: Speed up many regex tests on ASCII platform
1279
1280=item *
1281
1282F<t/re/pat.t>: Skip tests that don't work on EBCDIC.
1283
1284=back
1285
1286=head1 Platform Support
1287
1288=head2 Discontinued Platforms
1289
1290=over 4
1291
1292=item Windows CE
1293
1294Support for building perl on Windows CE has now been removed.
1295
1296=back
1297
1298=head2 Platform-Specific Notes
1299
1300=over 4
1301
1302=item Linux
1303
1304C<cc> will be used to populate C<plibpth> if C<cc> is C<clang>.
1305L<[GH #17043]|https://github.com/Perl/perl5/issues/17043>
1306
1307=item NetBSD 8.0
1308
1309Fix compilation of Perl on NetBSD 8.0 with g++.
1310[L<GH #17381|https://github.com/Perl/perl5/issues/17381>]
1311
1312=item Windows
1313
1314=over 4
1315
1316=item *
1317
1318The configuration for C<ccflags> and C<optimize> are now separate, as
1319with POSIX platforms. [L<GH #17156|https://github.com/Perl/perl5/issues/17156>]
1320
1321=item *
1322
1323Support for building perl with Visual C++ 6.0 has now been removed.
1324
1325=item *
1326
1327The locale tests could crash on Win32 due to a Windows bug, and
1328separately due to the CRT throwing an exception if the locale name
1329wasn't validly encoded in the current code page.
1330
1331For the second we now decode the locale name ourselves, and always
1332decode it as UTF-8. L<[GH #16922]|https://github.com/Perl/perl5/issues/16922>
1333
1334=item *
1335
1336F<t/op/magic.t> could fail if environment variables starting with
1337C<FOO> already existed.
1338
1339=item *
1340
1341MYMALLOC (PERL_MALLOC) build has been fixed.
1342
1343=back
1344
1345=item Solaris
1346
1347=over 4
1348
1349=item *
1350
1351C<Configure> will now find recent versions of the Oracle Developer Studio
1352compiler, which are found under C</opt/developerstudio*>.
1353
1354=item *
1355
1356C<Configure> now uses the detected types for C<gethostby*> functions, allowing
1357Perl to once again compile on certain configurations of Solaris.
1358
1359=back
1360
1361=item VMS
1362
1363=over 4
1364
1365=item *
1366
1367With the release of the patch kit C99 V2.0, VSI has provided support for a
1368number of previously-missing C99 features. On systems with that patch kit
1369installed, Perl's configuration process will now detect the presence of the
1370header C<stdint.h> and the following functions: C<fpclassify>, C<isblank>, C<isless>,
1371C<llrint>, C<llrintl>, C<llround>, C<llroundl>, C<nearbyint>, C<round>, C<scalbn>,
1372and C<scalbnl>.
1373
1374=item *
1375
1376C<-Duse64bitint> is now the default on VMS.
1377
1378=back
1379
1380=item z/OS
1381
1382Perl 5.32 has been tested on z/OS 2.4, with the following caveats:
1383
1384=over 4
1385
1386=item *
1387
1388Only static builds (the default) build reliably
1389
1390=item *
1391
1392When using locales, z/OS does not handle the C<LC_MESSAGES> category
1393properly, so when compiling perl, you should add the following to your
1394F<Configure> options
1395
1396 ./Configure <other options> -Accflags=-DNO_LOCALE_MESSAGES
1397
1398=item *
1399
1400z/OS does not support locales with threads, so when compiling a threaded
1401perl, you should add the following to your F<Configure> options
1402
1403 ./Configure <other Configure options> -Accflags=-DNO_LOCALE
1404
1405=item *
1406
1407Some CPAN modules that are shipped with perl fail at least one of their
1408self-tests.  These are:
1409Archive::Tar,
1410Config::Perl::V,
1411CPAN::Meta,
1412CPAN::Meta::YAML,
1413Digest::MD5,
1414Digest::SHA,
1415Encode,
1416ExtUtils::MakeMaker,
1417ExtUtils::Manifest,
1418HTTP::Tiny,
1419IO::Compress,
1420IPC::Cmd,
1421JSON::PP,
1422libnet,
1423MIME::Base64,
1424Module::Metadata,
1425PerlIO::via-QuotedPrint,
1426Pod::Checker,
1427podlators,
1428Pod::Simple,
1429Socket,
1430and Test::Harness.
1431
1432The causes of the failures range from the self-test itself is flawed,
1433and the module actually works fine, up to the module doesn't work at all
1434on EBCDIC platforms.
1435
1436=back
1437
1438=back
1439
1440=head1 Internal Changes
1441
1442=over 4
1443
1444=item *
1445
1446C<savepvn>'s len parameter is now a C<Size_t> instead of an C<I32> since we
1447can handle longer strings than 31 bits.
1448
1449=item *
1450
1451The lexer (C<Perl_yylex()> in F<toke.c>) was previously a single 4100-line
1452function, relying heavily on C<goto> and a lot of widely-scoped local variables
1453to do its work. It has now been pulled apart into a few dozen smaller static
1454functions; the largest remaining chunk (C<yyl_word_or_keyword()>) is a little
1455over 900 lines, and consists of a single C<switch> statement, all of whose
1456C<case> groups are independent. This should be much easier to understand and
1457maintain.
1458
1459=item *
1460
1461The OS-level signal handlers and type (Sighandler_t) used by the perl core
1462were declared as having three parameters, but the OS was always told to
1463call them with one argument. This has been fixed by declaring them to have
1464one parameter. See the merge commit C<v5.31.5-346-g116e19abbf> for full
1465details.
1466
1467=item *
1468
1469The code that handles C<tr///> has been extensively revised, fixing
1470various bugs, especially when the source and/or replacement strings
1471contain characters whose code points are above 255. Some of the bugs
1472were undocumented, one being that under some circumstances (but not all)
1473with C</s>, the squeezing was done based on the source, rather than the
1474replacement. A documented bug that got fixed was
1475L<[GH #14777]|https://github.com/Perl/perl5/issues/14777>.
1476
1477=item *
1478
1479A new macro for XS writers dealing with UTF-8-encoded Unicode strings
1480has been created L<perlapi/C<UTF8_CHK_SKIP>> that is safer in the face
1481of malformed UTF-8 input than L<perlapi/C<UTF8_SKIP>> (but not as safe
1482as L<perlapi/C<UTF8_SAFE_SKIP>>). It won't read past a NUL character.
1483It has been backported in L<Devel::PPPort> 3.55 and later.
1484
1485=item *
1486
1487Added the C<< PL_curstackinfo->si_cxsubix >> field. This records the stack index
1488of the most recently pushed sub/format/eval context. It is set and restored
1489automatically by C<cx_pushsub()>, C<cx_popsub()> etc., but would need to be
1490manually managed if you do any unusual manipulation of the context stack.
1491
1492=item *
1493
1494Various macros dealing with character type classification and changing case
1495where the input is encoded in UTF-8 now require an extra parameter to prevent
1496potential reads beyond the end of the buffer. Use of these has generated a
1497deprecation warning since Perl 5.26. Details are in
1498L<perldeprecation/In XS code, use of various macros dealing with UTF-8.>
1499
1500=item *
1501
1502A new parser function L<parse_subsignature()|perlapi/parse_subsignature>
1503allows a keyword plugin to parse a subroutine signature while C<use feature
1504'signatures'> is in effect. This allows custom keywords to implement
1505semantics similar to regular C<sub> declarations that include signatures.
1506L<[GH #16261]|https://github.com/Perl/perl5/issues/16261>
1507
1508=item *
1509
1510Since on some platforms we need to hold a mutex when temporarily
1511switching locales, new macros (C<STORE_LC_NUMERIC_SET_TO_NEEDED_IN>,
1512C<WITH_LC_NUMERIC_SET_TO_NEEDED> and C<WITH_LC_NUMERIC_SET_TO_NEEDED_IN>)
1513have been added to make it easier to do this safely and efficiently
1514as part of L<[GH #17034]|https://github.com/Perl/perl5/issues/17034>.
1515
1516=item *
1517
1518The memory bookkeeping overhead for allocating an OP structure has been
1519reduced by 8 bytes per OP on 64-bit systems.
1520
1521=item *
1522
1523L<eval_pv()|perlapi/eval_pv> no longer stringifies the exception when
1524C<[GH #17035]|https://github.com/Perl/perl5/issues/17035>]
1525
1526=item *
1527
1528The PERL_DESTRUCT_LEVEL environment variable was formerly only honoured on perl
1529binaries built with DEBUGGING support. It is now checked on all perl builds.
1530Its normal use is to force perl to individually free every block of memory
1531which it has allocated before exiting, which is useful when using automated
1532leak detection tools such as valgrind.
1533
1534=item *
1535
1536The API eval_sv() now accepts a C<G_RETHROW> flag. If this flag is set and an
1537exception is thrown while compiling or executing the supplied code, it will be
1538rethrown, and eval_sv() will not return.
1539L<[GH #17036]|https://github.com/Perl/perl5/issues/17036>
1540
1541=item *
1542
1543As part of the fix for
1544L<[GH #1537]|https://github.com/Perl/perl5/issues/1537> perl_parse()
1545now returns non-zero if exit(0) is called in a C<BEGIN>, C<UNITCHECK> or
1546C<CHECK> block.
1547
1548=item *
1549
1550Most functions which recursively walked an op tree during compilation have been
1551made non-recursive. This avoids SEGVs from stack overflow when the op tree is
1552deeply nested, such as C<$n == 1 ? "one" : $n == 2 ? "two" : ....> (especially
1553in code which is auto-generated).
1554
1555This is particularly noticeable where the code is compiled within a separate
1556thread, as threads tend to have small stacks by default.
1557
1558=back
1559
1560=head1 Selected Bug Fixes
1561
1562=over 4
1563
1564=item *
1565
1566Previously L<perlfunc/require> would only treat the special built-in
1567SV C<&PL_sv_undef> as a value in C<%INC> as if a previous C<require>
1568has failed, treating other undefined SVs as if the previous C<require>
1569has succeeded. This could cause unexpected success from C<require>
1570e.g., on C<local %INC = %INC;>. This has been fixed. [L<GH #17428|https://github.com/Perl/perl5/issues/17428>]
1571
1572=item *
1573
1574C<(?{...})> eval groups in regular expressions no longer unintentionally
1575trigger "EVAL without pos change exceeded limit in regex" [L<GH #17490|https://github.com/Perl/perl5/issues/17490>].
1576
1577=item *
1578
1579C<(?[...])> extended bracketed character classes do not wrongly raise an
1580error on some cases where a previously-compiled such class is
1581interpolated into another. The heuristics previously used have been
1582replaced by a reliable method, and hence the diagnostics generated have
1583changed. See L</Diagnostics>.
1584
1585=item *
1586
1587The debug display (say by specifying C<-Dr> or S<C<use re>> (with
1588appropriate options) of compiled Unicode property wildcard subpatterns no
1589longer has extraneous output.
1590
1591=item *
1592
1593Fix an assertion failure in the regular expression engine.
1594[L<GH #17372|https://github.com/Perl/perl5/issues/17372>]
1595
1596=item *
1597
1598Fix coredump in pp_hot.c after C<B::UNOP_AUX::aux_list()>.
1599[L<GH #17301|https://github.com/Perl/perl5/issues/17301>]
1600
1601=item *
1602
1603Loading IO is now threadsafe.
1604[L<GH #14816|https://github.com/Perl/perl5/issues/14816>]
1605
1606=item *
1607
1608C<\p{user-defined}> overrides official Unicode [L<GH #17025|https://github.com/Perl/perl5/issues/17025>]
1609
1610Prior to this patch, the override was only sometimes in effect.
1611
1612=item *
1613
1614Properly handle filled C</il> regnodes and multi-char folds
1615
1616=item *
1617
1618Compilation error during make minitest [L<GH #17293|https://github.com/Perl/perl5/issues/17293>]
1619
1620=item *
1621
1622Move the implementation of C<%->, C<%+> into core.
1623
1624=item *
1625
1626Read beyond buffer in C<grok_inf_nan> [L<GH #17370|https://github.com/Perl/perl5/issues/17370>]
1627
1628=item *
1629
1630Workaround glibc bug with C<LC_MESSAGES> [L<GH #17081|https://github.com/Perl/perl5/issues/17081>]
1631
1632=item *
1633
1634C<printf()> or C<sprintf()> with the C<%n> format could cause a panic on
1635debugging builds, or report an incorrectly cached length value when
1636producing C<SVfUTF8> flagged strings. [L<GH #17221|https://github.com/Perl/perl5/issues/17221>]
1637
1638=item *
1639
1640The tokenizer has been extensively refactored.
1641[L<GH #17241|https://github.com/Perl/perl5/issues/17241>]
1642[L<GH #17189|https://github.com/Perl/perl5/issues/17189>]
1643
1644=item *
1645
1646C<use strict "subs"> is now enforced for bareword constants optimized
1647into a C<multiconcat> operator. [L<GH #17254|https://github.com/Perl/perl5/issues/17254>]
1648
1649=item *
1650
1651A memory leak in regular expression patterns has been fixed. [L<GH #17218|https://github.com/Perl/perl5/issues/17218>]
1652
1653=item *
1654
1655Perl no longer treats strings starting with "0x" or "0b" as hex or
1656binary numbers respectively when converting a string to a number.
1657This reverts a change in behaviour inadvertently introduced in perl
16585.30.0 intended to improve precision when converting a string to a
1659floating point number. L<[GH #17062]|https://github.com/Perl/perl5/issues/17062>
1660
1661=item *
1662
1663Matching a non-C<SVf_UTF8> string against a regular expression
1664containing unicode literals could leak a SV on each match attempt.
1665L<[GH #17140]|https://github.com/Perl/perl5/issues/17140>
1666
1667=item *
1668
1669Overloads for octal and binary floating point literals were always
1670passed a string with a C<0x> prefix instead of the appropriate C<0> or
1671C<[GH #14791]|https://github.com/Perl/perl5/issues/14791>]
1672
1673=item *
1674
1675C<< $@ = 100; die; >> now correctly propagates the 100 as an exception
1676instead of ignoring it. L<[GH #17098]|https://github.com/Perl/perl5/issues/17098>
1677
1678=item *
1679
1680C<[GH #17108]|https://github.com/Perl/perl5/issues/17108>]
1681
1682=item *
1683
1684Exceptions thrown while C<$@> is read-only could result in infinite
1685recursion as perl tried to update C<$@>, which throws another
1686exception, resulting in a stack overflow. Perl now replaces C<$@>
1687with a copy if it's not a simple writable SV. L<[GH #17083]|https://github.com/Perl/perl5/issues/17083>
1688
1689=item *
1690
1691Setting C<$)> now properly sets supplementary group ids if you have
1692the necessary privileges. L<[GH #17031]|https://github.com/Perl/perl5/issues/17031>
1693
1694=item *
1695
1696close() on a pipe now preemptively clears the PerlIO object from the
1697IO SV. This prevents a second attempt to close the already closed
1698PerlIO object if a signal handler calls die() or exit() while close()
1699is waiting for the child process to complete. L<[GH #13929]|https://github.com/Perl/perl5/issues/13929>
1700
1701=item *
1702
1703C<< sprintf("%.*a", -10000, $x) >> would cause a buffer overflow due
1704to mishandling of the negative precision value. L<[GH #16942]|https://github.com/Perl/perl5/issues/16942>
1705
1706=item *
1707
1708scalar() on a reference could cause an erroneous assertion failure
1709during compilation. L<[GH #16969]|https://github.com/Perl/perl5/issues/16969>
1710
1711=item *
1712
1713C<%{^CAPTURE_ALL}> is now an alias to C<%-> as documented, rather than
1714incorrectly an alias for C<[GH #16105]|https://github.com/Perl/perl5/issues/16105>]
1715
1716=item *
1717
1718C<%{^CAPTURE}> didn't work if C<@{^CAPTURE}> was mentioned first.
1719Similarly for C<%{^CAPTURE_ALL}> and C<@{^CAPTURE_ALL}>, though
1720C<[GH #17045]|https://github.com/Perl/perl5/issues/17045>]
1721
1722=item *
1723
1724Extraordinarily large (over 2GB) floating point format widths could
1725cause an integer overflow in the underlying call to snprintf(),
1726resulting in an assertion. Formatted floating point widths are now
1727limited to the range of int, the return value of snprintf().
1728[L<#16881|https://github.com/Perl/perl5/issues/16881>]
1729
1730=item *
1731
1732Parsing the following constructs within a sub-parse (such as with
1733C<"${code here}"> or C<s/.../code here/e>) has changed to match how
1734they're parsed normally:
1735
1736=over
1737
1738=item *
1739
1740C<print $fh ...> no longer produces a syntax error.
1741
1742=item *
1743
1744Code like C<s/.../ ${time} /e> now properly produces an "Ambiguous use
1745of ${time} resolved to $time at ..." warning when warnings are enabled.
1746
1747=item *
1748
1749C<@x {"a"}> (with the space) in a sub-parse now properly produces a
1750"better written as" warning when warnings are enabled.
1751
1752=item *
1753
1754Attributes can now be used in a sub-parse.
1755L<[GH #16847]|https://github.com/Perl/perl5/issues/16847>
1756
1757=back
1758
1759=item *
1760
1761Incomplete hex and binary literals like C<0x> and C<0b> are now
1762treated as if the C<x> or C<b> is part of the next token.
1763[L<#17010|https://github.com/Perl/perl5/issues/17010>]
1764
1765=item *
1766
1767A spurious C<)> in a subparse, such as in C<s/.../code here/e> or
1768C<"...${code here}">, no longer confuses the parser.
1769
1770Previously a subparse was bracketed with generated C<(> and C<)>
1771tokens, so a spurious C<)> would close the construct without doing the
1772normal subparse clean up, confusing the parser and possible causing an
1773assertion failure.
1774
1775Such constructs are now surrounded by artificial tokens that can't be
1776included in the source. L<[GH #15814]|https://github.com/Perl/perl5/issues/15814>
1777
1778=item *
1779
1780Reference assignment of a sub, such as C<\&foo = \&bar;>, silently did
1781nothing in the C<[GH #16987]|https://github.com/Perl/perl5/issues/16987>]
1782
1783=item *
1784
1785sv_gets() now recovers better if the target SV is modified by a signal
1786handler. L<[GH #16960]|https://github.com/Perl/perl5/issues/16960>
1787
1788=item *
1789
1790C<readline @foo> now evaluates C<@foo> in scalar context. Previously
1791it would be evaluated in list context, and since readline() pops only
1792one argument from the stack, the stack could underflow, or be left
1793with unexpected values on the stack. L<[GH #16929]|https://github.com/Perl/perl5/issues/16929>
1794
1795=item *
1796
1797Parsing incomplete hex or binary literals was changed in 5.31.1 to treat such a
1798literal as just the 0, leaving the following C<x> or C<b> to be parsed as part
1799of the next token. This could lead to some silent changes in behaviour, so now
1800incomplete hex or binary literals produce a fatal error.
1801L<[GH #17010]|https://github.com/Perl/perl5/issues/17010>
1802
1803=item *
1804
1805eval_pv()'s I<croak_on_error> flag will now throw even if the exception is a
1806false overloaded value.
1807L<[GH #17036]|https://github.com/Perl/perl5/issues/17036>
1808
1809=item *
1810
1811C<INIT> blocks and the program itself are no longer run if exit(0) is called
1812within a C<BEGIN>, C<UNITCHECK> or C<CHECK> block.
1813L<[GH #1537]|https://github.com/Perl/perl5/issues/1537>
1814
1815=item *
1816
1817C<< open my $fh, ">>+", undef >> now opens the temporary file in append mode:
1818writes will seek to the end of file before writing.
1819L<[GH #17058]|https://github.com/Perl/perl5/issues/17058>
1820
1821=item *
1822
1823Fixed a SEGV when searching for the source of an uninitialized value warning on
1824an op whose subtree includes an OP_MULTIDEREF.
1825L<[GH #17088]|https://github.com/Perl/perl5/issues/17088>
1826
1827=back
1828
1829=head1 Obituary
1830
1831Jeff Goff (JGOFF or DrForr), an integral part of the Perl and Raku
1832communities and a dear friend to all of us, has passed away on March
183313th, 2020. DrForr was a prominent member of the communities, attending
1834and speaking at countless events, contributing to numerous projects,
1835and assisting and helping in any way he could.
1836
1837His passing leaves a hole in our hearts and in our communities and he
1838will be sorely missed.
1839
1840=head1 Acknowledgements
1841
1842Perl 5.32.0 represents approximately 13 months of development since Perl
18435.30.0 and contains approximately 220,000 lines of changes across 1,800
1844files from 89 authors.
1845
1846Excluding auto-generated files, documentation and release tools, there were
1847approximately 140,000 lines of changes to 880 .pm, .t, .c and .h files.
1848
1849Perl continues to flourish into its fourth decade thanks to a vibrant
1850community of users and developers. The following people are known to have
1851contributed the improvements that became Perl 5.32.0:
1852
1853Aaron Crane, Alberto Simões, Alexandr Savca, Andreas König, Andrew Fresh,
1854Andy Dougherty, Ask Bjørn Hansen, Atsushi Sugawara, Bernhard M. Wiedemann,
1855brian d foy, Bryan Stenson, Chad Granum, Chase Whitener, Chris 'BinGOs'
1856Williams, Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan Book, Daniel
1857Dragan, Dan Kogai, Dave Cross, Dave Rolsky, David Cantrell, David Mitchell,
1858Dominic Hargreaves, E. Choroba, Felipe Gasper, Florian Weimer, Graham Knop,
1859Håkon Hægland, Hauke D, H.Merijn Brand, Hugo van der Sanden, Ichinose
1860Shogo, James E Keenan, Jason McIntosh, Jerome Duval, Johan Vromans, John
1861Lightsey, John Paul Adrian Glaubitz, Kang-min Liu, Karen Etheridge, Karl
1862Williamson, Leon Timmermans, Manuel Mausz, Marc Green, Matthew Horsfall,
1863Matt Turner, Max Maischein, Michael Haardt, Nicholas Clark, Nicolas R., Niko
1864Tyni, Pali, Paul Evans, Paul Johnson, Paul Marquess, Peter Eisentraut, Peter
1865John Acklam, Peter Oliver, Petr Písař, Renee Baecker, Ricardo Signes,
1866Richard Leach, Russ Allbery, Samuel Smith, Santtu Ojanperä, Sawyer X,
1867Sergey Aleynikov, Sergiy Borodych, Shirakata Kentaro, Shlomi Fish, Sisyphus,
1868Slaven Rezic, Smylers, Stefan Seifert, Steve Hay, Steve Peters, Svyatoslav,
1869Thibault Duponchelle, Todd Rinaldo, Tomasz Konojacki, Tom Hukins, Tony Cook,
1870Unicode Consortium, VanL, Vickenty Fesunov, Vitali Peil, Yves Orton, Zefram.
1871
1872The list above is almost certainly incomplete as it is automatically
1873generated from version control history. In particular, it does not include
1874the names of the (very much appreciated) contributors who reported issues to
1875the Perl bug tracker.
1876
1877Many of the changes included in this version originated in the CPAN modules
1878included in Perl's core. We're grateful to the entire CPAN community for
1879helping Perl to flourish.
1880
1881For a more complete list of all of Perl's historical contributors, please
1882see the F<AUTHORS> file in the Perl source distribution.
1883
1884=head1 Reporting Bugs
1885
1886If you find what you think is a bug, you might check the perl bug database
1887at L<https://github.com/Perl/perl5/issues>. There may also be information at
1888L<http://www.perl.org/>, the Perl Home Page.
1889
1890If you believe you have an unreported bug, please open an issue at
1891L<https://github.com/Perl/perl5/issues>. Be sure to trim your bug down to a
1892tiny but sufficient test case.
1893
1894If the bug you are reporting has security implications which make it
1895inappropriate to send to a public issue tracker, then see
1896L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
1897for details of how to report the issue.
1898
1899=head1 Give Thanks
1900
1901If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
1902you can do so by running the C<perlthanks> program:
1903
1904    perlthanks
1905
1906This will send an email to the Perl 5 Porters list with your show of thanks.
1907
1908=head1 SEE ALSO
1909
1910The F<Changes> file for an explanation of how to view exhaustive details on
1911what changed.
1912
1913The F<INSTALL> file for how to build Perl.
1914
1915The F<README> file for general stuff.
1916
1917The F<Artistic> and F<Copying> files for copyright information.
1918
1919=cut
1920