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