5 [ this is a template for a new perldelta file. Any text flagged as XXX needs
6 to be processed before release. ]
8 perldelta - what is new for perl v5.23.4
12 This document describes differences between the 5.23.3 release and the 5.23.4
15 If you are upgrading from an earlier release such as 5.23.2, first read
16 L<perl5233delta>, which describes differences between 5.23.2 and 5.23.3.
20 XXX Any important notices here
22 =head1 Core Enhancements
24 XXX New core language features go here. Summarize user-visible core language
25 enhancements. Particularly prominent performance optimisations could go
26 here, but most should go in the L</Performance Enhancements> section.
28 [ List each enhancement as a =head2 entry ]
32 XXX Any security-related notices go here. In particular, any security
33 vulnerabilities closed should be noted here rather than in the
34 L</Selected Bug Fixes> section.
36 [ List each security issue as a =head2 entry ]
38 =head1 Incompatible Changes
40 =head2 Lexical $_ has been removed
42 C<my $_> was introduced in Perl 5.10, and subsequently caused much confusion
43 with no obvious solution. In Perl 5.18.0, it was made experimental on the
44 theory that it would either be removed or redesigned in a less confusing (but
45 backward-incompatible) way. Over the following years, no alternatives were
46 proposed. The feature has now been removed and will fail to compile.
48 =head2 Only blanks and tabs are now allowed within C<[...]> within C<(?[...])>.
50 The experimental Extended Bracketed Character Classes can contain regular
51 bracketed character classes within them. These differ from regular ones in
52 that white space is generally ignored, unless escaped by preceding it with a
53 backslash. The white space that is ignored is now limited to just tab C<\t>
54 and SPACE characters. Previously, it was any white space. See
55 L<perlrecharclass/Extended Bracketed Character Classes>.
59 XXX Any deprecated features, syntax, modules etc. should be listed here.
61 =head2 Module removals
63 XXX Remove this section if inapplicable.
65 The following modules will be removed from the core distribution in a
66 future release, and will at that time need to be installed from CPAN.
67 Distributions on CPAN which require these modules will need to list them as
70 The core versions of these modules will now issue C<"deprecated">-category
71 warnings to alert you to this fact. To silence these deprecation warnings,
72 install the modules in question from CPAN.
74 Note that these are (with rare exceptions) fine modules that you are encouraged
75 to continue to use. Their disinclusion from core primarily hinges on their
76 necessity to bootstrapping a fully functional, CPAN-capable Perl installation,
77 not usually on concerns over their design.
83 XXX Note that deprecated modules should be listed here even if they are listed
84 as an updated module in the L</Modules and Pragmata> section.
88 [ List each other deprecation as a =head2 entry ]
90 =head1 Performance Enhancements
92 XXX Changes which enhance performance without changing behaviour go here.
93 There may well be none in a stable release.
95 [ List each enhancement as a =item entry ]
105 =head1 Modules and Pragmata
107 XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/>
108 go here. If Module::CoreList is updated, generate an initial draft of the
109 following sections using F<Porting/corelist-perldelta.pl>. A paragraph summary
110 for important changes should then be added by hand. In an ideal world,
111 dual-life modules would have a F<Changes> file that could be cribbed.
113 [ Within each section, list entries as a =item entry ]
115 =head2 New Modules and Pragmata
125 =head2 Updated Modules and Pragmata
131 L<XXX> has been upgraded from version A.xx to B.yy.
135 =head2 Removed Modules and Pragmata
147 XXX Changes to files in F<pod/> go here. Consider grouping entries by
148 file and be sure to link to the appropriate page, e.g. L<perlfunc>.
150 =head2 New Documentation
152 XXX Changes which create B<new> files in F<pod/> go here.
156 XXX Description of the purpose of the new file here
158 =head2 Changes to Existing Documentation
160 XXX Changes which significantly change existing files in F<pod/> go here.
161 However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
170 XXX Description of the change here
176 The following additions or changes have been made to diagnostic output,
177 including warnings and fatal error messages. For the complete list of
178 diagnostic messages, see L<perldiag>.
180 XXX New or changed warnings emitted by the core's C<C> code go here. Also
181 include any changes in L<perldiag> that reconcile it to the C<C> code.
183 =head2 New Diagnostics
185 XXX Newly added diagnostic messages go under here, separated into New Errors
194 L<Character following \p must be '{' or a single-character Unicode property name in regex;|perldiag/"Character following \%c must be '{' or a single-character Unicode property name in regex; marked by <-- HERE in m/%s/">
198 L<perldiag/"Illegal user-defined property name">
208 XXX L<message|perldiag/"message">
212 =head2 Changes to Existing Diagnostics
214 XXX Changes (i.e. rewording) of diagnostic messages go here
220 L<"Can't modify non-lvalue subroutine call of &%s"|perldiag/"Can't modify non-lvalue subroutine call of &%s">
222 This error now reports the name of the non-lvalue subroutine you attempted to
227 =head1 Utility Changes
229 XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here.
230 Most of these are built within the directory F<utils>.
232 [ List utility changes as a =head2 entry for each utility and =item
233 entries for each change
234 Use L<XXX> with program names to get proper documentation linking. ]
242 Using the C<NO_HASH_SEED> define in combination with the default hash algorithm
243 C<PERL_HASH_FUNC_ONE_AT_A_TIME_HARD> resulted in a fatal error while compiling
244 the interpreter, since Perl 5.17.10. This has been fixed.
248 =head1 Configuration and Compilation
250 XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools
251 go here. Any other changes to the Perl build process should be listed here.
252 However, any platform-specific changes should be listed in the
253 L</Platform Support> section, instead.
255 [ List changes as a =item entry ].
267 XXX Any significant changes to the testing of a freshly built perl should be
268 listed here. Changes which create B<new> files in F<t/> go here as do any
269 large changes to the testing harness (e.g. when parallel testing was added).
270 Changes to existing files in F<t/> aren't worth summarizing, although the bugs
271 that they represent may be covered elsewhere.
273 [ List each test improvement as a =item entry ]
283 =head1 Platform Support
285 XXX Any changes to platform support should be listed in the sections below.
287 [ Within the sections, list each platform as a =item entry with specific
288 changes as paragraphs below it. ]
292 XXX List any platforms that this version of perl compiles on, that previous
293 versions did not. These will either be enabled by new files in the F<hints/>
294 directories, or new subdirectories and F<README> files at the top level of the
299 =item XXX-some-platform
305 =head2 Discontinued Platforms
307 XXX List any platforms that this version of perl no longer compiles on.
311 =item XXX-some-platform
317 =head2 Platform-Specific Notes
319 XXX List any changes for specific platforms. This could include configuration
320 and compilation changes or changes in portability/compatibility. However,
321 changes within modules for platforms should generally be listed in the
322 L</Modules and Pragmata> section.
326 =item XXX-some-platform
336 A new build option C<USE_NO_REGISTRY> has been added to the makefiles. This
337 option is off by default, meaning the default is to do Windows registry
338 lookups. This option stops Perl from looking inside the registry for anything.
339 For what values are looked up in the registry see L<perlwin32>. Internally, in
340 C, the name of this option is C<WIN32_NO_REGISTRY>.
344 The behavior of Perl using C<HKEY_CURRENT_USER\Software\Perl> and
345 C<HKEY_LOCAL_MACHINE\Software\Perl> to lookup certain values, including C<%ENV>
346 vars starting with C<PERL> has changed. Previously, the 2 keys were checked
347 for entries at all times through Perl processes life time even if they did not
348 exist. For performance reasons, now, if the root key (i.e.
349 C<HKEY_CURRENT_USER\Software\Perl> or C<HKEY_LOCAL_MACHINE\Software\Perl>) does
350 not exist at process start time, it will not be checked again for C<%ENV>
351 override entries for the remainder of the Perl processes life. This more
352 closely matches Unix behaviour in that the environment is copied or inherited
353 on startup and changing the variable in the parent process or another process
354 or editing <.bashrc> will not change the environmental variable in other
355 existing, running, processes.
359 One glob fetch was removed for each C<-X> or C<stat> call whether done from
360 Perl code or internally from Perl's C code. The glob being looked up was
361 C<${^WIN32_SLOPPY_STAT}> which is a special variable. This makes C<-X> and
362 C<stat> slightly faster.
366 During miniperl's process startup, during the build process, 4 to 8 IO calls
367 related to the process starting F<.pl> and the F<buildcustomize.pl> file were
368 removed from the code opening and executing the first 1 or 2 F<.pl> files.
374 =head1 Internal Changes
376 XXX Changes which affect the interface available to C<XS> code go here. Other
377 significant internal changes for future core maintainers should be noted as
380 [ List each change as a =item entry ]
386 L<perlapi/sv_backoff> had its return type changed from C<int> to C<void>. It
387 previously has always returned C<0> since Perl 5.000 stable but that was
388 undocumented. Although C<sv_backoff> is marked as public API, XS code is not
389 expected to be impacted since the proper API call would be through public API
390 C<sv_setsv(sv, &PL_sv_undef)>, or quasi-public C<SvOOK_off>, or non-public
391 C<SvOK_off> calls, and the return value of C<sv_backoff> was previously a
392 meaningless constant that can be rewritten as C<(sv_backoff(sv),0)>.
396 The C<EXTEND> and C<MEXTEND> macros have been improved to avoid various issues
397 with integer truncation and wrapping. In particular, some casts formerly used
398 within the macros have been removed. This means for example that passing an
399 unsigned nitems arg is likely to raise a compiler warning now (it's always been
400 documented to require a signed value; formerly int, lately SSize_t).
404 =head1 Selected Bug Fixes
406 XXX Important bug fixes in the core language are summarized here. Bug fixes in
407 files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
409 [ List each fix as a =item entry ]
415 There were places in regular expression patterns where comments (C<(?#...)>)
416 weren't allowed, but should have been. This is now fixed.
417 L<[perl #116639]|https://rt.perl.org/Ticket/Display.html?id=116639>
421 A regression from perl Perl 5.20 has been fixed, in which some syntax errors in
422 L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> constructs
423 within regular expression patterns could cause a segfault instead of a proper
425 L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180>
429 Some problems with attempting to extend the perl stack to around 2G or 4G
430 entries have been fixed. This was particularly an issue on 32-bit perls built
431 to use 64-bit integers, and was easily noticeable with the list repetition
434 @a = (1) x $big_number
436 Formerly perl may have crashed, depending on the exact value of C<$big_number>;
437 now it will typically raise an exception.
438 L<[perl #125937]|https://rt.perl.org/Ticket/Display.html?id=125937>
442 =head1 Known Problems
444 XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any
445 tests that had to be C<TODO>ed for the release would be noted here. Unfixed
446 platform specific bugs also go here.
448 [ List each fix as a =item entry ]
458 =head1 Errata From Previous Releases
464 (This was actually done in Perl 5.23.2, but the perldelta entry got missed.)
465 The way that C<OP_AASSIGN> handles assignment with potentially common values
466 (e.g. C<($a,$b) = ($b, $a)> has changed. In particular the C<OPpASSIGN_COMMON>
467 flag has been replaced with three more specific flags:
471 OPpASSIGN_COMMON_SCALAR
473 and the runtime now sometimes does a mark and sweep using the C<SVf_BREAK> to
474 detect common elements.
480 XXX If any significant core contributor has died, we've added a short obituary
483 =head1 Acknowledgements
485 XXX Generate this with:
487 perl Porting/acknowledgements.pl v5.23.3..HEAD
489 =head1 Reporting Bugs
491 If you find what you think is a bug, you might check the articles recently
492 posted to the comp.lang.perl.misc newsgroup and the perl bug database at
493 L<https://rt.perl.org/> . There may also be information at
494 L<http://www.perl.org/> , the Perl Home Page.
496 If you believe you have an unreported bug, please run the L<perlbug> program
497 included with your release. Be sure to trim your bug down to a tiny but
498 sufficient test case. Your bug report, along with the output of C<perl -V>,
499 will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
501 If the bug you are reporting has security implications, which make it
502 inappropriate to send to a publicly archived mailing list, then please send it
503 to perl5-security-report@perl.org. This points to a closed subscription
504 unarchived mailing list, which includes all the core committers, who will be
505 able to help assess the impact of issues, figure out a resolution, and help
506 co-ordinate the release of patches to mitigate or fix the problem across all
507 platforms on which Perl is supported. Please only use this address for
508 security issues in the Perl core, not for modules independently distributed on
513 The F<Changes> file for an explanation of how to view exhaustive details on
516 The F<INSTALL> file for how to build Perl.
518 The F<README> file for general stuff.
520 The F<Artistic> and F<Copying> files for copyright information.