perldelta: import changes from perl5212delta.pod
[perl.git] / Porting / perl5220delta.pod
1 =encoding utf8
2
3 =head1 NAME
4
5 perldelta - what is new for perl v5.22.0
6
7 =head1 DESCRIPTION
8
9 This document describes differences between the 5.22.0 release and the 5.20.0
10 release.
11
12 If you are upgrading from an earlier release such as 5.18.0, first read
13 L<perl5200delta>, which describes differences between 5.18.0 and 5.20.0.
14
15 =head1 Notice
16
17 XXX Any important notices here
18
19 =head1 Core Enhancements
20
21 =head2 Unicode 7.0 is now supported
22
23 For details on what is in this release, see
24 L<http://www.unicode.org/versions/Unicode7.0.0/>.
25
26 =head2 Better heuristics on older platforms for determining locale UTF8ness
27
28 On platforms that implement neither the C99 standard nor the POSIX 2001
29 standard, determining if the current locale is UTF8 or not depends on
30 heuristics.  These are improved in this release.
31
32 =head2 Experimental C Backtrace API
33
34 Starting from Perl 5.21.1, on some platforms Perl supports retrieving
35 the C level backtrace (similar to what symbolic debuggers like gdb do).
36
37 The backtrace returns the stack trace of the C call frames,
38 with the symbol names (function names), the object names (like "perl"),
39 and if it can, also the source code locations (file:line).
40
41 The supported platforms are Linux and OS X (some *BSD might work at
42 least partly, but they have not yet been tested).
43
44 The feature needs to be enabled with C<Configure -Dusecbacktrace>.
45
46 Also included is a C API to retrieve backtraces.
47
48 See L<perlhacktips/"C backtrace"> for more information.
49
50 =head2 C<qr/foo/x> now ignores any Unicode pattern white space
51
52 The C</x> regular expression modifier allows the pattern to contain
53 white space and comments, both of which are ignored, for improved
54 readability.  Until now, not all the white space characters that Unicode
55 designates for this purpose were handled.  The additional ones now
56 recognized are
57 U+0085 NEXT LINE,
58 U+200E LEFT-TO-RIGHT MARK,
59 U+200F RIGHT-TO-LEFT MARK,
60 U+2028 LINE SEPARATOR,
61 and
62 U+2029 PARAGRAPH SEPARATOR.
63
64 =head2 S<C<use locale>> can restrict which locale categories are affected
65
66 It is now possible to pass a parameter to S<C<use locale>> to specify
67 a subset of locale categories to be locale-aware, with the remaining
68 ones unaffected.  See L<perllocale/The "use locale" pragma> for details.
69
70 =head1 Security
71
72 =head2 Perl is now always compiled with -D_FORTIFY_SOURCE=2 if available
73
74 The 'code hardening' option called C<_FORTIFY_SOURCE>, available in
75 gcc 4.*, is now always used for compiling Perl, if available.
76
77 Note that this isn't necessarily a huge step since in many platforms
78 the step had already been taken several years ago: many Linux
79 distributions (like Fedora) have been using this option for Perl,
80 and OS X has enforced the same for many years.
81 [ List each security issue as a =head2 entry ]
82
83 =head1 Incompatible Changes
84
85 =head2 C<\N{}> with a sequence of multiple spaces is now a fatal error.
86
87 This has been deprecated since v5.18.
88
89 =head2 In double-quotish C<\cI<X>>, I<X> must now be a printable ASCII character
90
91 In prior releases, failure to do this raised a deprecation warning.
92
93 =head2 Splitting the tokens C<(?> and C<(*> in regular expressions is
94 now a fatal compilation error.
95
96 These had been deprecated since v5.18.
97
98 =head2 5 additional characters are treated as white space under C</x> in
99 regex patterns (unless escaped)
100
101 The use of these characters with C</x> outside bracketed character
102 classes and when not preceded by a backslash has raised a deprecation
103 warning since v5.18.  Now they will be ignored.  See L</"qr/foo/x">
104 for the list of the five characters.
105
106 =head2 Comment lines within S<C<(?[ ])>> now are ended only by a C<\n>
107
108 S<C<(?[ ])>>  is an experimental feature, introduced in v5.18.  It operates
109 as if C</x> is always enabled.  But there was a difference, comment
110 lines (following a C<#> character) were terminated by anything matching
111 C<\R> which includes all vertical whitespace, such as form feeds.  For
112 consistency, this is now changed to match what terminates comment lines
113 outside S<C<(?[ ])>>, namely a C<\n> (even if escaped), which is the
114 same as what terminates a heredoc string and formats.
115
116 =head2 Omitting % and @ on hash and array names is no longer permitted
117
118 Really old Perl let you omit the @ on array names and the % on hash
119 names in some spots.  This has issued a deprecation warning since Perl
120 5.0, and is no longer permitted.
121
122 =head2 C<"$!"> text is now in English outside C<"use locale"> scope
123
124 Previously, the text, unlike almost everything else, always came out
125 based on the current underlying locale of the program.  (Also affected
126 on some systems is C<"$^E>".)  For programs that are unprepared to
127 handle locale, this can cause garbage text to be displayed.  It's better
128 to display text that is translatable via some tool than garbage text
129 which is much harder to figure out.
130
131 =head2 C<"$!"> text will be returned in UTF-8 when appropriate
132
133 The stringification of C<$!> and C<$^E> will have the UTF-8 flag set
134 when the text is actually non-ASCII UTF-8.  This will enable programs
135 that are set up to be locale-aware to properly output messages in the
136 user's native language.  Code that needs to continue the 5.20 and
137 earlier behavior can do the stringification within the scopes of both
138 'use bytes' and 'use locale ":messages".  No other Perl operations will
139 be affected by locale; only C<$!> and C<$^E> stringification.  The
140 'bytes' pragma causes the UTF-8 flag to not be set, just as in previous
141 Perl releases.  This resolves [perl #112208].
142
143 =head2 Support for C<?PATTERN?> without explicit operator has been removed
144
145 Starting regular expressions matching only once directly with the
146 question mark delimiter is now a syntax error, so that the question mark
147 can be available for use in new operators.  Write C<m?PATTERN?> instead,
148 explicitly using the C<m> operator: the question mark delimiter still
149 invokes match-once behaviour.
150
151 =head2 C<defined(@array)> and C<defined(%hash)> are now fatal errors
152
153 These have been deprecated since v5.6.1 and have raised deprecation
154 warnings since v5.16.
155
156 =head2 Using a hash or an array as a reference are now fatal errors.
157
158 For example, C<%foo-E<gt>{"bar"}> now causes a fatal compilation
159 error.  These have been deprecated since before v5.8, and have raised
160 deprecation warnings since then.
161
162 =head1 Deprecations
163
164 =head2 C<< /\C/ >> character class
165
166 This character class, which matches a single byte, even if it appears
167 in a multi-byte character has been deprecated. Matching single bytes
168 in a multi-byte character breaks encapsulation, and can corrupt utf8
169 strings.
170
171 =head2 Using a NO-BREAK space in a character alias for C<\N{...}> is now
172 deprecated
173
174 This non-graphic character is essentially indistinguishable from a
175 regular space, and so should not be allowed.  See
176 L<charnames/CUSTOM ALIASES>.
177
178 =head2 A literal C<"{"> should now be escaped in a pattern
179
180 If you want a literal left curly bracket (also called a left brace) in a
181 regular expression pattern, you should now escape it by either
182 preceding it with a backslash (C<"\{">) or enclosing it within square
183 brackets C<"[{]">, or by using C<\Q>; otherwise a deprecation warning
184 will be raised.  This was first announced as forthcoming in the v5.16
185 release; it will allow future extensions to the language to happen.
186
187 XXX Any deprecated features, syntax, modules etc. should be listed here.
188
189 =head2 Module removals
190
191 XXX Remove this section if inapplicable.
192
193 The following modules will be removed from the core distribution in a
194 future release, and will at that time need to be installed from CPAN.
195 Distributions on CPAN which require these modules will need to list them as
196 prerequisites.
197
198 The core versions of these modules will now issue C<"deprecated">-category
199 warnings to alert you to this fact.  To silence these deprecation warnings,
200 install the modules in question from CPAN.
201
202 Note that these are (with rare exceptions) fine modules that you are encouraged
203 to continue to use.  Their disinclusion from core primarily hinges on their
204 necessity to bootstrapping a fully functional, CPAN-capable Perl installation,
205 not usually on concerns over their design.
206
207 =over
208
209 =item XXX
210
211 XXX Note that deprecated modules should be listed here even if they are listed
212 as an updated module in the L</Modules and Pragmata> section.
213
214 =back
215
216 =head1 Performance Enhancements
217
218 =over 4
219
220 =item *
221
222 Many internal functions have been refactored to improve performance and reduce
223 their memory footprints.
224
225 L<[perl #121436]|https://rt.perl.org/Ticket/Display.html?id=121436>
226 L<[perl #121906]|https://rt.perl.org/Ticket/Display.html?id=121906>
227 L<[perl #121969]|https://rt.perl.org/Ticket/Display.html?id=121969>
228
229 =item *
230
231 C<-T> and C<-B> filetests will return sooner when an empty file is detected.
232
233 L<perl #121489|https://rt.perl.org/Ticket/Display.html?id=121489>
234
235 =item *
236
237 Refactoring of C<< pp_tied >> and CC<< pp_ref >> for small improvements.
238
239 =item *
240
241 Pathtools don't try to load XS on miniperl.
242
243 =item *
244
245 A typo fix reduces the size of the C<< OP >> structure.
246
247 =item *
248
249 Hash lookups where the key is a constant is faster.
250
251 =back
252
253 =head1 Modules and Pragmata
254
255 XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/>
256 go here.  If Module::CoreList is updated, generate an initial draft of the
257 following sections using F<Porting/corelist-perldelta.pl>.  A paragraph summary
258 for important changes should then be added by hand.  In an ideal world,
259 dual-life modules would have a F<Changes> file that could be cribbed.
260
261 [ Within each section, list entries as a =item entry ]
262
263 =head2 New Modules and Pragmata
264
265 =over 4
266
267 =item *
268
269 XXX
270
271 =back
272
273 =head2 Updated Modules and Pragmata
274
275 =over 4
276
277 =item *
278
279 L<XXX> has been upgraded from version A.xx to B.yy.
280
281 =back
282
283 =head2 Removed Modules and Pragmata
284
285 =over 4
286
287 =item *
288
289 XXX
290
291 =back
292
293 =head1 Documentation
294
295 XXX Changes to files in F<pod/> go here.  Consider grouping entries by
296 file and be sure to link to the appropriate page, e.g. L<perlfunc>.
297
298 =head2 New Documentation
299
300 XXX Changes which create B<new> files in F<pod/> go here.
301
302 =head3 L<XXX>
303
304 XXX Description of the purpose of the new file here
305
306 =head2 Changes to Existing Documentation
307
308 =head3 L<perlfunc>
309
310 =over 4
311
312 =item *
313
314 Improve documentation of C<< our >>.
315
316 =item *
317
318 C<-l> now notes that it will return false if symlinks aren't supported by the
319 file system.
320
321 L<[perl #121523]|https://rt.perl.org/Ticket/Display.html?id=121523>
322
323 =item *
324
325 Note that C<exec LIST> and C<system LIST> may fall back to the shell on
326 Win32. Only C<exec PROGRAM LIST> and C<system PROGRAM LIST> indirect object
327 syntax will reliably avoid using the shell.
328
329 This has also been noted in L<perlport>.
330
331 L<[perl #122046]|https://rt.perl.org/Ticket/Display.html?id=122046>
332
333 =back
334
335 =head3 L<perlapi>
336
337 =over 4
338
339 =item *
340
341 Note that C<SvSetSV> doesn't do set magic.
342
343 =item *
344
345 C<sv_usepvn_flags> - Fix documentation to mention the use of C<NewX> instead of
346 C<malloc>.
347
348 L<[perl #121869]|https://rt.perl.org/Ticket/Display.html?id=121869>
349
350 =item *
351
352 Clarify where C<NUL> may be embedded or is required to terminate a string.
353
354 =item *
355
356 Previously missing documentation due to formatting errors are now included.
357
358 =item *
359
360 Entries are now organized into groups rather than by file where they are found.
361
362 =item *
363
364 Alphabetical sorting of entries is now handled by the POD generator to make
365 entries easier to find when scanning.
366
367 =back
368
369 =head3 L<perlhacktips>
370
371 =over 4
372
373 =item *
374
375 Updated documentation for the C<test.valgrind> C<make> target.
376
377 L<[perl #121431]|https://rt.perl.org/Ticket/Display.html?id=121431>
378
379 =back
380
381 =head3 L<perlre>
382
383 =over 4
384
385 =item *
386
387 The C</x> modifier has been clarified to note that comments cannot be continued
388 onto the next line by escaping them.
389
390 =back
391
392 =head3 L<< perlpolicy >>
393
394 =over 4
395
396 =item *
397
398 We now have a code of conduct for the I<< p5p >> mailing list, as documented
399 in L<< perlpolicy/STANDARDS OF CONDUCT >>.
400
401 =back
402
403 =head3 L<< perlsyn >>
404
405 =over 4
406
407 =item *
408
409 The empty conditional in C<< for >> and C<< while >> is now documented
410 in L<< perlsyn >>.
411
412 =back
413
414 =head3 L<Unicode::UCD>
415
416 =over 4
417
418 =item *
419
420 The documentation includes many clarifications and fixes.
421
422 =back
423
424 =head1 Diagnostics
425
426 The following additions or changes have been made to diagnostic output,
427 including warnings and fatal error messages.  For the complete list of
428 diagnostic messages, see L<perldiag>.
429
430 XXX New or changed warnings emitted by the core's C<C> code go here.  Also
431 include any changes in L<perldiag> that reconcile it to the C<C> code.
432
433 =head2 New Diagnostics
434
435 XXX Newly added diagnostic messages go under here, separated into New Errors
436 and New Warnings
437
438 =head3 New Errors
439
440 =over 4
441
442 =item *
443
444 L<In '(?...)', the '(' and '?' must be adjacent in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"In '(?...)', the '(' and '?' must be adjacent in regex; marked by <-- HERE in m/%s/">
445
446 (F) The two-character sequence C<"(?"> in
447 this context in a regular expression pattern should be an
448 indivisible token, with nothing intervening between the C<"(">
449 and the C<"?">, but you separated them.
450
451 =item *
452
453 L<In '(*VERB...)', the '(' and '*' must be adjacent in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"In '(*VERB...)', the '(' and '*' must be adjacent in regex; marked by <-- HERE in m/%s/">
454
455 (F) The two-character sequence C<"(*"> in
456 this context in a regular expression pattern should be an
457 indivisible token, with nothing intervening between the C<"(">
458 and the C<"*">, but you separated them.
459
460 =item *
461
462 L<charnames alias definitions may not contain a sequence of multiple spaces|perldiag/"charnames alias definitions may not contain a sequence of multiple spaces">
463
464 (F) You defined a character name which had multiple space
465 characters in a row.  Change them to single spaces.  Usually these
466 names are defined in the C<:alias> import argument to C<use charnames>, but
467 they could be defined by a translator installed into C<$^H{charnames}>.
468 See L<charnames/CUSTOM ALIASES>.
469
470 =item *
471
472 L<charnames alias definitions may not contain trailing white-space|perldiag/"charnames alias definitions may not contain trailing white-space">
473
474 (F) You defined a character name which ended in a space
475 character.  Remove the trailing space(s).  Usually these names are
476 defined in the C<:alias> import argument to C<use charnames>, but they
477 could be defined by a translator installed into C<$^H{charnames}>.
478 See L<charnames/CUSTOM ALIASES>.
479
480 =item *
481
482 L<Can't use a hash as a reference|perldiag/"Can't use a hash as a reference">
483
484 (F) You tried to use a hash as a reference, as in
485 C<< %foo->{"bar"} >> or C<< %$ref->{"hello"} >>.  Versions of perl E<lt>= 5.6.1
486 used to allow this syntax, but shouldn't have.
487
488 =item *
489
490 L<Can't use an array as a reference|perldiag/"Can't use an array as a reference">
491
492 (F) You tried to use an array as a reference, as in
493 C<< @foo->[23] >> or C<< @$ref->[99] >>.  Versions of perl E<lt>= 5.6.1 used to
494 allow this syntax, but shouldn't have.
495
496 =item *
497
498 L<Can't use 'defined(@array)' (Maybe you should just omit the defined()?)|perldiag/"Can't use 'defined(@array)' (Maybe you should just omit the defined()?)">
499
500 (F) defined() is not useful on arrays because it
501 checks for an undefined I<scalar> value.  If you want to see if the
502 array is empty, just use C<if (@array) { # not empty }> for example.
503
504 =item *
505
506 L<Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)|perldiag/"Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)">
507
508 (F) C<defined()> is not usually right on hashes.
509
510 Although C<defined %hash> is false on a plain not-yet-used hash, it
511 becomes true in several non-obvious circumstances, including iterators,
512 weak references, stash names, even remaining true after C<undef %hash>.
513 These things make C<defined %hash> fairly useless in practice, so it now
514 generates a fatal error.
515
516 If a check for non-empty is what you wanted then just put it in boolean
517 context (see L<perldata/Scalar values>):
518
519     if (%hash) {
520        # not empty
521     }
522
523 If you had C<defined %Foo::Bar::QUUX> to check whether such a package
524 variable exists then that's never really been reliable, and isn't
525 a good way to enquire about the features of a package, or whether
526 it's loaded, etc.
527
528 =item *
529
530 L<Illegal suidscript|perldiag/"Illegal suidscript">
531
532 (F) The script run under suidperl was somehow illegal.
533
534 =back
535
536 =head3 New Warnings
537
538 =over 4
539
540 =item *
541
542 L<Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in mE<sol>%sE<sol>|perldiag/"Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%s/">
543
544 (D deprecated, regexp) You used a literal C<"{"> character in a regular
545 expression pattern. You should change to use C<"\{"> instead, because a future
546 version of Perl (tentatively v5.26) will consider this to be a syntax error.  If
547 the pattern delimiters are also braces, any matching right brace
548 (C<"}">) should also be escaped to avoid confusing the parser, for
549 example,
550
551     qr{abc\{def\}ghi}
552
553 =item *
554
555 L<NO-BREAK SPACE in a charnames alias definition is deprecated|perldiag/"NO-BREAK SPACE in a charnames alias definition is deprecated">
556
557 (D deprecated) You defined a character name which contained a no-break
558 space character.  Change it to a regular space.  Usually these names are
559 defined in the C<:alias> import argument to C<use charnames>, but they
560 could be defined by a translator installed into C<$^H{charnames}>.  See
561 L<charnames/CUSTOM ALIASES>.
562
563 =item *
564
565 L<PerlIO layer ':win32' is experimental|perldiag/"PerlIO layer ':win32' is experimental">
566
567 (S experimental::win32_perlio) The C<:win32> PerlIO layer is
568 experimental.  If you want to take the risk of using this layer,
569 simply disable this warning:
570
571     no warnings "experimental::win32_perlio";
572
573 =item *
574
575 L<Negative repeat count does nothing|perldiag/"Negative repeat count does nothing">
576
577 (W numeric) You tried to execute the
578 L<C<x>|perlop/Multiplicative Operators> repetition operator fewer than 0
579 times, which doesn't make sense.
580
581 =item *
582
583 L<localtime(%f) failed|perldiag/"localtime(%f) failed">
584
585 (W overflow) You called C<localtime> with a number that it could not handle:
586 too large, too small, or NaN.  The returned value is C<undef>.
587
588 =item *
589
590 L<gmtime(%f) failed|perldiag/"gmtime(%f) failed">
591
592 (W overflow) You called C<gmtime> with a number that it could not handle:
593 too large, too small, or NaN.  The returned value is C<undef>.
594
595 =item *
596
597 L<PerlIO layer ':win32' is experimental|perldiag/"PerlIO layer ':win32' is experimental">:
598
599 (S experimental::win32_perlio) The C<:win32> PerlIO layer is
600 experimental.  If you want to take the risk of using this layer,
601 simply disable this warning:
602
603     no warnings "experimental::win32_perlio";
604
605 =item *
606
607 L<Negative repeat count does nothing|perldiag/"Negative repeat count does nothing">
608
609 (W numeric)  This warns when the repeat count of the
610 L<C<x>|perlop/Multiplicative Operators> repetition operator is
611 negative.
612
613 This warning may be changed or removed if it turn out that it was
614 unwise to have added it.
615
616 =item *
617
618 L<Argument "%s" treated as 0 in increment (++)|perldiag/"Argument "%s" treated
619 as 0 in increment (++)">
620
621 (W numeric) The indicated string was fed as an argument to the C<++> operator
622 which expects either a number or a string matching C</^[a-zA-Z]*[0-9]*\z/>.
623 See L<perlop/Auto-increment and Auto-decrement> for details.
624
625 =item *
626
627 L<Redundant argument in %s|perldiag/Redundant argument in %s>
628
629 (W redundant) You called a function with more arguments than other
630 arguments you supplied indicated would be needed. Currently only
631 emitted when a printf-type format required fewer arguments than were
632 supplied, but might be used in the future for e.g. L<perlfunc/pack>.
633
634 The warnings category C<< redundant >> is new. See also [RT #121025]
635
636 =back
637
638 =head2 Changes to Existing Diagnostics
639
640 =over 4
641
642 =item *
643
644 L<Variable length lookbehind not implemented in regex mE<sol>%sE<sol>|perldiag/"Variable length lookbehind not implemented in regex m/%s/">
645
646 Information about Unicode behaviour has been added.
647
648 =item *
649
650 <> should be quotes
651
652 This warning has been changed to
653 L<< <> at require-statement should be quotes|perldiag/"<> at require-statement should be quotes" >>
654 to make the issue more identifiable.
655
656 =item *
657
658 L<Unsuccessful %s on filename containing newline|perldiag/"Unsuccessful %s on filename containing newline">
659
660 This warning is now only produced when the newline is at the end of
661 the filename.
662
663 =item *
664
665 L<Variable length lookbehind not implemented in regex mE<sol>%sE<sol>|perldiag/"Variable length lookbehind not implemented in regex m/%s/">
666
667 Information about Unicode behaviour has been added.
668
669 =item *
670
671 <> should be quotes
672
673 This warning has been changed to
674 L<< <> at require-statement should be quotes|perldiag/"<> at require-statement should be quotes" >>
675 to make the issue more identifiable.
676
677 =item *
678
679 L<Unsuccessful %s on filename containing newline|perldiag/"Unsuccessful %s on filename containing newline">
680
681 This warning is now only produced when the newline is at the end of
682 the filename.
683
684 =back
685
686 =head1 Utility Changes
687
688 =head2 F<x2p/>
689
690 =over 4
691
692 =item *
693
694 The F<x2p/> directory has been removed from the Perl core.
695
696 This removes find2perl, s2p and a2p. They have all been released to CPAN as
697 separate distributions (App::find2perl, App::s2p, App::a2p).
698
699 =back
700
701 =head1 Configuration and Compilation
702
703 =over 4
704
705 =item *
706
707 C<make test.valgrind> now supports parallel testing.
708
709 For example:
710
711     TEST_JOBS=9 make test.valgrind
712
713 See L<perlhacktips/valgrind> for more information.
714
715 L<[perl #121431]|https://rt.perl.org/Ticket/Display.html?id=121431>
716
717 =item *
718
719 The MAD (Misc Attribute Decoration) build option has been removed
720
721 This was an unmaintained attempt at preserving
722 the Perl parse tree more faithfully so that automatic conversion of
723 Perl 5 to Perl 6 would have been easier.
724
725 This build-time configuration option had been unmaintained for years,
726 and had probably seriously diverged on both Perl 5 and Perl 6 sides.
727
728 =item *
729
730 A new compilation flag, C<< -DPERL_OP_PARENT >> is available. For details,
731 see the discussion below at L<< /Internal Changes >>.
732
733 =back
734
735 =head1 Testing
736
737 =over 4
738
739 =item *
740
741 C<< test.pl >> now allows C<< plan skip_all => $reason >>, to make it
742 more compatible with C<< Test::More >>.
743
744 =back
745
746 =head1 Platform Support
747
748 XXX Any changes to platform support should be listed in the sections below.
749
750 [ Within the sections, list each platform as a =item entry with specific
751 changes as paragraphs below it. ]
752
753 =head2 New Platforms
754
755 XXX List any platforms that this version of perl compiles on, that previous
756 versions did not.  These will either be enabled by new files in the F<hints/>
757 directories, or new subdirectories and F<README> files at the top level of the
758 source tree.
759
760 =over 4
761
762 =item XXX-some-platform
763
764 XXX
765
766 =back
767
768 =head2 Discontinued Platforms
769
770 =over 4
771
772 =item NeXTSTEP/OPENSTEP
773
774 NeXTSTEP was proprietary OS bundled with NeXT's workstations in the early
775 to mid 90's; OPENSTEP was an API specification that provided a NeXTSTEP-like
776 environment on a non-NeXTSTEP system.  Both are now long dead, so support
777 for building Perl on them has been removed.
778
779 =back
780
781 =head2 Platform-Specific Notes
782
783 XXX List any changes for specific platforms.  This could include configuration
784 and compilation changes or changes in portability/compatibility.  However,
785 changes within modules for platforms should generally be listed in the
786 L</Modules and Pragmata> section.
787
788 =over 4
789
790 =item OpenBSD
791
792 On OpenBSD, Perl will now default to using the system C<malloc> due to the
793 security features it provides. Perl's own malloc wrapper has been in use
794 since v5.14 due to performance reasons, but the OpenBSD project believes
795 the tradeoff is worth it and would prefer that users who need the speed
796 specifically ask for it.
797
798 L<[perl #122000]|https://rt.perl.org/Ticket/Display.html?id=122000>.
799
800 =item Solaris
801
802 Builds on Solaris 10 with C<-Dusedtrace> would fail early since make
803 didn't follow implied dependencies to build C<perldtrace.h>.  Added an
804 explicit dependency to C<depend>.
805 L<[perl #120120]|https://rt.perl.org/Ticket/Display.html?id=120120>
806
807 =back
808
809 =head1 Internal Changes
810
811 =over 4
812
813 =item *
814
815 The deprecated variable C<PL_sv_objcount> has been removed.
816
817 =item *
818
819 Perl now tries to keep the locale category C<LC_NUMERIC> set to "C"
820 except around operations that need it to be set to the program's
821 underlying locale.  This protects the many XS modules that cannot cope
822 with the decimal radix character not being a dot.  Prior to this
823 release, Perl initialized this category to "C", but a call to
824 C<POSIX::setlocale()> would change it.  Now such a call will change the
825 underlying locale of the C<LC_NUMERIC> category for the program, but the
826 locale exposed to XS code will remain "C".  There is an API under
827 development for those relatively few modules that need to use the
828 underlying locale.  This API will be nailed down during the course of
829 developing v5.21.  Send email to L<mailto:perl5-porters@perl.org> for
830 guidance.
831
832 =item *
833
834 A new macro L<C<isUTF8_CHAR>|perlapi/isUTF8_CHAR> has been written which
835 efficiently determines if the string given by its parameters begins
836 with a well-formed UTF-8 encoded character.
837
838 =item *
839
840 The following private API functions had their context parameter removed,
841 C<Perl_cast_ulong>,  C<Perl_cast_i32>, C<Perl_cast_iv>,    C<Perl_cast_uv>,
842 C<Perl_cv_const_sv>, C<Perl_mg_find>,  C<Perl_mg_findext>, C<Perl_mg_magical>,
843 C<Perl_mini_mktime>, C<Perl_my_dirfd>, C<Perl_sv_backoff>, C<Perl_utf8_hop>.
844
845 Users of the public API prefix-less calls remain unaffected.
846
847 =item *
848
849 Experimental support for ops in the optree to be able to locate their
850 parent, if any. A general-purpose function, C<< op_sibling_splice() >>
851 allows for general manipulating an C<< op_sibling >> chain. The last op
852 in such a chain is now marked with the field C<< op_lastsib >>.
853
854 A new build define, C<< -DPERL_OP_PARENT >> has been added; if
855 given, it forces the core to use C<< op_lastsib >> to detect the
856 last sibling in a chain, freeing the last C<< op_sibling >> pointer,
857 which then points back to the parent (instead of being C<< NULL >>).
858
859 A C-level C<< op_parent() >> function, and a C<< B >> C<< parent() >> method
860 have been added; under a default build, they return C<< NULL >>, but when
861 C<< -DPERL_OP_PARENT >> has been set, they return the parent of the current op.
862
863 =back
864
865 =head1 Selected Bug Fixes
866
867 =over 4
868
869 =item *
870
871 index() and rindex() no longer crash when used on strings over 2GB in
872 size.
873 L<[perl #121562]|https://rt.perl.org/Ticket/Display.html?id=121562>.
874
875 =item *
876
877 A small previously intentional memory leak in PERL_SYS_INIT/PERL_SYS_INIT3 on
878 Win32 builds was fixed. This might affect embedders who repeatedly create and
879 destroy perl engines within the same process.
880
881 =item *
882
883 C<POSIX::localeconv()> now returns the data for the program's underlying
884 locale even when called from outside the scope of S<C<use locale>>.
885
886 =item *
887
888 C<POSIX::localeconv()> now works properly on platforms which don't have
889 C<LC_NUMERIC> and/or C<LC_MONETARY>, or for which Perl has been compiled
890 to disregard either or both of these locale categories.  In such
891 circumstances, there are now no entries for the corresponding values in
892 the hash returned by C<localeconv()>.
893
894 =item *
895
896 C<POSIX::localeconv()> now marks appropriately the values it returns as
897 UTF-8 or not.  Previously they were always returned as a bytes, even if
898 they were supposed to be encoded as UTF-8.
899
900 =item *
901
902 On Microsoft Windows, within the scope of C<S<use locale>>, the following
903 POSIX character classes gave results for many locales that did not
904 conform to the POSIX standard:
905 C<[[:alnum:]]>,
906 C<[[:alpha:]]>,
907 C<[[:blank:]]>,
908 C<[[:digit:]]>,
909 C<[[:graph:]]>,
910 C<[[:lower:]]>,
911 C<[[:print:]]>,
912 C<[[:punct:]]>,
913 C<[[:upper:]]>,
914 C<[[:word:]]>,
915 and
916 C<[[:xdigit:]]>.
917 These are because the underlying Microsoft implementation does not
918 follow the standard.  Perl now takes special precautions to correct for
919 this.
920
921 =item *
922
923 Many issues have been detected by L<Coverity|http://www.coverity.com/> and
924 fixed.
925
926 =item *
927
928 system() and friends should now work properly on more Android builds.
929
930 Due to an oversight, the value specified through -Dtargetsh to Configure
931 would end up being ignored by some of the build process.  This caused perls
932 cross-compiled for Android to end up with defective versions of system(),
933 exec() and backticks: the commands would end up looking for C</bin/sh>
934 instead of C</system/bin/sh>, and so would fail for the vast majority
935 of devices, leaving C<$!> as C<ENOENT>.
936
937 =item *
938
939 C<qr(...\(...\)...)>,
940 C<qr[...\[...\]...]>,
941 and
942 C<qr{...\{...\}...}>
943 now work.  Previously it was impossible to escape these three
944 left-characters with a backslash within a regular expression pattern
945 where otherwise they would be considered metacharacters, and the pattern
946 opening delimiter was the character, and the closing delimiter was its
947 mirror character.
948
949 =item *
950
951 C<< s///e >> on tainted utf8 strings got C<< pos() >> messed up. This bug,
952 introduced in 5.20, is now fixed. [RT #122148]
953
954 =item *
955
956 A non-word boundary in a regular expression (C<< \B >>) did not always
957 match the end of the string; in particular C<< q{} =~ /\B/ >> did not
958 match. This bug, introduced in perl 5.14, is now fixed. [RT #122090]
959
960 =item *
961
962 C<< " P" =~ /(?=.*P)P/ >> should match, but did not. This is now fixed.
963 [RT #122171].
964
965 =back
966
967 =head1 Known Problems
968
969 XXX Descriptions of platform agnostic bugs we know we can't fix go here.  Any
970 tests that had to be C<TODO>ed for the release would be noted here.  Unfixed
971 platform specific bugs also go here.
972
973 [ List each fix as a =item entry ]
974
975 =over 4
976
977 =item *
978
979 XXX Check this list before the release of 5.22.0 for modules that have
980 been fixed.
981
982 The following modules are known to have test failures with this version of
983 Perl.  Patches have been submitted, so there will hopefully be new releases
984 soon:
985
986 =over
987
988 =item *
989
990 L<B::Generate> version 1.50
991
992 =item *
993
994 L<B::Utils> version 0.25
995
996 =item *
997
998 L<Dancer> version 1.3130
999
1000 =item *
1001
1002 L<Data::Alias> version 1.18
1003
1004 =item *
1005
1006 L<Data::Util> version 0.63
1007
1008 =item *
1009
1010 L<Lexical::Var> version 0.009
1011
1012 =item *
1013
1014 L<Mason> version 2.22
1015
1016 =item *
1017
1018 L<Padre> version 1.00
1019
1020 =item *
1021
1022 L<Parse::Keyword> 0.08
1023
1024 =back
1025
1026 =back
1027
1028 =head1 Errata From Previous Releases
1029
1030 =over 4
1031
1032 =item *
1033
1034 XXX Add anything here that we forgot to add, or were mistaken about, in
1035 the perldelta of a previous release.
1036
1037 =back
1038
1039 =head1 Obituary
1040
1041 XXX If any significant core contributor has died, we've added a short obituary
1042 here.
1043
1044 =head1 Acknowledgements
1045
1046 XXX Generate this with:
1047
1048   perl Porting/acknowledgements.pl v5.21.12..HEAD
1049
1050 =head1 Reporting Bugs
1051
1052 If you find what you think is a bug, you might check the articles recently
1053 posted to the comp.lang.perl.misc newsgroup and the perl bug database at
1054 https://rt.perl.org/ .  There may also be information at
1055 http://www.perl.org/ , the Perl Home Page.
1056
1057 If you believe you have an unreported bug, please run the L<perlbug> program
1058 included with your release.  Be sure to trim your bug down to a tiny but
1059 sufficient test case.  Your bug report, along with the output of C<perl -V>,
1060 will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
1061
1062 If the bug you are reporting has security implications, which make it
1063 inappropriate to send to a publicly archived mailing list, then please send it
1064 to perl5-security-report@perl.org.  This points to a closed subscription
1065 unarchived mailing list, which includes all the core committers, who will be
1066 able to help assess the impact of issues, figure out a resolution, and help
1067 co-ordinate the release of patches to mitigate or fix the problem across all
1068 platforms on which Perl is supported.  Please only use this address for
1069 security issues in the Perl core, not for modules independently distributed on
1070 CPAN.
1071
1072 =head1 SEE ALSO
1073
1074 The F<Changes> file for an explanation of how to view exhaustive details on
1075 what changed.
1076
1077 The F<INSTALL> file for how to build Perl.
1078
1079 The F<README> file for general stuff.
1080
1081 The F<Artistic> and F<Copying> files for copyright information.
1082
1083 =cut