-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathperl5272cdelta.html
1544 lines (1002 loc) · 66.7 KB
/
perl5272cdelta.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:[email protected]" />
</head>
<body style="background-color: white">
<ul id="index">
<li><a href="#NAME">NAME</a></li>
<li><a href="#DESCRIPTION">DESCRIPTION</a></li>
<li><a href="#Core-Enhancements">Core Enhancements</a>
<ul>
<li><a href="#Optimize-static-methods-to-subs">Optimize static methods to subs</a></li>
<li><a href="#Dump-more-COP-fields">Dump more COP fields</a></li>
<li><a href="#More-unicode-ops">More unicode ops</a></li>
<li><a href="#delete-on-key-value-slices">delete on key/value slices</a></li>
<li><a href="#Unicode-10.0-is-supported">Unicode 10.0 is supported</a></li>
<li><a href="#Re-enable-warnings-illegalproto">Re-enable warnings illegalproto</a></li>
<li><a href="#In-place-editing-is-now-safer">In-place editing is now safer</a></li>
<li><a href="#Initialisation-of-aggregate-state-variables">Initialisation of aggregate state variables</a></li>
<li><a href="#Full-size-inode-numbers">Full-size inode numbers</a></li>
<li><a href="#Changed-warnings::register-handling-of-all">Changed warnings::register handling of all</a></li>
</ul>
</li>
<li><a href="#Security">Security</a>
<ul>
<li><a href="#CVE-2017-12837-Heap-buffer-overflow-in-regular-expression-compiler">[CVE-2017-12837] Heap buffer overflow in regular expression compiler</a></li>
<li><a href="#CVE-2017-12883-Buffer-over-read-in-regular-expression-parser">[CVE-2017-12883] Buffer over-read in regular expression parser</a></li>
<li><a href="#CVE-2017-12814-ENV-key-stack-buffer-overflow-on-Windows">[CVE-2017-12814] $ENV{$key} stack buffer overflow on Windows</a></li>
<li><a href="#Unsigned-long-stack-access-of-printf-format-arguments">Unsigned long stack access of printf format arguments</a></li>
</ul>
</li>
<li><a href="#Incompatible-Changes">Incompatible Changes</a>
<ul>
<li><a href="#Comma-less-variable-lists-in-formats-are-no-longer-allowed">Comma-less variable lists in formats are no longer allowed</a></li>
<li><a href="#The-:locked-and-:unique-attributes-have-been-removed">The :locked and :unique attributes have been removed</a></li>
<li><a href="#N-with-nothing-between-the-braces-is-now-illegal">\N{} with nothing between the braces is now illegal.</a></li>
<li><a href="#Opening-the-same-symbol-as-both-a-file-and-directory-handle-is-no-longer-allowed">Opening the same symbol as both a file and directory handle is no longer allowed</a></li>
<li><a href="#Use-of-bare-to-mean-is-no-longer-allowed">Use of bare << to mean <<"" is no longer allowed</a></li>
<li><a href="#Setting-to-a-reference-to-a-non-positive-integer-no-longer-allowed">Setting $/ to a reference to a non-positive integer no longer allowed</a></li>
<li><a href="#Unicode-code-points-with-values-exceeding-IV_MAX-are-now-fatal">Unicode code points with values exceeding IV_MAX are now fatal.</a></li>
<li><a href="#B::OP::terse-no-longer-exists">B::OP::terse no longer exists.</a></li>
<li><a href="#Use-of-inherited-AUTOLOAD-for-non-methods-is-no-longer-allowed">Use of inherited AUTOLOAD for non-methods is no longer allowed.</a></li>
<li><a href="#Use-of-strings-with-code-points-over-0xFF-is-not-allowed-for-bitwise-string-operators">Use of strings with code points over 0xFF is not allowed for bitwise string operators</a></li>
<li><a href="#Backslash-no-longer-escapes-colon-in-PATH-for-the--S-switch">Backslash no longer escapes colon in PATH for the -S switch</a></li>
<li><a href="#Subroutines-no-longer-need-typeglobs">Subroutines no longer need typeglobs</a></li>
<li><a href="#is-a-term-in-cperl-not-a-statement">... is a term in cperl, not a statement</a></li>
</ul>
</li>
<li><a href="#Deprecations">Deprecations</a>
<ul>
<li><a href="#Use-of-1-perlfunc-vec-EXPR-OFFSET-BITS-on-strings-with-code-points-above-0xFF-is-deprecated">Use of $1|perlfunc/vec EXPR,OFFSET,BITS> on strings with code points above 0xFF is deprecated.</a></li>
<li><a href="#Some-uses-of-unescaped-are-no-longer-fatal">Some uses of unescaped "{" are no longer fatal</a></li>
<li><a href="#Module-removals">Module removals</a></li>
</ul>
</li>
<li><a href="#Performance-Enhancements">Performance Enhancements</a></li>
<li><a href="#Modules-and-Pragmata">Modules and Pragmata</a>
<ul>
<li><a href="#Removal-of-use-vars">Removal of use vars</a></li>
<li><a href="#Updated-Modules-and-Pragmata">Updated Modules and Pragmata</a></li>
<li><a href="#Removed-Modules-and-Pragmata">Removed Modules and Pragmata</a></li>
</ul>
</li>
<li><a href="#Documentation">Documentation</a>
<ul>
<li><a href="#New-Documentation">New Documentation</a>
<ul>
<li><a href="#PACKAGING">PACKAGING</a></li>
</ul>
</li>
<li><a href="#Changes-to-Existing-Documentation">Changes to Existing Documentation</a>
<ul>
<li><a href="#perlapi">perlapi</a></li>
<li><a href="#perlop">perlop</a></li>
<li><a href="#perldata">perldata</a></li>
<li><a href="#perluniprops">perluniprops</a></li>
<li><a href="#perlintern">perlintern</a></li>
<li><a href="#perlfilter">perlfilter</a></li>
<li><a href="#POSIX">POSIX</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#Diagnostics">Diagnostics</a>
<ul>
<li><a href="#New-Diagnostics">New Diagnostics</a>
<ul>
<li><a href="#New-Errors">New Errors</a></li>
<li><a href="#New-Warnings">New Warnings</a></li>
</ul>
</li>
<li><a href="#Changes-to-Existing-Diagnostics">Changes to Existing Diagnostics</a></li>
</ul>
</li>
<li><a href="#Configuration-and-Compilation">Configuration and Compilation</a></li>
<li><a href="#Testing">Testing</a></li>
<li><a href="#Platform-Support">Platform Support</a>
<ul>
<li><a href="#Discontinued-Platforms">Discontinued Platforms</a></li>
<li><a href="#Platform-Specific-Notes">Platform-Specific Notes</a></li>
</ul>
</li>
<li><a href="#Internal-Changes">Internal Changes</a></li>
<li><a href="#Selected-Bug-Fixes">Selected Bug Fixes</a></li>
<li><a href="#Known-Problems">Known Problems</a></li>
<li><a href="#Acknowledgements">Acknowledgements</a></li>
<li><a href="#Reporting-Bugs">Reporting Bugs</a></li>
<li><a href="#SEE-ALSO">SEE ALSO</a></li>
</ul>
<h1 id="NAME">NAME</h1>
<p>perl5272cdelta - what is new for cperl v5.27.2</p>
<h1 id="DESCRIPTION">DESCRIPTION</h1>
<p>This document describes the differences between the cperl 5.27.1 and the cperl 5.27.2 releases.</p>
<p>If you are upgrading from an earlier release such as v5.24.2c, first read the <a>perl526*cdelta</a> documentation, which describes differences between v5.26.0c and v5.26.2c</p>
<h1 id="Core-Enhancements">Core Enhancements</h1>
<h2 id="Optimize-static-methods-to-subs">Optimize static methods to subs</h2>
<p>When a method call can be proven at compile-time to use a specific subroutine, optimize away the run-time method dispatch on a non-threaded perl. When it is for a XS subroutine, such as with e.g. <code>use strict;</code> which does <code>BEGIN {require strict;} strict->import;</code> the <code>strict->import</code> part is optimized from the slow <code>entersub</code> op to the <code>enterxssub</code> op, as if via <code>strict::import("strict",...)</code>. The slow GV lookup in entersub cannot be converted to a faster CVref lookup, as this would break dynamic method redefinitions. See <a href="http://blogs.perl.org/users/rurban/2011/06/how-perl-calls-subs-and-methods.html">http://blogs.perl.org/users/rurban/2011/06/how-perl-calls-subs-and-methods.html</a>. This is ~4% faster for each such method call. cperl-only.</p>
<h2 id="Dump-more-COP-fields">Dump more COP fields</h2>
<p>Dump the values of a COP <code>$^H</code>, <code>%^H</code> and the lexical warnings via <code>op_dump()</code> and it's XS module <a href="/cperl/lib/Devel/Peek.html">Devel::Peek</a>. Improve the display of cop SEQ values and ranges, and padnames. Added a DEBUGGING <code>cop_dump()</code> helper, esp. useful for deleted <code>PL_curcop</code>'s. cperl-only.</p>
<h2 id="More-unicode-ops">More unicode ops</h2>
<p>Added the strong unicode fraction op <code>/</code> U+2044, which binds stronger than all other arithmetic ops, and the two unicode multiplication ops <code>⋅</code> U+022C5 (dot operator) and <code>∙</code> U+2219 (multiplication dot), which binds the same as <code>*</code>. cperl-only.</p>
<h2 id="delete-on-key-value-slices"><a href="/cperl/perlfunc.html#delete-EXPR">delete</a> on key/value slices</h2>
<p><a href="/cperl/perlfunc.html#delete-EXPR">delete</a> can now be used on key/value slices, returning the keys along with the deleted values. <a href="https://rt.perl.org/Ticket/Display.html?id=131328">[perl #131328]</a></p>
<h2 id="Unicode-10.0-is-supported">Unicode 10.0 is supported</h2>
<p>A list of changes is at <a href="http://www.unicode.org/versions/Unicode10.0.0">http://www.unicode.org/versions/Unicode10.0.0</a>.</p>
<h2 id="Re-enable-warnings-illegalproto">Re-enable warnings illegalproto</h2>
<p>Parse prototypes for errors again. Either with <code>:prototype()</code> or as signature. Illegal prototypes are not stored. Most illegal protos are subsequently parsed as signature, but some are just wrong protos, such as <code>'[$'</code> missing the <code>']'</code>, or <code>:prototype($_$)</code>.</p>
<h2 id="In-place-editing-is-now-safer">In-place editing is now safer</h2>
<p>Previously in-place editing would delete or rename the input file as soon as you started working on a new file.</p>
<p>Without backups this would result in loss of data if there was an error, such as a full disk, when writing to the output file.</p>
<p>This has changed so that the input file isn't replaced until the output file has been completely written and successfully closed.</p>
<p>This works by creating a work file in the same directory, which is renamed over the input file once the output file is complete.</p>
<p>Incompatibilities:</p>
<ul>
<li><p>Since this renaming needs to only happen once, if you create a thread or child process, that renaming will only happen in the original thread or process.</p>
</li>
<li><p>If you change directories while processing a file, and your operating system doesn't provide the <code>unlinkat()</code>, <code>renameat()</code> and <code>fchmodat()</code> functions, the final rename step may fail.</p>
</li>
</ul>
<p><a href="https://rt.perl.org/Public/Bug/Display.html?id=127663">[perl #127663]</a></p>
<h2 id="Initialisation-of-aggregate-state-variables">Initialisation of aggregate state variables</h2>
<p>A persistent lexical array or hash variable can now be initialized, by an expression such as <code>state @a = qw(x y z)</code>. Initialization of a list of persistent lexical variables is still not possible.</p>
<h2 id="Full-size-inode-numbers">Full-size inode numbers</h2>
<p>On platforms where inode numbers are of a type larger than perl's native integer numerical types, <a href="/cperl/perlfunc.html#stat">stat</a> will preserve the full content of large inode numbers by returning them in the form of strings of decimal digits. Exact comparison of inode numbers can thus be achieved by comparing with <code>eq</code> rather than <code>==</code>. Comparison with <code>==</code>, and other numerical operations (which are usually meaningless on inode numbers), work as well as they did before, which is to say they fall back to floating point, and ultimately operate on a fairly useless rounded inode number if the real inode number is too big for the floating point format.</p>
<h2 id="Changed-warnings::register-handling-of-all">Changed warnings::register handling of all</h2>
<p>If a scope used "use warnings 'all'" to turn on all warnings and then turned off some specific warnings, then that scope wouldn't get warnings for subsequently-registered warning categories, because its bitset doesn't extend to the bit controlling the new category.</p>
<p>Unlike all other warning categories, the bits for "all" used to be set only when there were no warning categories disabled; disabling any would also clear the "all" bits. That was supporting the dynamic nature of warnings::register extending the all-warnings bitset for new categories. This exception is now removed, so the meaning of the "all" bits is now the more obvious meaning, of indicating the default treatment that the scope wants for warnings not falling into any category known to the bitset. In <code>warnings::warnif()</code> et al, if the caller's bitset is found to be too short to have a bit for the relevant category, then the setting for the "all" category is used instead.</p>
<p>Because the length of a bitset is an integral number of bytes, but only two bits are used per category, the length of a bitset doesn't precisely indicate which categories had been registered by the time it was constructed. So the standard bitsets for the "all" category are now always filled to their byte length, with bits set preemptively for categories not yet registered that fall within the current bitset length.</p>
<p>When a warnings pragma operates on a bitset, it first expands it to the preferred length, by duplicating the "all" bits for the categories covered by the new length. It is careful to maintain the length when combining the bitset with the standard bitsets for categories. When a bitset is read from <code>${^WARNING_BITS}</code> or from <code>caller()</code>, the standard <code>pWARN_ALL</code> setting is no longer expanded by the core to <code>$warnings::Bits{all}</code>, because the core's short <code>WARN_ALLstring</code> will now be expanded correctly just like any other bitset.</p>
<p>Fixes <a href="https://rt.perl.org/Public/Bug/Display.html?id=108778">[perl #108778]</a></p>
<h1 id="Security">Security</h1>
<h2 id="CVE-2017-12837-Heap-buffer-overflow-in-regular-expression-compiler">[CVE-2017-12837] Heap buffer overflow in regular expression compiler</h2>
<p>Compiling certain regular expression patterns with the case-insensitive modifier could cause a heap buffer overflow and crash perl. This has now been fixed. <a href="https://rt.perl.org/Public/Bug/Display.html?id=131582">[perl #131582]</a></p>
<h2 id="CVE-2017-12883-Buffer-over-read-in-regular-expression-parser">[CVE-2017-12883] Buffer over-read in regular expression parser</h2>
<p>For certain types of syntax error in a regular expression pattern, the error message could either contain the contents of a random, possibly large, chunk of memory, or could crash perl. This has now been fixed. <a href="https://rt.perl.org/Public/Bug/Display.html?id=131598">[perl #131598]</a></p>
<h2 id="CVE-2017-12814-ENV-key-stack-buffer-overflow-on-Windows">[CVE-2017-12814] <code>$ENV{$key}</code> stack buffer overflow on Windows</h2>
<p>A possible stack buffer overflow in the <code>%ENV</code> code on Windows has been fixed by removing the buffer completely since it was superfluous anyway. <a href="https://rt.perl.org/Public/Bug/Display.html?id=131665">[perl #131665]</a></p>
<h2 id="Unsigned-long-stack-access-of-printf-format-arguments">Unsigned long stack access of printf format arguments</h2>
<p>perl 5.27.5 started allowing unsigned long/4 stack indices for its sv arguments, and width and precision with the API even allowing <code>unsigned long</code>. Previously those numbers were safely typed to <code>int</code>. Revert that security problem in cperl. The maximal width and precision is also back to INT_MAX. See <a href="https://github.com/perl11/cperl/issues/344">[cperl #344]</a></p>
<h1 id="Incompatible-Changes">Incompatible Changes</h1>
<h2 id="Comma-less-variable-lists-in-formats-are-no-longer-allowed">Comma-less variable lists in formats are no longer allowed</h2>
<p>Omitting the commas between variables passed to formats is no longer allowed. This has been deprecated since perl 5.000.</p>
<h2 id="The-:locked-and-:unique-attributes-have-been-removed">The <code>:locked</code> and <code>:unique</code> attributes have been removed</h2>
<p>These have been no-ops and deprecated since perl 5.12 and 5.10, respectively.</p>
<h2 id="N-with-nothing-between-the-braces-is-now-illegal"><code>\N{}</code> with nothing between the braces is now illegal.</h2>
<p>This has been deprecated since Perl 5.24.</p>
<h2 id="Opening-the-same-symbol-as-both-a-file-and-directory-handle-is-no-longer-allowed">Opening the same symbol as both a file and directory handle is no longer allowed</h2>
<p>Using <a href="/cperl/perlfunc.html#open-FILEHANDLE-EXPR">open()</a> and <a href="/cperl/perlfunc.html#opendir-DIRHANDLE-EXPR">opendir()</a> to associate both a filehandle and a dirhandle to the same symbol (glob or scalar) has been deprecated since Perl 5.10.</p>
<h2 id="Use-of-bare-to-mean-is-no-longer-allowed">Use of bare <code><<</code> to mean <code><<""</code> is no longer allowed</h2>
<p>Use of a bare terminator has been deprecated since Perl 5.000.</p>
<h2 id="Setting-to-a-reference-to-a-non-positive-integer-no-longer-allowed">Setting $/ to a reference to a non-positive integer no longer allowed</h2>
<p>This used to work like setting it to <code>undef</code>, but has been deprecated since Perl 5.20.</p>
<h2 id="Unicode-code-points-with-values-exceeding-IV_MAX-are-now-fatal">Unicode code points with values exceeding <code>IV_MAX</code> are now fatal.</h2>
<p>This was deprecated since Perl 5.24.</p>
<h2 id="B::OP::terse-no-longer-exists"><code>B::OP::terse</code> no longer exists.</h2>
<p>Use <code>B::Concise::b_terse</code> instead.</p>
<h2 id="Use-of-inherited-AUTOLOAD-for-non-methods-is-no-longer-allowed">Use of inherited AUTOLOAD for non-methods is no longer allowed.</h2>
<p>This was deprecated in Perl 5.004.</p>
<h2 id="Use-of-strings-with-code-points-over-0xFF-is-not-allowed-for-bitwise-string-operators">Use of strings with code points over 0xFF is not allowed for bitwise string operators</h2>
<p>Code points over 0xFF do not make sense for bitwise operators.</p>
<h2 id="Backslash-no-longer-escapes-colon-in-PATH-for-the--S-switch">Backslash no longer escapes colon in PATH for the -S switch</h2>
<p>Previously the <code>-S</code> switch incorrectly treated backslash ("\") as an escape for colon when traversing the <code>PATH</code> environment variable. <a href="https://rt.perl.org/Ticket/Display.html?id=129183">[perl #129183]</a></p>
<h2 id="Subroutines-no-longer-need-typeglobs">Subroutines no longer need typeglobs</h2>
<p>Perl 5.22.0 introduced an optimization allowing subroutines to be stored in packages as simple sub refs, not requiring a full typeglob (thus potentially saving large amounts of memeory). However, the optimization was flawed: it only applied to the main package.</p>
<p>This optimization has now been extended to all packages. This may break compatibility with introspection code that looks inside stashes and expects everything in them to be a typeglob.</p>
<p>When this optimization happens, the typeglob still notionally exists, so accessing it will cause the stash entry to be upgraded to a typeglob. The optimization does not apply to XSUBs or exported subroutines, and calling a method will undo it, since method calls cache things in typeglobs.</p>
<h2 id="is-a-term-in-cperl-not-a-statement">... is a term in cperl, not a statement</h2>
<p>perl5.27.6 restricted <code>...</code>, the yada-yada operator, to be a statement only. cperl reserved <code>...</code> for the ellipsis, i.e. unassigned varargs in signatures to be passed through. Which is not a statement, but a term. In cperl <code>...</code> is a TERM. Before <code>...</code> was parsed as an operator, also used for ranges.</p>
<p>This affects illegal code like:</p>
<pre><code> ... . "foo";
... if $a < $b;
do{...}</code></pre>
<h1 id="Deprecations">Deprecations</h1>
<h2 id="Use-of-1-perlfunc-vec-EXPR-OFFSET-BITS-on-strings-with-code-points-above-0xFF-is-deprecated">Use of <a>$1</a>|perlfunc/vec EXPR,OFFSET,BITS> on strings with code points above 0xFF is deprecated.</h2>
<p>Use of these is nonsensical, as <code>vec</code> is a bit-oriented operation, which operates on the underlying UTF-8 representation these strings must be in, and will likely give unexpected results.</p>
<h2 id="Some-uses-of-unescaped-are-no-longer-fatal">Some uses of unescaped <code>"{"</code> are no longer fatal</h2>
<p>Perl 5.26.0 fatalized some uses of an unescaped left brace, but an exception was made at the last minute, specifically crafted to be a minimal change to allow GNU Autoconf to work. This code is heavily depended upon, and continues to use the deprecated usage. Its use of an unescaped left brace is one where we have no intention of repurposing <code>"{"</code> to be something other than itself.</p>
<p>That exception is now generalized to include various other such cases where the <code>"{"</code> will not be repurposed. This is to get real experience with this more complicated change now, in case we need to issue a dot release if we find other things like Autoconf that are important to work around.</p>
<p>Note that these uses continue to raise a deprecation message.</p>
<h2 id="Module-removals">Module removals</h2>
<p>The following modules will be removed from the core distribution in a future release, and will at that time need to be installed from CPAN. Distributions on CPAN which require these modules will need to list them as prerequisites.</p>
<p>The core versions of these modules will now issue <code>"deprecated"</code>-category warnings to alert you to this fact. To silence these deprecation warnings, install the modules in question from CPAN.</p>
<p>Note that these are (with rare exceptions) fine modules that you are encouraged to continue to use. Their disinclusion from core primarily hinges on their necessity to bootstrapping a fully functional, CPAN-capable Perl installation, not usually on concerns over their design.</p>
<dl>
<dt id="Locale::Codes"><a>Locale::Codes</a></dt>
<dd>
</dd>
</dl>
<h1 id="Performance-Enhancements">Performance Enhancements</h1>
<ul>
<li><p>The <a href="/cperl/lib/fields.html">fields</a> API refactor using a local <a href="/cperl/perlapi.html#HvFIELDS">"HvFIELDS" in perlapi</a> buffer and not globals <code>%FIELDS</code> and <code>@FIELDS</code> SVs anymore gained 25% speed and similar memory improvements. cperl-only.</p>
</li>
<li><p>Optimize field method calls to faster oelemfast OPs, accessing the field directly. cperl-only.</p>
</li>
<li><p>Removed <code>PL_sv_count</code> variable and updates on every <code>new_SV</code> and <code>del_SV</code> on non-DEBUGGING builds. For refcount leak checks scan the arenas. cperl-only.</p>
</li>
<li><p><code>SvTRUE()</code> is now more efficient.</p>
</li>
<li><p><code>keys()</code> in void and scalar contexts is now more efficient.</p>
</li>
<li><p>Various integer-returning ops are now more efficient in scalar/boolean context.</p>
</li>
<li><p><code>if (index(...) != -1) { ... }</code> is now more efficient.</p>
</li>
<li><p>Slightly improved performance when parsing stash names. <a href="https://rt.perl.org/Public/Bug/Display.html?id=129990">[perl #129990]</a></p>
</li>
<li><p>Calls to <code>require</code> for an already loaded module are now slightly faster. <a href="https://rt.perl.org/Public/Bug/Display.html?id=132171">[perl #132171]</a></p>
</li>
<li><p>Many string concatenation expressions are now considerably faster, due to the introduction internally of a <code>multiconcat</code> opcode which combines multiple concatenations, and optionally a <code>=</code> or <code>.=</code>, into a single action. For example, apart from retrieving <code>$s</code>, <code>$a</code> and <code>$b</code>, this whole expression is now handled as a single op:</p>
<pre><code> $s .= "a=$a b=$b\n"</code></pre>
<p>As a special case, if the LHS of an assign is a lexical variable or <code>my $s</code>, the op itself handles retrieving the lexical variable, which is faster.</p>
<p>In general, the more the expression includes a mix of constant strings and variable expressions, the longer the expression, and the more it mixes together non-utf8 and utf8 strings, the more marked the performance improvement. For example on a <code>x86_64</code> system, this code has been benchmarked running four times faster:</p>
<pre><code> my $s;
my $a = "ab\x{100}cde";
my $b = "fghij";
my $c = "\x{101}klmn";
for my $i (1..10_000_000) {
$s = "\x{100}wxyz";
$s .= "foo=$a bar=$b baz=$c";
}</code></pre>
<p>In addition, <code>sprintf</code> expressions which have a constant format containing only <code>%s</code> and <code>%%</code> format elements, and which have a fixed number of arguments, are now also optimised into a <code>multiconcat</code> op.</p>
</li>
<li><p>Subroutines in packages no longer need to be stored in typeglobs, saving large amounts of memory. See <a href="#Subroutines-no-longer-need-typeglobs">"Subroutines no longer need typeglobs"</a> under <a href="#Incompatible-Changes">"Incompatible Changes"</a>, above.</p>
</li>
</ul>
<h1 id="Modules-and-Pragmata">Modules and Pragmata</h1>
<h2 id="Removal-of-use-vars">Removal of use vars</h2>
<p>The usage of <code>use vars</code> has been discouraged since the introduction of <code>our</code> in Perl 5.6.0. Where possible the usage of this pragma has now been removed from the Perl source code.</p>
<p>This had a slight effect (for the better) on the output of <code>WARNING_BITS</code> in <a href="/cperl/lib/B/Deparse.html">B::Deparse</a>.</p>
<p>Several core modules released on CPAN will not work anymore with perl versions prior to 5.6.</p>
<h2 id="Updated-Modules-and-Pragmata">Updated Modules and Pragmata</h2>
<dl>
<dt id="arybase-0.14"><a href="/cperl/lib/arybase.html">arybase</a> 0.14</dt>
<dd>
<p>Remove #ifdef USE_ITHREADS around MUTEX_* calls</p>
</dd>
<dt id="attributes-1.14c"><a href="/cperl/lib/attributes.html">attributes</a> 1.14c</dt>
<dd>
<p>Remove deprecated no-op attributes :unique, :locked. Added another param to validate_proto.</p>
</dd>
<dt id="Attribute::Handlers-1.00"><a href="/cperl/lib/Attribute/Handlers.html">Attribute::Handlers</a> 1.00</dt>
<dd>
<p>Remove deprecated no-op attributes :unique, :locked</p>
</dd>
<dt id="base-2.27c"><a href="/cperl/lib/base.html">base</a> 2.27c</dt>
<dd>
<p>Limit dotless-INC effect on base.pm with guard</p>
</dd>
<dt id="B-1.71_08"><a href="/cperl/lib/B.html">B</a> 1.71_08</dt>
<dd>
<p>Support PL_sv_zero</p>
</dd>
<dt id="B::C-1.55_06"><a href="/cperl/lib/B/C.html">B::C</a> 1.55_06</dt>
<dd>
<p>Support POK/PVLV REGEXP for v5.27.3/v5.27.2c VOL => volatile for v5.27.6/v5.27.2c</p>
</dd>
<dt id="B::Concise-1.003c"><a href="/cperl/lib/B/Concise.html">B::Concise</a> 1.003c</dt>
<dd>
<p>Support PL_sv_zero</p>
</dd>
<dt id="B::Deparse-1.43_04c"><a href="/cperl/lib/B/Deparse.html">B::Deparse</a> 1.43_04c</dt>
<dd>
<p>Support boolean optims. Better constant-dumping heuristics.</p>
</dd>
<dt id="B::Terse-1.09_01"><a href="/cperl/lib/B/Terse.html">B::Terse</a> 1.09_01</dt>
<dd>
<p>Remove internal links to B::Debug</p>
</dd>
<dt id="B::Xref-1.07_01"><a href="/cperl/lib/B/Xref.html">B::Xref</a> 1.07_01</dt>
<dd>
<p>Support sub refs</p>
</dd>
<dt id="Carp-1.44c"><code>Carp</code> 1.44c</dt>
<dd>
<p>Fix problems introduced by the partial EBCDIC support from version 1.35, and ISA constants. Not all stash elements are globs.</p>
</dd>
<dt id="charnames-1.45"><code>charnames</code> 1.45</dt>
<dd>
<p>Remove obsolete pod about NBSP</p>
</dd>
<dt id="Compress::Raw::Zlib-2.076"><a href="/cperl/lib/Compress/Raw/Zlib.html">Compress::Raw::Zlib</a> 2.076</dt>
<dd>
<p>Updated internal zlib from 1.2.8 to 1.2.11</p>
<p>Silence gcc compiler warnings when -Wsign-compare is enabled #123688: Compilation warnings with clang</p>
<p>Silence gcc compiler warnings when -Wimplicit-fallthrough is enabled #123358: Compilation warnings with gcc-7.*</p>
<p>Windows uses -lzlib. Linux uses -lz #123699: wrong external zlib name used on Windows</p>
<p>Update zlib-src directory to use zlib 1.2.11 #123245: perl 5.26.1 is vulnerable to CVE-2016-9843, CVE-2016-9841, CVE-2016-9840, CVE-2016-9842</p>
<p>Don't allow offset to be greater than length of buffer in crc32.</p>
<p>Change my_zcalloc to use safecalloc. The link, https://github.com/madler/zlib/issues/253, is the upstream report for the remaining valgrind errors not already dealt with by 1.2.11. Using calloc in Zlib.xs for now as a workaround. #121074: valgrind errors in the test suite</p>
</dd>
<dt id="Config::Perl::V-0.29_01"><a href="/cperl/lib/Config/Perl/V.html">Config::Perl::V</a> 0.29_01</dt>
<dd>
<pre><code> * Add test for 5.26.1-RC1, and some cperl -V's
* Fix signature with argument
* Ignore ccache and compiler path in signature
* Add default_inc_excludes_dot</code></pre>
</dd>
<dt id="constant-1.34"><code>constant</code> 1.34</dt>
<dd>
</dd>
<dt id="coretypes-0.03c"><code>coretypes</code> 0.03c</dt>
<dd>
<p>Each coretype is now a class.</p>
</dd>
<dt id="Cpanel::JSON::XS-3.0239"><a href="/cperl/lib/Cpanel/JSON/XS.html">Cpanel::JSON::XS</a> 3.0239</dt>
<dd>
<p>Fixed locale-insensitive numeric conversion on older perls. Fixed compilation under windows.</p>
</dd>
<dt id="Data::Dumper-2.167_02"><a href="/cperl/lib/Data/Dumper.html">Data::Dumper</a> 2.167_02</dt>
<dd>
<p>Attempt to work around XS deparse issues on old perls.</p>
</dd>
<dt id="Devel::Peek-1.27_03"><a href="/cperl/lib/Devel/Peek.html">Devel::Peek</a> 1.27_03</dt>
<dd>
<p>Dump the values of a COP $^H, %^H and lexical warnings. Improved the test a bit.</p>
<p>use cv_set_call_checker_flags</p>
</dd>
<dt id="Devel::PPPort-3.36_03"><a href="/cperl/lib/Devel/PPPort.html">Devel::PPPort</a> 3.36_03</dt>
<dd>
<p>Silence PERL_CORE make</p>
</dd>
<dt id="Digest::SHA-5.98"><a href="/cperl/lib/Digest/SHA.html">Digest::SHA</a> 5.98</dt>
<dd>
<p>Remove deprecated -p option</p>
</dd>
<dt id="DirHandle-1.05"><a href="/cperl/lib/DirHandle.html">DirHandle</a> 1.05</dt>
<dd>
<p>Document as obsolete</p>
</dd>
<dt id="Encode-2.93"><a href="/cperl/lib/Encode.html">Encode</a> 2.93</dt>
<dd>
<p>lib/Encode/MIME/Name.pm t/mime-name.t Pulled: Add "euc-cn" => "EUC-CN" alias to Encode::MIME::Name https://github.com/dankogai/p5-encode/pull/124</p>
<p>lib/Encode/CN/HZ.pm lib/Encode/JP/JIS7.pm lib/Encode/MIME/Header.pm t/decode.t Pulled: Uninitialized value fixes #122 https://github.com/dankogai/p5-encode/pull/122</p>
<p>Makefile.PL Pulled: Fix -Werror=declaration-after-statement for gcc 4.1.2 https://github.com/dankogai/p5-encode/pull/121</p>
</dd>
<dt id="experimental-0.019_01c"><a href="/cperl/lib/experimental.html">experimental</a> 0.019_01c</dt>
<dd>
<p>eval use feature, minor test fix.</p>
</dd>
<dt id="ExtUtils::Constant-0.24_01"><a href="/cperl/lib/ExtUtils/Constant.html">ExtUtils::Constant</a> 0.24_01</dt>
<dd>
<p>Minor updates from p5p</p>
</dd>
<dt id="ExtUtils::CBuilder-0.280230"><a href="/cperl/lib/ExtUtils/CBuilder.html">ExtUtils::CBuilder</a> 0.280230</dt>
<dd>
<p>use vars => our</p>
</dd>
<dt id="ExtUtils::Install-2.14"><a href="/cperl/lib/ExtUtils/Install.html">ExtUtils::Install</a> 2.14</dt>
<dd>
<p>Minor updates, some taken from cperl.</p>
</dd>
<dt id="ExtUtils::ParseXS-3.26_02"><a href="/cperl/lib/ExtUtils/ParseXS.html">ExtUtils::ParseXS</a> 3.26_02</dt>
<dd>
</dd>
<dt id="feature-1.49_01"><a href="/cperl/lib/feature.html">feature</a> 1.49_01</dt>
<dd>
</dd>
<dt id="fields-2.26c"><a href="/cperl/lib/fields.html">fields</a> 2.26c</dt>
<dd>
<p>Implemented <a href="/cperl/lib/Mu.html#fields">"fields" in Mu</a> returning fields objects, as in perl6 (there called <i>Attributes</i>).</p>
<p>Revert the conversion of a fields package to class. Only close the ISA as with base.</p>
<p>cperl-only.</p>
</dd>
<dt id="File::Fetch-0.56"><a href="/cperl/lib/File/Fetch.html">File::Fetch</a> 0.56</dt>
<dd>
<p>Switch test URL from www.cpan.org to httpbin.org</p>
</dd>
<dt id="File::Glob-1.30"><a href="/cperl/lib/File/Glob.html">File::Glob</a> 1.30</dt>
<dd>
<p>Skip a test when File::Glob not used. Avoid undefined behaviour in Copy() [perl #131746]</p>
</dd>
<dt id="Filter::Util::Call-1.58"><a href="/cperl/lib/Filter/Util/Call.html">Filter::Util::Call</a> 1.58</dt>
<dd>
<p>XSLoader, our. defer Carp. add filter_read_exact tests.</p>
</dd>
<dt id="GDBM_File-1.16"><a>GDBM_File</a> 1.16</dt>
<dd>
<p>Add a pod link</p>
</dd>
<dt id="Hash::Util::FieldHash-1.20"><a href="/cperl/lib/Hash/Util/FieldHash.html">Hash::Util::FieldHash</a> 1.20</dt>
<dd>
</dd>
<dt id="I18N::Langinfo-0.14"><a href="/cperl/lib/I18N/Langinfo.html">I18N::Langinfo</a> 0.14</dt>
<dd>
<p>Use new fcn Perl_langinfo()</p>
</dd>
<dt id="if-0.0607"><a href="/cperl/lib/if.html">if</a> 0.0607</dt>
<dd>
<p>Doc how to import when you want to 'use MODULE ()'</p>
</dd>
<dt id="IO::Handle-1.37"><a href="/cperl/lib/IO/Handle.html">IO::Handle</a> 1.37</dt>
<dd>
</dd>
<dt id="JSON::PP-2.97000_04"><a href="/cperl/lib/JSON/PP.html">JSON::PP</a> 2.97000_04</dt>
<dd>
<p>Minor updates, mostly docs. Upstream Boolean still did not work with Cpanel::JSON::XS.</p>
</dd>
<dt id="libnet-3.11_01"><code>libnet</code> 3.11_01</dt>
<dd>
</dd>
<dt id="Locale::Codes-3.55"><a>Locale::Codes</a> 3.55</dt>
<dd>
<p>Deprecate from core with v5.27.7, move to cpan.</p>
</dd>
<dt id="Module::CoreList-20170815c"><a href="/cperl/lib/Module/CoreList.html">Module::CoreList</a> 20170815c</dt>
<dd>
</dd>
<dt id="Module::Load::Conditional-0.68_01"><a href="/cperl/lib/Module/Load/Conditional.html">Module::Load::Conditional</a> 0.68_01</dt>
<dd>
<p>Improve CPANPLUS: Fix [cperl #331], checking for cperl builtins. With a slightly adjusted patch from @voegelas.</p>
</dd>
<dt id="mro-1.21"><a href="/cperl/lib/mro.html">mro</a> 1.21</dt>
<dd>
<p>prevent mro.pm from loading DynaLoader</p>
</dd>
<dt id="Mu-0.02c"><a href="/cperl/lib/Mu.html">Mu</a> 0.02c</dt>
<dd>
<p>Implemented <a href="/cperl/lib/Mu.html#fields">"fields" in Mu</a> returning fields objects. cperl-only.</p>
</dd>
<dt id="Net::Ping-2.63"><a href="/cperl/lib/Net/Ping.html">Net::Ping</a> 2.63</dt>
<dd>
<p>Keep v5.002 - v5.6 support</p>
<p>Removed outdated demo/fping from the documentation (RT #123750 by Steve Morris)</p>
<p>Added t/420_ping_syn_port.t (#4 by Julio Fraire) with fixes.</p>
<p>Added indices and crosslinks to the documentation</p>
</dd>
<dt id="NEXT-0.67_01"><a href="/cperl/lib/NEXT.html">NEXT</a> 0.67_01</dt>
<dd>
<p>Fix for GLOB stubs [cpan #123002].</p>
</dd>
<dt id="O-1.03"><a href="/cperl/lib/O.html">O</a> 1.03</dt>
<dd>
<p>Improve error message for bogus -MO=… arguments</p>
</dd>
<dt id="ODBM_File-1.15"><a>ODBM_File</a> 1.15</dt>
<dd>
</dd>
<dt id="Opcode-1.40_02c"><a href="/cperl/lib/Opcode.html">Opcode</a> 1.40_02c</dt>
<dd>
</dd>
<dt id="perl5db-1.52_01c"><a href="/cperl/lib/perl5db.html">perl5db</a> 1.52_01c</dt>
<dd>
<p>Support debugger cmds not requiring spaces</p>
</dd>
<dt id="PerlIO::scalar-0.29"><a href="/cperl/lib/PerlIO/scalar.html">PerlIO::scalar</a> 0.29</dt>
<dd>
<p>check invariant at compile time.</p>
<p>return EACCES on writing to a read-only scalar</p>
</dd>
<dt id="Pod::HTML-2.2303c"><a>Pod::HTML</a> 2.2303c</dt>
<dd>
</dd>
<dt id="Pod::Perldoc-3.2801"><a href="/cperl/lib/Pod/Perldoc.html">Pod::Perldoc</a> 3.2801</dt>
<dd>
<p>customize to fix formatters and pager misbehaviour</p>
</dd>
<dt id="POSIX-1.78_03"><a href="/cperl/lib/POSIX.html">POSIX</a> 1.78_03</dt>
<dd>
<p>internal cleanup of setlocale (unusable for cpan). get/setpriority constants</p>
</dd>
<dt id="re-0.35_01"><a href="/cperl/lib/re.html">re</a> 0.35_01</dt>
<dd>
<p>Faster. add DEBUGGING_RE_ONLY define</p>
</dd>
<dt id="SelfLoader-1.24"><a href="/cperl/lib/SelfLoader.html">SelfLoader</a> 1.24</dt>
<dd>
</dd>
<dt id="Scalar::Util-2.49_09"><a href="/cperl/lib/Scalar/Util.html">Scalar::Util</a> 2.49_09</dt>
<dd>
<p>fix find_rundefsvoffset logic Fix t/subname.t for unstrict names perl5.26 started defining $Config{usecperl} as 'UNKNOWN', hence this check is now unreliable.</p>
<p>Merge with 1.49 upstream: Ensure pairmap extends its stack correctly (davem) Fix name of List::Util::unpairs in its error messages</p>
</dd>
<dt id="sort-2.03"><a href="/cperl/lib/sort.html">sort</a> 2.03</dt>
<dd>
<p>no sort stable; SORTf_UNSTABLE flag</p>
</dd>
<dt id="Storable-3.05_16"><a href="/cperl/lib/Storable.html">Storable</a> 3.05_16</dt>
<dd>
<p>Try to fix readonly stacksize.h with perlbrew. [cperl #335]</p>
<p>Fix t/blessed.t for 5.10/5.12 threaded.</p>
<p>Restore max stacksizes for non-windows systems with proper system(SHELLSTRING) passing signals. Unify stack reserve to 32 across all platforms.</p>
</dd>
<dt id="Symbol-1.08_01"><a href="/cperl/lib/Symbol.html">Symbol</a> 1.08_01</dt>
<dd>
<p>Improved Symbol::delete_package for readonly and protected symbols and classes.</p>
</dd>
<dt id="Term::ReadLine-1.17"><a href="/cperl/lib/Term/ReadLine.html">Term::ReadLine</a> 1.17</dt>
<dd>
<p>fix for empty &STDERR files RT #132008</p>
</dd>
<dt id="threads-2.18_01"><a href="/cperl/lib/threads.html">threads</a> 2.18_01</dt>
<dd>
<p>Support PL_sv_zero. Don't Copy() null pointer</p>
</dd>
<dt id="Time::Piece-1.3202"><a href="/cperl/lib/Time/Piece.html">Time::Piece</a> 1.3202</dt>
<dd>
<pre><code> - Fix AIX compile
- Fix compile errors on MS
- Use macro for buf sizes
- Remove some compile warnings
- SP off by 1 in _crt_localtime</code></pre>
</dd>
<dt id="Time::HiRes-1.9747_01"><a href="/cperl/lib/Time/HiRes.html">Time::HiRes</a> 1.9747_01</dt>
<dd>
<p>Drop 5.005 support. Replace DynaLoader with XSLoader.</p>
</dd>
<dt id="Unicode::Collate-1.25"><a href="/cperl/lib/Unicode/Collate.html">Unicode::Collate</a> 1.25</dt>
<dd>
<p>Drop 5.005 support. Replace DynaLoader with XSLoader.</p>
</dd>
<dt id="Unicode::Normalize-1.26"><a href="/cperl/lib/Unicode/Normalize.html">Unicode::Normalize</a> 1.26</dt>
<dd>
<p>Switch to XSLoader from Dynaloader</p>
</dd>
<dt id="utf8-2.02c"><a href="/cperl/lib/utf8.html">utf8</a> 2.02c</dt>
<dd>
<p>Improved function documentation</p>
</dd>
<dt id="version-0.9918_02c"><a href="/cperl/lib/version.html">version</a> 0.9918_02c</dt>
<dd>
<p>Add updates from 0.9918: Add LAX_DECIMAL_VERSION, LAX_DOTTED_DECIMAL_VERSION, STRICT_DECIMAL_VERSION, STRICT_DOTTED_DECIMAL_VERSION regexes.</p>
<p>Add <i>t/11_taint.t</i></p>
</dd>
<dt id="VMS::Stdio-2.44_01"><a>VMS::Stdio</a> 2.44_01</dt>
<dd>
<p>Drop VMS::stdio compatibility shim</p>
</dd>
<dt id="XS::APITest-0.92_02"><a>XS::APITest</a> 0.92_02</dt>
<dd>
</dd>
<dt id="XS::Typemap-0.16"><a href="/cperl/lib/XS/Typemap.html">XS::Typemap</a> 0.16</dt>
<dd>
</dd>
</dl>
<h2 id="Removed-Modules-and-Pragmata">Removed Modules and Pragmata</h2>
<dl>
<dt id="B::Debug-1.25">B::Debug 1.25</dt>
<dd>
<p>Moved to CPAN. cperl only. perl5 will remove it with 5.30.</p>
</dd>
</dl>
<h1 id="Documentation">Documentation</h1>
<h2 id="New-Documentation">New Documentation</h2>
<h3 id="PACKAGING"><a>PACKAGING</a></h3>
<p>Notes and best practice for packaging perl 5</p>
<h2 id="Changes-to-Existing-Documentation">Changes to Existing Documentation</h2>
<h3 id="perlapi"><a href="/cperl/perlapi.html">perlapi</a></h3>
<ul>
<li><p>Added API docs for most hash macros.</p>
</li>
</ul>
<h3 id="perlop"><a href="/cperl/perlop.html">perlop</a></h3>
<ul>
<li><p>Added the missing operator precedences and documentation for the cperl unicode operators.</p>
</li>
<li><p><a href="/cperl/perlop.html">perlop</a> has been updated to note that <code>qw</code>'s whitespace rules differ from that of <code>split</code>'s in that only ASCII whitespace is used.</p>
</li>
</ul>
<h3 id="perldata"><a href="/cperl/perldata.html">perldata</a></h3>
<ul>
<li><p>The section "Truth and Falsehood" in <a href="/cperl/perlsyn.html">perlsyn</a> has been removed from that document, where it didn't belong, and merged into the existing paragraph on the same topic in <a href="/cperl/perldata.html">perldata</a>.</p>
</li>
</ul>
<h3 id="perluniprops"><a href="/cperl/perluniprops.html">perluniprops</a></h3>
<ul>
<li><p><a href="/cperl/perluniprops.html">perluniprops</a> has been updated to note that <code>\p{Word}</code> now includes code points matching the <code>\p{Join_Control}</code> property. The change to the property was made in Perl 5.18, but not documented until now. There are currently only two code points that match this property U+200C (ZERO WIDTH NON-JOINER) and U+200D (ZERO WIDTH JOINER).</p>
</li>
</ul>
<h3 id="perlintern"><a href="/cperl/perlintern.html">perlintern</a></h3>
<ul>
<li><p>Added API docs for most toke.c lexer functions.</p>
</li>
</ul>
<h3 id="perlfilter"><a href="/cperl/perlfilter.html">perlfilter</a></h3>
<ul>
<li><p>Add warning about raw <code>?...?</code> pattern delimiters.</p>
</li>
</ul>
<h3 id="POSIX"><a href="/cperl/lib/POSIX.html">POSIX</a></h3>
<ul>
<li><p><a href="/cperl/lib/POSIX.html">POSIX</a> has been updated with some more cautions about using locale-specific functions in threaded applications.</p>
</li>
</ul>
<h1 id="Diagnostics">Diagnostics</h1>
<p>The following additions or changes have been made to diagnostic output, including warnings and fatal error messages. For the complete list of diagnostic messages, see <a href="/cperl/perldiag.html">perldiag</a>.</p>
<h2 id="New-Diagnostics">New Diagnostics</h2>
<h3 id="New-Errors">New Errors</h3>
<ul>
<li><p><a href="/cperl/perldiag.html#Cannot-complete-in-place-edit-of-s:-s">Cannot complete in-place edit of %s: %s</a> when an unhandled chdir happens during an in-place edit.</p>
</li>
<li><p><a href="/cperl/perldiag.html#Can-t-rename-in-place-work-file-s-to-s-:-s">Can't rename in-place work file '%s' to '%s': %s</a></p>
</li>
<li><p><a href="/cperl/perldiag.html#Can-t-unweaken-a-nonreference">Can't unweaken a nonreference</a></p>
</li>
<li><p><a href="/cperl/perldiag.html#Missing-argument-for-n-in-s">Missing argument for %n in %s</a> in sprintf is now fatal.</p>
</li>
<li><p><a href="/cperl/perldiag.html#Integer-overflow-in-format-string-for-s">Integer overflow in format string for %s</a></p>
<p>cperl 5.27.2 added a new limitation of INT_MAX to the max. argument index, width and precision values for printf format strings. The new perl5.27.5 limitation is ULONG_MAX, which is a security risk, see <a href="#Unsigned-long-stack-access-of-printf-format-arguments">"Unsigned long stack access of printf format arguments"</a>.</p>
</li>
<li><p><a href="/cperl/perldiag.html#Too-large-floating-point-precision-in-format-string-s-for-s">Too large floating point precision in format string %s for %s</a></p>
<p>cperl 5.27.2 added a new limitation of 1024 to the max. precision of floating point conversions to strings via sprintf, to seperate it from Integer overflows in overlarge indices, width and precision values.</p>
</li>
<li><p><a href="/cperl/perldiag.html#Too-many-fields">Too many fields</a></p>
<p>cperl 5.27.2 added a new limitation of max. 65536 fields per class.</p>
</li>
<li><p><code>panic: cannot yet adjust field indices when composing role %s::%s into %s %s [cperl #311]"</code></p>
<p>When copying a method from a role to a class, and the field index from the role method would be different to a field index in the resulting class, the method is not yet fixed up to the new indices. A temp. solution would be to change the ordering of the roles, or to use the <code>$self->field</code> method syntax in the role method. This should be fixed before 5.28. Currently we can only alias composed role methods and we don't change the ordering of the fields. See <a href="https://github.com/perl11/cperl/issues/311">[cperl #311]</a></p>
</li>
<li><p><a href="/cperl/perldiag.html#Invalid-field-index-d-of-s-s">Invalid field index %d of class %s</a></p>
<p>The class doesn't have that many fields. cperl only</p>
</li>
</ul>
<h3 id="New-Warnings">New Warnings</h3>
<ul>
<li><p><a href="/cperl/perldiag.html#Reference-is-not-weak">Reference is not weak</a> in W misc.</p>
</li>
</ul>
<h2 id="Changes-to-Existing-Diagnostics">Changes to Existing Diagnostics</h2>
<ul>
<li><p>A false-positive warning that was issued when using a numerically-quantified sub-pattern in a recursive regex has been silenced. <a href="https://rt.perl.org/Public/Bug/Display.html?id=131868">[perl #131868]</a></p>
</li>
<li><p>The diagnostic <code>Initialization of state variables in list context currently forbidden</code> has changed to <code>Initialization of state variables in list currently forbidden</code>, because list-context initialization of single aggregate state variables is now permitted.</p>
</li>
<li><p><code>Failed to close in-place edit file %s: %s</code> was renamed to <a href="/cperl/perldiag.html#Failed-to-close-in-place-work-file-s:-s">Failed to close in-place work file %s: %s</a>.</p>
</li>
<li><p><code>delete argument is index/value array slice, use array slice</code> and <code>delete argument is key/value hash slice, use hash slice</code> is gone, deleting key/value slices is now supported.</p>
</li>
</ul>
<h1 id="Configuration-and-Compilation">Configuration and Compilation</h1>