b432688b382d7d1c0cdef4fe6f47c9bd3ae874ed
[perl.git] / Porting / perl5240delta.pod
1 =encoding utf8
2
3 =head1 NAME
4
5 perl5240delta - what is new for perl v5.24.0
6
7 =head1 DESCRIPTION
8
9 This document describes the differences between the 5.22.0 release and the
10 5.24.0 release.
11
12 =head1 Core Enhancements
13
14 =head2 Unicode 8.0 is now supported
15
16 For details on what is in this release, see
17 L<http://www.unicode.org/versions/Unicode8.0.0/>.
18
19 =head2 C<qr/(?[ ])/> now works in UTF-8 locales
20
21 L<Extended Bracketed Character Classes|perlrecharclass/Extended Bracketed Character Classes>
22 now will successfully compile when S<C<use locale>> is in effect.  The compiled
23 pattern will use standard Unicode rules.  If the runtime locale is not a
24 UTF-8 one, a warning is raised and standard Unicode rules are used
25 anyway.  No tainting is done since the outcome does not actually depend
26 on the locale.
27
28 =head2 Integer shift (C<< << >> and C<< >> >>) now more explicitly defined
29
30 Negative shifts are reverse shifts: left shift becomes right shift,
31 and right shift becomes left shift.
32
33 Shifting by the number of bits in a native integer (or more) is zero,
34 except when the "overshift" is right shifting a negative value under
35 C<use integer>, in which case the result is -1 (arithmetic shift).
36
37 Until now negative shifting and overshifting have been undefined
38 because they have relied on whatever the C implementation happens
39 to do.  For example, for the overshift a common C behavior is
40 "modulo shift":
41
42   1 >> 64 == 1 >> (64 % 64) == 1 >> 0 == 1  # Common C behavior.
43
44   # And the same for <<, while Perl now produces 0 for both.
45
46 Now these behaviors are well-defined under Perl, regardless of what
47 the underlying C implementation does.  Note, however, that you cannot
48 escape the native integer width, you need to know how far left you
49 can go.  You can use for example:
50
51   use Config;
52   my $wordbits = $Config{uvsize} * 8;  # Or $Config{uvsize} << 3.
53
54 If you need a more bits on the left shift, you can use for example
55 the C<bigint> pragma, or the C<Bit::Vector> module from CPAN.
56
57 =head2 Postfix dereferencing is no longer experimental
58
59 Using the C<postderef> and C<postderef_qq> features no longer emits a
60 warning. Existing code that disables the C<experimental::postderef> warning
61 category that they previously used will continue to work. The C<postderef>
62 feature has no effect; all Perl code can use postfix dereferencing,
63 regardless of what feature declarations are in scope. The C<5.24> feature
64 bundle now includes the C<postderef_qq> feature.
65
66 =head2 printf and sprintf now allow reordered precision arguments
67
68 That is, C<< sprintf '|%.*2$|', 2, 3 >> now returns C<|002|>. This extends
69 the existing reordering mechanism (which allows reordering for arguments
70 that are used as format fields, widths, and vector separators).
71
72 =head1 Incompatible Changes
73
74 =head2 Nested declarations are now disallowed
75
76 A C<my>, C<our>, or C<state> declaration is no longer allowed inside
77 of another C<my>, C<our>, or C<state> declaration.
78
79 For example, these are now fatal:
80
81    my ($x, my($y));
82    our (my $x);
83
84 L<[perl #125587]|https://rt.perl.org/Ticket/Display.html?id=125587>
85
86 L<[perl #121058]|https://rt.perl.org/Ticket/Display.html?id=121058>
87
88 =head2 The C</\C/> character class has been removed.
89
90 This regular expression character class was deprecated in v5.20.0 and has
91 produced a deprecation warning since v5.22.0. It is now a compile-time
92 error. If you need to examine the individual bytes that make up a
93 UTF8-encoded character, then use C<utf8::encode()> on the string (or a
94 copy) first.
95
96 =head2 C<chdir('')> no longer chdirs home
97
98 Using C<chdir('')> or C<chdir(undef)> to chdir home has been deprecated since
99 perl v5.8, and will now fail.  Use C<chdir()> instead.
100
101 =head2 ASCII characters in variable names must now be all visible
102
103 It was legal until now on ASCII platforms for variable names to contain
104 non-graphical ASCII control characters (ordinals 0 through 31, and 127,
105 which are the C0 controls and C<DELETE>).  This usage has been
106 deprecated since v5.20, and as of now causes a syntax error.  The
107 variables these names referred to are special, reserved by Perl for
108 whatever use it may choose, now, or in the future.  Each such variable
109 has an alternative way of spelling it.  Instead of the single
110 non-graphic control character, a two character sequence beginning with a
111 caret is used, like C<$^]> and C<${^GLOBAL_PHASE}>.  Details are at
112 L<perlvar>.   It remains legal, though unwise and deprecated (raising a
113 deprecation warning), to use certain non-graphic non-ASCII characters in
114 variables names when not under S<C<use utf8>>.  No code should do this,
115 as all such variables are reserved by Perl, and Perl doesn't currently
116 define any of them (but could at any time, without notice).
117
118 =head2 The C<autoderef> feature has been removed
119
120 The experimental C<autoderef> feature (which allowed calling C<push>,
121 C<pop>, C<shift>, C<unshift>, C<splice>, C<keys>, C<values>, and C<each> on
122 a scalar argument) has been deemed unsuccessful. It has now been removed;
123 trying to use the feature (or to disable the C<experimental::autoderef>
124 warning it previously triggered) now yields an exception.
125
126 =head2 An off by one issue in C<$Carp::MaxArgNums> has been fixed
127
128 C<$Carp::MaxArgNums> is supposed to be the number of arguments to display.
129 Prior to this version, it was instead showing C<$Carp::MaxArgNums> + 1 arguments,
130 contrary to the documentation.
131
132 =head2 Lexical $_ has been removed
133
134 C<my $_> was introduced in Perl 5.10, and subsequently caused much confusion
135 with no obvious solution.  In Perl 5.18.0, it was made experimental on the
136 theory that it would either be removed or redesigned in a less confusing (but
137 backward-incompatible) way.  Over the following years, no alternatives were
138 proposed.  The feature has now been removed and will fail to compile.
139
140 =head2 Only blanks and tabs are now allowed within C<[...]> within C<(?[...])>.
141
142 The experimental Extended Bracketed Character Classes can contain regular
143 bracketed character classes within them.  These differ from regular ones in
144 that white space is generally ignored, unless escaped by preceding it with a
145 backslash.  The white space that is ignored is now limited to just tab C<\t>
146 and SPACE characters.  Previously, it was any white space.  See
147 L<perlrecharclass/Extended Bracketed Character Classes>.
148
149 =head1 Deprecations
150
151 =head2 sysread(), syswrite(), recv() and send() are deprecated on
152 :utf8 handles
153
154 The sysread(), recv(), syswrite() and send() operators
155 are deprecated on handles that have the C<:utf8> layer, either
156 explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer.
157
158 Both sysread() and recv() currently use only the C<:utf8> flag for the
159 stream, ignoring the actual layers.  Since sysread() and recv() do no
160 UTF-8 validation they can end up creating invalidly encoded scalars.
161
162 Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise
163 ignoring any layers.  If the flag is set, both write the value UTF-8
164 encoded, even if the layer is some different encoding, such as the
165 example above.
166
167 Ideally, all of these operators would completely ignore the C<:utf8>
168 state, working only with bytes, but this would result in silently
169 breaking existing code.  To avoid this a future version of perl will
170 throw an exception when any of sysread(), recv(), syswrite() or send()
171 are called on handle with the C<:utf8> layer.
172
173 =head1 Performance Enhancements
174
175 =over 4
176
177 =item *
178
179 Creating Perl debugger data structures (see L<perldebguts/"Debugger Internals">)
180 for XSUBs and const subs has been removed.  This removed one glob/scalar combo
181 for each unique C<.c> file that XSUBs and const subs came from.  On startup
182 (C<perl -e"0">) about half a dozen glob/scalar debugger combos were created.
183 Loading XS modules created more glob/scalar combos.  These things were created
184 regardless if the perl debugger was being used or not, unlike for pure perl
185 subs, and ignores that the perl debugger can not debug C code.
186
187 =item *
188
189 Single arguments in list assign are now slightly faster:
190
191   ($x) = (...);
192   (...) = ($x);
193
194 =item *
195
196 C</fixed-substr/> has been made much faster.
197
198 On platforms with a libc memchr() implementation which makes good use of
199 underlying hardware support, patterns which include fixed substrings will now
200 often be much faster; for example with glibc on a recent x86_64 CPU, this:
201
202     $s = "a" x 1000 . "wxyz";
203     $s =~ /wxyz/ for 1..30000
204
205 is now about 7 times faster.  On systems with slow memchr(), e.g. 32-bit ARM
206 Raspberry Pi, there will be a small or little speedup.  Conversely, some
207 pathological cases, such as C<"ab" x 1000 =~ /aa/> will be slower now; up to 3
208 times slower on the rPi, 1.5x slower on x86_64.
209
210 =item *
211
212 Faster addition, subtraction and multiplication.
213
214 Since 5.8.0, arithmetic became slower due to the need to support
215 64-bit integers. To deal with 64-bit integers, a lot more corner
216 cases need to be checked, which adds time. We now detect common
217 cases where there is no need to check for those corner cases,
218 and special-case them.
219
220 =item *
221
222 Faster preincrement, predecrement, postincrement, postdecrement.
223
224 By internally splitting the functions which handled multiple
225 cases into different functions.
226
227 =back
228
229 =head1 Modules and Pragmata
230
231 =head2 Updated Modules and Pragmata
232
233 =over 4
234
235 =item *
236
237 The libnet distribution has been upgraded from version 3.05 to 3.06.
238
239 =item *
240
241 The Scalar-List-Utils distribution has been upgraded from version 1.41 to 1.42.
242
243 =item *
244
245 L<autodie> has been upgraded from version 2.26 to 2.27.
246
247 =item *
248
249 L<CPAN::Meta> has been upgraded from version 2.150001 to 2.150005.
250
251 =item *
252
253 L<CPAN::Meta::Requirements> has been upgraded from version 2.132 to 2.133.
254
255 =item *
256
257 L<CPAN::Meta::YAML> has been upgraded from version 0.012 to 0.016.
258
259 =item *
260
261 L<Encode> has been upgraded from version 2.72 to 2.73.
262
263 =item *
264
265 L<encoding> has been upgraded from version 2.14 to 2.15.
266
267 =item *
268
269 L<ExtUtils::CBuilder> has been upgraded from version 0.280221 to 0.280223.
270
271 =item *
272
273 L<feature> has been upgraded from version 1.40 to 1.41.
274
275 =item *
276
277 L<Getopt::Long> has been upgraded from version 2.45 to 2.46.
278
279 =item *
280
281 L<HTTP::Tiny> has been upgraded from version 0.054 to 0.056.
282
283 =item *
284
285 L<List::Util> has been upgraded from version 1.41 to 1.42_01.
286
287 =item *
288
289 L<Locale::Codes> has been upgraded from version 3.34 to 3.35.
290
291 =item *
292
293 L<Math::BigInt> has been upgraded from version 1.9997 to 1.999701.
294
295 Correct the behaviour of bdiv() and bmod() in list context. [perl #124300]
296
297 Correct C<< Math::BigInt->new() >> for non-integer input.  [perl #124325]
298
299 Speed up Math::BigFloat -> blog(). [perl #124382]
300
301 Fix bug in Math::BigFloat's bceil() and bint() methods. [perl #124412]
302
303 =item *
304
305 L<Math::BigRat> has been upgraded from version 0.2608 to 0.260801.
306
307 Correct the behaviour of bdiv() and bmod() in list context. [perl #124303]
308
309 =item *
310
311 L<Module::CoreList> has been upgraded from version 5.20150520 to 5.20150620.
312
313 =item *
314
315 L<Module::Metadata> has been upgraded from version 1.000026 to 1.000027.
316
317 =item *
318
319 L<parent> has been upgraded from version 0.232 to 0.234.
320
321 =item *
322
323 L<Parse::CPAN::Meta> has been upgraded from version 1.4414 to 1.4417.
324
325 =item *
326
327 L<perl5db.pl> has been upgraded from version 1.49 to 1.49_01.
328
329 User actions are no longer evaluated after the script under the
330 debugger finishes.  [perl #71678]
331
332 =item *
333
334 L<Pod::Simple> has been upgraded from version 3.29 to 3.30.
335
336 =item *
337
338 L<Pod::Usage> has been upgraded from version 1.64 to 1.67.
339
340 =item *
341
342 L<POSIX> has been upgraded from version 1.53 to 1.54.
343
344 The NaN payload API has been implemented (getpayload, setpayload,
345 setpayloadsig, issignaling).
346
347 =item *
348
349 L<Scalar::Util> has been upgraded from version 1.41 to 1.42_01.
350
351 =item *
352
353 L<Socket> has been upgraded from version 2.018 to 2.019.
354
355 =item *
356
357 L<threads> has been upgraded from version 2.01 to 2.02.
358
359 =item *
360
361 L<Time::Piece> has been upgraded from version 1.29 to 1.30.
362
363 =item *
364
365 L<UNIVERSAL> has been upgraded from version 1.12 to 1.13.
366
367 Don't import from L<UNIVERSAL> in its documentation, it no longer
368 exports anything.  [perl #125410]
369
370 =back
371
372 =head1 Documentation
373
374 =head2 Changes to Existing Documentation
375
376 =head3 L<perlapi>
377
378 =over 4
379
380 =item *
381
382 The process of using undocumented globals has been documented, namely, that one
383 should send email to L<perl5-porters@perl.org|mailto:perl5-porters@perl.org>
384 first to get the go-ahead for documenting and using an undocumented function or
385 global variable.
386
387 =back
388
389 =head3 L<perlsub>
390
391 =over 4
392
393 =item *
394
395 Updated to note that anonymous subroutines can have signatures.
396
397 =back
398
399 =head3 L<perltie>
400
401 =over 4
402
403 =item *
404
405 The usage of C<FIRSTKEY> and C<NEXTKEY> has been clarified.
406
407 =back
408
409 =head3 L<perlvar>
410
411 =over 4
412
413 =item *
414
415 The specific true value of C<$!{E...}> is now documented, noting that it is
416 subject to change and not guaranteed.
417
418 =back
419
420 =head3 L<perlcall>
421
422 =over 4
423
424 =item *
425
426 A number of cleanups have been made to perlcall, including:
427
428 =over 4
429
430 =item *
431
432 use EXTEND(SP, n) and PUSHs() instead of XPUSHs() where applicable
433 and update prose to match
434
435 =item *
436
437 add POPu, POPul and POPpbytex to the "complete list of POP macros"
438 and clarify the documentation for some of the existing entries, and
439 a note about side-effects
440
441 =item *
442
443 add API documentation for POPu and POPul
444
445 =item *
446
447 use ERRSV more efficiently
448
449 =item *
450
451 approaches to thread-safety storage of SVs.
452
453 =back
454
455 =back
456
457 =head3 L<perlunicode>
458
459 =over 4
460
461 =item *
462
463 Discourage use of 'In' prefix for Unicode Block property.
464
465 =back
466
467 =head3 L<perlpolicy>
468
469 =over 4
470
471 =item *
472
473 This note has been added to perlpolicy:
474
475   While civility is required, kindness is encouraged; if you have any doubt
476   about whether you are being civil, simply ask yourself, "Am I being kind?"
477   and aspire to that.
478
479 =back
480
481 =head3 L<perlvar>
482
483 =over 4
484
485 =item *
486
487 Use of C<$OLD_PERL_VERSION> is now discouraged.
488
489 =back
490
491 =head1 Diagnostics
492
493 The following additions or changes have been made to diagnostic output,
494 including warnings and fatal error messages.  For the complete list of
495 diagnostic messages, see L<perldiag>.
496
497 =head2 New Diagnostics
498
499 =head3 New Errors
500
501 =over 4
502
503 =item *
504
505 L<%s must not be a named sequence in transliteration operator|perldiag/"%s must not be a named sequence in transliteration operator">
506
507 (F) Transliteration (C<tr///> and C<y///>) transliterates individual
508 characters.  But a named sequence by definition is more than an
509 individual charater, and hence doing this operation on it doesn't make
510 sense.
511
512 =item *
513
514 L<Can't find Unicode property definition "%s" in regex;|perldiag/"Can't find Unicode property definition "%s" in regex; marked by <-- HERE in m/%s/">
515
516 =item *
517
518 L<Can't redeclare "%s" in "%s"|perldiag/"Can't redeclare "%s" in "%s"">
519
520 (F) A "my", "our" or "state" declaration was found within another declaration,
521 such as C<my ($x, my($y), $z)> or C<our (my $x)>.
522
523 =item *
524
525 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/">
526
527 =item *
528
529 L<Illegal user-defined property name|perldiag/"Illegal user-defined property name">
530
531 =item *
532
533 L<<< Sequence (?... not terminated in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Sequence (?... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>>
534
535 =back
536
537 =head3 New Warnings
538
539 =over 4
540
541 =item *
542
543 L<%s() is deprecated on :utf8 handles|perldiag/"%s() is deprecated on :utf8 handles">
544
545 (W deprecated) The sysread(), recv(), syswrite() and send() operators
546 are deprecated on handles that have the C<:utf8> layer, either
547 explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer.
548
549 Both sysread() and recv() currently use only the C<:utf8> flag for the
550 stream, ignoring the actual layers.  Since sysread() and recv() do no
551 UTF-8 validation they can end up creating invalidly encoded scalars.
552
553 Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise
554 ignoring any layers.  If the flag is set, both write the value UTF-8
555 encoded, even if the layer is some different encoding, such as the
556 example above.
557
558 Ideally, all of these operators would completely ignore the C<:utf8>
559 state, working only with bytes, but this would result in silently
560 breaking existing code.  To avoid this a future version of perl will
561 throw an exception when any of sysread(), recv(), syswrite() or send()
562 are called on handle with the C<:utf8> layer.
563
564 =back
565
566 =head2 Changes to Existing Diagnostics
567
568 =over 4
569
570 =item *
571
572 The diagnostic C<< Hexadecimal float: internal error >> has been changed to
573 C<< Hexadecimal float: internal error (%s) >> to include more information.
574
575 =item *
576
577 L<Can't modify non-lvalue subroutine call of &%s|perldiag/"Can't modify non-lvalue subroutine call of &%s">
578
579 This error now reports the name of the non-lvalue subroutine you attempted to
580 use as an lvalue.
581
582 =item *
583
584 When running out of memory during an attempt the increase the stack
585 size, previously, perl would die using the cryptic message
586 C<< panic: av_extend_guts() negative count (-9223372036854775681) >>.
587 This has been fixed to show the prettier message:
588 L<< Out of memory during stack extend|perldiag/"Out of memory during %s extend" >>
589
590 =back
591
592 =head1 Configuration and Compilation
593
594 =over 4
595
596 =item *
597
598 C<Configure> now acts as if the C<-O> option is always passed, allowing command
599 line options to override saved configuration.  This should eliminate confusion
600 when command line options are ignored for no obvious reason.  C<-O> is now
601 permitted, but ignored.
602
603 =item *
604
605 Some filesystem stat symbols which were not used by the Perl core
606 were removed in an earlier commit. However, since these symbols
607 turned out to be used by at least one CPAN module, these symbols
608 have been restored.
609
610 =item *
611
612 C<< PPPort.so/PPPort.dll >> no longer get installed, as they are
613 not used by C<< PPPort.pm >>, only by its test files.
614
615 =item *
616
617 It is now possible to specify which compilation date to show on
618 C<< perl -V >> output, by setting the macro C<< PERL_BUILD_DATE >>.
619
620
621 =item *
622
623 Using the C<NO_HASH_SEED> define in combination with the default hash algorithm
624 C<PERL_HASH_FUNC_ONE_AT_A_TIME_HARD> resulted in a fatal error while compiling
625 the interpreter, since Perl 5.17.10.  This has been fixed.
626
627 =item *
628
629 If you had F<Configure> hints for C<d_procselfexe> or C<procselfexe>, they were
630 probably broken by the AmigaOS changes in Perl 5.23.3.  This has been now
631 fixed.
632 L<[perl #126152]|https://rt.perl.org/Ticket/Display.html?id=126152>
633
634 =item *
635
636 F<Configure> should handle spaces in paths a little better.
637
638 =back
639
640 =head1 Testing
641
642 =over 4
643
644 =item *
645
646 A new test (F<t/op/aassign.t>) has been added to test the list assignment operator
647 C<OP_AASSIGN>.
648
649 =item *
650
651 Parallel building has been added to the dmake C<makefile.mk> makefile. All
652 Win32 compilers are supported.
653
654 =back
655
656 =head1 Platform Support
657
658 =head2 Platform-Specific Notes
659
660 =over 4
661
662 =item IRIX
663
664 =over
665
666 =item *
667
668 Under some circumstances IRIX stdio fgetc() and fread() set the errno to
669 C<ENOENT>, which made no sense according to either IRIX or POSIX docs.  Errno
670 is now cleared in such cases.
671 L<[perl #123977]|https://rt.perl.org/Ticket/Display.html?id=123977>
672
673 =item *
674
675 Problems when multiplying long doubles by infinity have been fixed.
676 L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396>
677
678 =back
679
680 =item MacOS X
681
682 =over
683
684 =item *
685
686 Until now OS X builds of perl have specified a link target of 10.3 (Panther,
687 2003) but have not specified a compiler target.  From now on, builds of perl on
688 OS X 10.6 or later (Snow Leopard, 2008) by default capture the current OS X
689 version and specify that as the explicit build target in both compiler and
690 linker flags, thus preserving binary compatibility for extensions built later
691 regardless of changes in OS X, SDK, or compiler and linker versions.  To
692 override the default value used in the build and preserved in the flags,
693 specify C<export MACOSX_DEPLOYMENT_TARGET=10.N> before configuring and building
694 perl, where 10.N is the version of OS X you wish to target.  In OS X 10.5 or
695 earlier there is no change to the behavior present when those systems were
696 current; the link target is still OS X 10.3 and there is no explicit compiler
697 target.
698
699 =back
700
701 =item Tru64
702
703 Workaround where Tru64 balks when prototypes are listed as
704 C<< PERL_STATIC_INLINE >>, but where the test is build with
705 C<< -DPERL_NO_INLINE_FUNCTIONS >>.
706
707 =item VMS
708
709 =over
710
711 =item *
712
713 Perl now implements its own C<killpg> by scanning for processes in the
714 specified process group, which may not mean exactly the same thing as a Unix
715 process group, but allows us to send a signal to a parent (or master) process
716 and all of its sub-processes.  At the perl level, this means we can now send a
717 negative pid like so:
718
719     kill SIGKILL, -$pid;
720
721 to signal all processes in the same group as C<$pid>.
722
723 =back
724
725 =item Win32
726
727 =over
728
729 =item *
730
731 A new build option C<USE_NO_REGISTRY> has been added to the makefiles.  This
732 option is off by default, meaning the default is to do Windows registry
733 lookups.  This option stops Perl from looking inside the registry for anything.
734 For what values are looked up in the registry see L<perlwin32>.  Internally, in
735 C, the name of this option is C<WIN32_NO_REGISTRY>.
736
737 =item *
738
739 The behavior of Perl using C<HKEY_CURRENT_USER\Software\Perl> and
740 C<HKEY_LOCAL_MACHINE\Software\Perl> to lookup certain values, including C<%ENV>
741 vars starting with C<PERL> has changed.  Previously, the 2 keys were checked
742 for entries at all times through Perl processes life time even if they did not
743 exist.  For performance reasons, now, if the root key (i.e.
744 C<HKEY_CURRENT_USER\Software\Perl> or C<HKEY_LOCAL_MACHINE\Software\Perl>) does
745 not exist at process start time, it will not be checked again for C<%ENV>
746 override entries for the remainder of the Perl processes life.  This more
747 closely matches Unix behaviour in that the environment is copied or inherited
748 on startup and changing the variable in the parent process or another process
749 or editing F<.bashrc> will not change the environmental variable in other
750 existing, running, processes.
751
752 =item *
753
754 One glob fetch was removed for each C<-X> or C<stat> call whether done from
755 Perl code or internally from Perl's C code.  The glob being looked up was
756 C<${^WIN32_SLOPPY_STAT}> which is a special variable.  This makes C<-X> and
757 C<stat> slightly faster.
758
759 =item *
760
761 During miniperl's process startup, during the build process, 4 to 8 IO calls
762 related to the process starting F<.pl> and the F<buildcustomize.pl> file were
763 removed from the code opening and executing the first 1 or 2 F<.pl> files.
764
765 =back
766
767 =item EBCDIC
768
769 =over 4
770
771 =item EBCDIC C<cmp()> and C<sort()> fixed for UTF-EBCDIC strings
772
773 Comparing two strings that were both encoded in UTF-8 (or more
774 precisely, UTF-EBCDIC) did not work properly until now.  Since C<sort()>
775 uses C<cmp()>, this fixes that as well.
776
777 =item EBCDIC C<tr///> and C<y///> fixed for C<\N{}>, and C<S<use utf8>> ranges
778
779 Perl v5.22 introduced the concept of portable ranges to regular
780 expression patterns.  A portable range matches the same set of
781 characters no matter what platform is being run on.  This concept is now
782 extended to C<tr///>.  See
783 C<L<trE<sol>E<sol>E<sol>|perlop/trE<sol>SEARCHLISTE<sol>REPLACEMENTLISTE<sol>cdsr>>.
784
785 There were also some problems with these operations under S<C<use
786 utf8>>, which are now fixed
787
788 =back
789
790 =item VMS
791
792 =over
793
794 =item *
795
796 The minimum supported version of VMS is now v7.3-2, released in 2003.  As a
797 side effect of this change, VAX is no longer supported as the terminal
798 release of OpenVMS VAX was v7.3 in 2001.
799
800 =back
801
802 =item Win32
803
804 =over
805
806 =item *
807
808 Visual C++ 2013 builds will now execute on XP and higher. Previously they would
809 only execute on Vista and higher.
810
811 =item *
812
813 You can now build perl with GNU Make and GCC.  [perl #123440]
814
815 =item *
816
817 C<truncate($filename, $size)> now works for files over 4GB in size.
818 [perl #125347]
819
820 =item *
821
822 Parallel building has been added to the dmake C<makefile.mk> makefile. All
823 Win32 compilers are supported.
824
825 =back
826
827 =item AmigaOS
828
829 The AmigaOS port has been reintegrated into the main tree, based off of
830 Perl 5.22.1.
831
832 =back
833
834 =head1 Internal Changes
835
836 =over 4
837
838 =item *
839
840 C<< sv_ref() >> is now part of the API.
841
842 =item *
843
844 L<perlapi/sv_backoff> had its return type changed from C<int> to C<void>.  It
845 previously has always returned C<0> since Perl 5.000 stable but that was
846 undocumented.  Although C<sv_backoff> is marked as public API, XS code is not
847 expected to be impacted since the proper API call would be through public API
848 C<sv_setsv(sv, &PL_sv_undef)>, or quasi-public C<SvOOK_off>, or non-public
849 C<SvOK_off> calls, and the return value of C<sv_backoff> was previously a
850 meaningless constant that can be rewritten as C<(sv_backoff(sv),0)>.
851
852 =item *
853
854 The C<EXTEND> and C<MEXTEND> macros have been improved to avoid various issues
855 with integer truncation and wrapping.  In particular, some casts formerly used
856 within the macros have been removed.  This means for example that passing an
857 unsigned nitems argument is likely to raise a compiler warning now (it's always
858 been documented to require a signed value; formerly int, lately SSize_t).
859
860 =item *
861
862 C<PL_sawalias> and C<GPf_ALIASED_SV> have been removed.
863
864 =item *
865
866 C<GvASSIGN_GENERATION> and C<GvASSIGN_GENERATION_set> have been removed.
867
868 =back
869
870 =head1 Selected Bug Fixes
871
872 =over 4
873
874 =item *
875
876 C<\b{sb}> works much better.  In Perl v5.22.0, this new construct didn't
877 seem to give the expected results, yet passed all the tests in the
878 extensive suite furnished by Unicode.  It turns out that it was because
879 these were short input strings, and the failures had to do with longer
880 inputs.  This was fixed in Perl 5.23.4, but the improvement was not
881 noticed until after that was released, so is included here now.
882
883 =item *
884
885 Certain syntax errors in
886 L<perlrecharclass/Extended Bracketed Character Classes> caused panics
887 instead of the proper error message.  This has now been fixed. [perl
888 #126481]
889
890 =item *
891
892 An earlier commit added a message when a quantifier in a regular
893 expression was useless, but then caused the parser to skip it;
894 this caused the surplus quantifier to be silently ignored, instead
895 of throwing an error. This is now fixed. [perl #126253]
896
897 =item *
898
899 The switch to building non-XS modules last in win32/makefile.mk (introduced
900 by design as part of the changes to enable parallel building) caused the
901 build of POSIX to break due to problems with the version module. This
902 is now fixed.
903
904 =item *
905
906 Improved parsing of hex float constants.
907
908 =item *
909
910 Fixed an issue with C<< pack >> where C<< pack "H" >> (and C<< pack "h" >>)
911 could read past the source when given a non-utf8 source, and a utf8 target.
912 [perl #126325]
913
914 =item *
915
916 Fixed several cases where perl would abort due to a segmentation fault,
917 or a C-level assert. [perl #126615], [perl #126602], [perl #126193].
918
919 =item *
920
921 There were places in regular expression patterns where comments (C<(?#...)>)
922 weren't allowed, but should have been.  This is now fixed.
923 L<[perl #116639]|https://rt.perl.org/Ticket/Display.html?id=116639>
924
925 =item *
926
927 Some regressions from Perl 5.20 have been fixed, in which some syntax errors in
928 L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> constructs
929 within regular expression patterns could cause a segfault instead of a proper
930 error message.
931 L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180>
932 L<[perl #126404]|https://rt.perl.org/Ticket/Display.html?id=126404>
933
934 =item *
935
936 Another problem with
937 L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes>
938 constructs has been fixed wherein things like C<\c]> could cause panics.
939 L<[perl #126181]|https://rt.perl.org/Ticket/Display.html?id=126181>
940
941 =item *
942
943 Some problems with attempting to extend the perl stack to around 2G or 4G
944 entries have been fixed.  This was particularly an issue on 32-bit perls built
945 to use 64-bit integers, and was easily noticeable with the list repetition
946 operator, e.g.
947
948     @a = (1) x $big_number
949
950 Formerly perl may have crashed, depending on the exact value of C<$big_number>;
951 now it will typically raise an exception.
952 L<[perl #125937]|https://rt.perl.org/Ticket/Display.html?id=125937>
953
954 =item *
955
956 In a regex conditional expression C<(?(condition)yes-pattern|no-pattern)>, if
957 the condition is C<(?!)> then perl failed the match outright instead of
958 matching the no-pattern.  This has been fixed.
959 L<[perl #126222]|https://rt.perl.org/Ticket/Display.html?id=126222>
960
961 =item *
962
963 The special backtracking control verbs C<(*VERB:ARG)> now all allow an optional
964 argument and set C<REGERROR>/C<REGMARK> appropriately as well.
965 L<[perl #126186]|https://rt.perl.org/Ticket/Display.html?id=126186>
966
967 =item *
968
969 Several bugs, including a segmentation fault, have been fixed with the bounds
970 checking constructs (introduced in Perl 5.22) C<\b{gcb}>, C<\b{sb}>, C<\b{wb}>,
971 C<\B{gcb}>, C<\B{sb}>, and C<\B{wb}>.  All the C<\B{}> ones now match an empty
972 string; none of the C<\b{}> ones do.
973 L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319>
974
975 =item *
976
977 Duplicating a closed file handle for write no longer creates a
978 filename of the form F<GLOB(0xXXXXXXXX)>.  [perl #125115]
979
980 =item *
981
982 Warning fatality is now ignored when rewinding the stack.  This
983 prevents infinite recursion when the now fatal error also causes
984 rewinding of the stack.  [perl #123398]
985
986 =item * 
987
988 In perl v5.22.0, the logic changed when parsing a numeric parameter to the -C
989 option, such that the successfully parsed number was not saved as the option
990 value if it parsed to the end of the argument.  [perl #125381]
991
992 =item *
993
994 The PadlistNAMES macro is an lvalue again.
995
996 =item *
997
998 Zero -DPERL_TRACE_OPS memory for sub-threads.
999
1000 perl_clone_using() was missing Zero init of PL_op_exec_cnt[].  This
1001 caused sub-threads in threaded -DPERL_TRACE_OPS builds to spew exceedingly
1002 large op-counts at destruct.  These counts would print %x as "ABABABAB",
1003 clearly a mem-poison value.
1004
1005 =item *
1006
1007 A leak in the XS typemap caused one scalar to be leaked each time a C<FILE *>
1008 or a C<PerlIO *> was C<OUTPUT:>ed or imported to Perl, since perl 5.000. These
1009 particular typemap entries are thought to be extremely rarely used by XS
1010 modules. [perl #124181]
1011
1012 =item *
1013
1014 C<alarm()> and C<sleep()> will now warn if the argument is a negative number
1015 and return undef. Previously they would pass the negative value to the
1016 underlying C function which may have set up a timer with a surprising value.
1017
1018 =item *
1019
1020 Perl can again be compiled with any Unicode version.  This used to
1021 (mostly) work, but was lost in v5.18 through v5.20.  The property
1022 C<Name_Alias> did not exist prior to Unicode 5.0.  L<Unicode::UCD>
1023 incorrectly said it did.  This has been fixed.
1024
1025 =item *
1026
1027 Very large code-points (beyond Unicode) in regular expressions no
1028 longer cause a buffer overflow in some cases when converted to UTF-8.
1029 L<[perl #125826]|https://rt.perl.org/Ticket/Display.html?id=125826>
1030
1031 =item *
1032
1033 The integer overflow check for the range operator (...) in list
1034 context now correctly handles the case where the size of the range is
1035 larger than the address space.  This could happen on 32-bits with
1036 -Duse64bitint.
1037 L<[perl #125781]|https://rt.perl.org/Ticket/Display.html?id=125781>
1038
1039 =item *
1040
1041 A crash with C<< %::=(); J->${\"::"} >> has been fixed.
1042 L<[perl #125541]|https://rt.perl.org/Ticket/Display.html?id=125541>
1043
1044 =item *
1045
1046 C<qr/(?[ () ])/> no longer segfaults, giving a syntax error message instead.
1047 [perl #125805]
1048
1049 =item *
1050
1051 Regular expression possessive quantifier v5.20 regression now fixed.
1052 C<qr/>I<PAT>C<{>I<min>,I<max>C<}+>C</> is supposed to behave identically
1053 to C<qr/(?E<gt>>I<PAT>C<{>I<min>,I<max>C<})/>.  Since v5.20, this didn't
1054 work if I<min> and I<max> were equal.  [perl #125825]
1055
1056 =item *
1057
1058 C<< BEGIN <> >> no longer segfaults and properly produces an error
1059 message.  [perl #125341]
1060
1061 =item *
1062
1063 In C<tr///> an illegal backwards range like C<tr/\x{101}-\x{100}//> was
1064 not always detected, giving incorrect results.  This is now fixed.
1065
1066 =back
1067
1068 =head1 Acknowledgements
1069
1070 [ XXX: generate this just in time, Ricardo! ]
1071
1072 =head1 Reporting Bugs
1073
1074 If you find what you think is a bug, you might check the articles recently
1075 posted to the comp.lang.perl.misc newsgroup and the perl bug database at
1076 https://rt.perl.org/ .  There may also be information at
1077 http://www.perl.org/ , the Perl Home Page.
1078
1079 If you believe you have an unreported bug, please run the L<perlbug> program
1080 included with your release.  Be sure to trim your bug down to a tiny but
1081 sufficient test case.  Your bug report, along with the output of C<perl -V>,
1082 will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
1083
1084 If the bug you are reporting has security implications, which make it
1085 inappropriate to send to a publicly archived mailing list, then please send it
1086 to perl5-security-report@perl.org.  This points to a closed subscription
1087 unarchived mailing list, which includes all the core committers, who will be
1088 able to help assess the impact of issues, figure out a resolution, and help
1089 co-ordinate the release of patches to mitigate or fix the problem across all
1090 platforms on which Perl is supported.  Please only use this address for
1091 security issues in the Perl core, not for modules independently distributed on
1092 CPAN.
1093
1094 =head1 SEE ALSO
1095
1096 The F<Changes> file for an explanation of how to view exhaustive details on
1097 what changed.
1098
1099 The F<INSTALL> file for how to build Perl.
1100
1101 The F<README> file for general stuff.
1102
1103 The F<Artistic> and F<Copying> files for copyright information.
1104
1105 =cut