-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathperl5253cdelta.html
1815 lines (1135 loc) · 93.2 KB
/
perl5253cdelta.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>
<ul id="index">
<li><a href="#NAME">NAME</a></li>
<li><a href="#DESCRIPTION">DESCRIPTION</a></li>
<li><a href="#Notice">Notice</a></li>
<li><a href="#Core-Enhancements">Core Enhancements</a>
<ul>
<li><a href="#No-magic-to-undef-yes-no-placeholder-SVs">No magic to undef/yes/no/placeholder SVs</a></li>
<li><a href="#Type-check-assignments">Type-check assignments</a></li>
<li><a href="#HvCLASS">HvCLASS</a></li>
<li><a href="#Type-infer-bless">Type-infer bless</a></li>
<li><a href="#Type-infer-subroutine-return-types">Type-infer subroutine return types</a></li>
<li><a href="#for-qw-is-legal-again">for qw() is legal again</a></li>
<li><a href="#Perl-can-now-do-default-collation-in-UTF-8-locales-on-platforms-that-support-it">Perl can now do default collation in UTF-8 locales on platforms that support it</a></li>
<li><a href="#Better-locale-collation-of-strings-containing-embedded-NUL-characters">Better locale collation of strings containing embedded NUL characters</a></li>
<li><a href="#Unescaped-literal-characters-in-regular-expression-patterns-are-no-longer-permissible">Unescaped literal "{" characters in regular expression patterns are no longer permissible</a></li>
<li><a href="#Literal-control-character-variable-names-are-no-longer-permissible">Literal control character variable names are no longer permissible</a></li>
<li><a href="#New-regular-expression-modifier-xx">New regular expression modifier /xx</a></li>
<li><a href="#NBSP-is-no-longer-permissible-in-N">NBSP is no longer permissible in \N{...}</a></li>
<li><a href="#CORE-subroutines-for-hash-and-array-functions-callable-via-reference">CORE subroutines for hash and array functions callable via reference</a></li>
<li><a href="#Unicode-9.0-is-now-supported">Unicode 9.0 is now supported</a></li>
<li><a href="#Use-of-p-script-uses-the-improved-Script_Extensions-property">Use of \p{script} uses the improved Script_Extensions property</a></li>
<li><a href="#Declaring-a-reference-to-a-variable">Declaring a reference to a variable</a></li>
<li><a href="#Indented-Here-documents">Indented Here-documents</a></li>
<li><a href="#and-INC">'.' and @INC</a></li>
<li><a href="#create-a-safer-utf8_hop-called-utf8_hop_safe">create a safer utf8_hop() called utf8_hop_safe()</a></li>
<li><a href="#CAPTURE-CAPTURE-and-CAPTURE_ALL">@{^CAPTURE}, %{^CAPTURE}, and %{^CAPTURE_ALL}</a></li>
<li><a href="#Improved-.pmc-loading">Improved .pmc loading</a></li>
</ul>
</li>
<li><a href="#Security">Security</a>
<ul>
<li><a href="#Storable-stack-overflows">Storable stack overflows</a></li>
<li><a href="#Escaped-colons-and-relative-paths-in-PATH">"Escaped" colons and relative paths in PATH</a></li>
<li><a href="#Unicode-identifiers:-Moderately-Restrictive-Level">Unicode identifiers: Moderately Restrictive Level</a></li>
<li><a href="#chdir-heap-buffer-overflow-on-the-perl-stack">chdir heap-buffer-overflow on the perl stack</a></li>
<li><a href="#Improved-Hash-DDoS-prevention">Improved Hash DDoS prevention</a></li>
</ul>
</li>
<li><a href="#Incompatible-Changes">Incompatible Changes</a>
<ul>
<li><a href="#String-delimiters-that-arent-stand-alone-graphemes-are-illegal">String delimiters that aren't stand-alone graphemes are illegal</a></li>
<li><a href="#for-state-loops-still-illegal">for state loops still illegal</a></li>
<li><a href="#scalar-hash-return-value-changed">scalar(%hash) return value changed</a></li>
<li><a href="#keys-returned-from-an-lvalue-subroutine">keys returned from an lvalue subroutine</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="#New-Modules-and-Pragmata">New Modules and Pragmata</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="#Changes-to-Existing-Documentation">Changes to Existing Documentation</a>
<ul>
<li><a href="#perlobj">perlobj</a></li>
<li><a href="#perlop">perlop</a></li>
<li><a href="#perllocale">perllocale</a></li>
<li><a href="#perldiag">perldiag</a></li>
<li><a href="#perldtrace">perldtrace</a></li>
<li><a href="#perlguts">perlguts</a></li>
<li><a href="#perlvar">perlvar</a></li>
<li><a href="#perlootut">perlootut</a></li>
<li><a href="#perlhack">perlhack</a></li>
<li><a href="#perlre">perlre</a></li>
<li><a href="#perlinterp">perlinterp</a></li>
<li><a href="#perlcall">perlcall</a></li>
<li><a href="#perltie">perltie</a></li>
<li><a href="#perldata">perldata</a></li>
<li><a href="#perlexperiment-and-perlref">perlexperiment and perlref</a></li>
<li><a href="#perlfunc">perlfunc</a></li>
<li><a href="#perlunicode">perlunicode</a></li>
<li><a href="#perlvar1">perlvar</a></li>
<li><a href="#perlcommunity">perlcommunity</a></li>
<li><a href="#perldelta">perldelta</a></li>
<li><a href="#perllocale1">perllocale</a></li>
<li><a href="#perlmodinstall">perlmodinstall</a></li>
<li><a href="#perlmodlib">perlmodlib</a></li>
<li><a href="#perlnewmod">perlnewmod</a></li>
<li><a href="#perlintern-and-perlapi">perlintern and perlapi</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="#Utility-Changes">Utility Changes</a>
<ul>
<li><a href="#Porting-bench.pl">Porting/bench.pl</a></li>
<li><a href="#c2ph">c2ph</a></li>
<li><a href="#Porting-pod_lib.pl">Porting/pod_lib.pl</a></li>
<li><a href="#perf-benchmarks">perf/benchmarks</a></li>
<li><a href="#Porting-checkAUTHORS.pl">Porting/checkAUTHORS.pl</a></li>
<li><a href="#t-porting-regen.t">t/porting/regen.t</a></li>
<li><a href="#h2xs">h2xs</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="#New-Platforms">New 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="#Errata-From-Previous-Releases">Errata From Previous Releases</a></li>
<li><a href="#Obituary">Obituary</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>
<li><a href="#POD-ERRORS">POD ERRORS</a></li>
</ul>
<h1 id="NAME">NAME</h1>
<p>perl5253cdelta - what is new for cperl v5.25.3</p>
<h1 id="DESCRIPTION">DESCRIPTION</h1>
<p>This document describes the differences between the cperl 5.25.2 and the cperl 5.25.3 development releases.</p>
<p>If you are upgrading from an earlier release such as v5.25.1c, first read <a href="/cperl/perl5252cdelta.html">perl5252cdelta</a>, which describes differences between v5.25.1c and v5.25.2c</p>
<h1 id="Notice">Notice</h1>
<p>This cperl version is merged with the perl versions 5.25.3 - 5.25.9.</p>
<p><code>${^ENCODING}</code> and the encoding pragma was not removed, rather fixed instead.</p>
<p>User-type support is greatly enhanced. See <a href="#Type-check-assignments">"Type-check assignments"</a>, <a href="#HvCLASS">"HvCLASS"</a>, <a href="#Type-infer-bless">"Type-infer bless"</a>, and <a href="#Type-infer-subroutine-return-types">"Type-infer subroutine return types"</a>. Before just coretypes were properly checked, now <code>use types</code> adds warnings for all other types.</p>
<p>The still incomplete and slow implementation for the experimental subroutine signatures feature from 5.25.4 was not added, as cperl's signatures are over 50% faster for over a year already and have many more features. In detail the new <code>OP_ARGELEM</code>, <code>OP_ARGDEFELEM</code> and <code>OP_ARGCHECK</code> are not used, cperl still uses <code>OP_SIGNATURE</code> only.</p>
<p>cperl doesn't use the slow Siphash 1-3 as default on 64bit, and no hybrid hash function as introduced with 5.25.8. cperl rather uses a short and fast hash function and other typical hash table optimizations, while adding proper security in the collision resolution instead. A secure PRF (pseudo random function) can never ensure DoS safety for a hash table, contrary to the Siphash paper claims.</p>
<h1 id="Core-Enhancements">Core Enhancements</h1>
<h2 id="No-magic-to-undef-yes-no-placeholder-SVs">No magic to undef/yes/no/placeholder SVs</h2>
<p>cperl silently forbids attaching magic to the four major builtin SV sentinels undef, yes, no and placeholder, which are mostly compared to by pointer. Adding magic to them will break that comparison.</p>
<h2 id="Type-check-assignments">Type-check assignments</h2>
<p>Assignment type violations are now also warned, with <code>use warnings 'types'</code> enabled, previously only signature types were checked. Only signature type violations or <code>use types 'strict'</code> violations are fatal.</p>
<p>Note that the type system is still completely unsound. So far it is only there to catch the most common errors and enable coretype optimizations. cperl only.</p>
<h2 id="HvCLASS">HvCLASS</h2>
<p>With cperl <code>use base</code> or <code>use fields</code> now closes the <code>@ISA</code> and hereby enable compile-time checks and optimizations. The new <code>Internals::HvCLASS</code> function gets or sets the same type for base/field classes as with the upcoming class keyword. See <a href="https://github.com/perl11/cperl/issues/249">[cperl #249]</a>. cperl only.</p>
<h2 id="Type-infer-bless">Type-infer bless</h2>
<p>bless with a constant 2nd argument, the classname, infers this type to the enclosing sub if its the last statement in a body, or to the left-side assignment of a lexical variable. cperl only.</p>
<h2 id="Type-infer-subroutine-return-types">Type-infer subroutine return types</h2>
<p>Subroutine types, either declared or inferred, are now passed through to the type-checker at compile-time. cperl only.</p>
<h2 id="for-qw-is-legal-again">for qw() is legal again</h2>
<p>perl5.14 deprecated and 5.18 started disallowing a <a href="/cperl/perlsyn.html#Statement-Modifiers">for</a> loop with a <a href="/cperl/perlop.html#qw-STRING">qw()</a> list, "qw-as-parens".</p>
<p>The rationale to remove the handy <code>for qw()</code> syntax was technical and trivial to fix. cperl 5.25.3 re-instated it for <code>for</code> loops, but not for the rest. cperl does not insist on the backwards syntax to require <code>(qw( ... ))</code> around the <code>for</code> list.</p>
<pre><code> cperl5.25.3 -e'for qw(a b c) { print $_ }'
perl5.18 -e'for (qw(a b c)) { print $_ }'
perl5.14 -e'for $_ qw(a b c) { print $_ }'
=> Use of qw(...) as parentheses is deprecated at -e line 1
perl5.12 -e'for $_ qw(a b c) { print $_ }'</code></pre>
<p>The new additional cperl syntax is even easier to use than before. See <a href="https://github.com/perl11/cperl/issues/26">[cperl #26]</a>. cperl only.</p>
<h2 id="Perl-can-now-do-default-collation-in-UTF-8-locales-on-platforms-that-support-it">Perl can now do default collation in UTF-8 locales on platforms that support it</h2>
<p>Some platforms natively do a reasonable job of collating and sorting in UTF-8 locales. Perl now works with those. For portability and full control, <a>Unicode::Collate</a> is still recommended, but now you may not need to do anything special to get good-enough results, depending on your application. See <a href="/cperl/perllocale.html#Category-LC_COLLATE:-Collation:-Text-Comparisons-and-Sorting">"Category <code>LC_COLLATE</code>: Collation: Text Comparisons and Sorting" in perllocale</a></p>
<h2 id="Better-locale-collation-of-strings-containing-embedded-NUL-characters">Better locale collation of strings containing embedded <code>NUL</code> characters</h2>
<p>In locales that have multi-level character weights, these are now ignored at the higher priority ones. There are still some gotchas in some strings, though. See <a href="/cperl/perllocale.html#Collation-of-strings-containing-embedded-NUL-characters">"Collation of strings containing embedded <code>NUL</code> characters" in perllocale</a>.</p>
<h2 id="Unescaped-literal-characters-in-regular-expression-patterns-are-no-longer-permissible">Unescaped literal <code>"{"</code> characters in regular expression patterns are no longer permissible</h2>
<p>You have to now say something like <code>"\{"</code> or <code>"[{]"</code> to specify to match a LEFT CURLY BRACKET. This will allow future extensions to the language. This restriction is not enforced, nor are there current plans to enforce it, if the <code>"{"</code> is the first character in the pattern.</p>
<p>These have been deprecated since v5.16, with a deprecation message displayed starting in v5.22.</p>
<h2 id="Literal-control-character-variable-names-are-no-longer-permissible">Literal control character variable names are no longer permissible</h2>
<p>A variable name may no longer contain a literal control character under any circumstances. These previously were allowed in single-character names on ASCII platforms, but have been deprecated there since Perl v5.20. This affects things like <code>$<i>\cT</i></code>, where <i>\cT</i> is a literal control (such as a <code>NAK</code> or <code>NEGATIVE ACKNOWLEDGE</code> character) in the source code.</p>
<h2 id="New-regular-expression-modifier-xx">New regular expression modifier <code>/xx</code></h2>
<p>Specifying two <code>x</code> characters to modify a regular expression pattern does everything that a single one does, but additionally TAB and SPACE characters within a bracketed character class are generally ignored and can be added to improve readability, like <span style="white-space: nowrap;"><code>/[ ^ A-Z d-f p-x ]/xx</code></span>. Details are at <a href="/cperl/perlre.html#x-and-xx">"/x and /xx" in perlre</a>.</p>
<h2 id="NBSP-is-no-longer-permissible-in-N"><code>NBSP</code> is no longer permissible in <code>\N{...}</code></h2>
<p>The name of a character may no longer contain non-breaking spaces. It has been deprecated to do so since Perl v5.22.</p>
<h2 id="CORE-subroutines-for-hash-and-array-functions-callable-via-reference"><code>CORE</code> subroutines for hash and array functions callable via reference</h2>
<p>The hash and array functions in the <code>CORE</code> namespace--<code>keys</code>, <code>each</code>, <code>values</code>, <code>push</code>, <code>pop</code>, <code>shift</code>, <code>unshift</code> and <code>splice</code>--, can now be called with ampersand syntax (<code>&CORE::keys(\%hash</code>) and via reference (<code>my $k = \&CORE::keys; $k->(\%hash)</code>). Previously they could only be used when inlined.</p>
<h2 id="Unicode-9.0-is-now-supported">Unicode 9.0 is now supported</h2>
<p>A list of changes is at <a href="http://www.unicode.org/versions/Unicode9.0.0/">http://www.unicode.org/versions/Unicode9.0.0/</a>. Modules that are shipped with core Perl but not maintained by p5p do not necessarily support Unicode 9.0. <a>Unicode::Normalize</a> does work on 9.0.</p>
<p>Note that some changed UCD database files in 9.0 stayed renamed to their shortened name in perl.</p>
<h2 id="Use-of-p-script-uses-the-improved-Script_Extensions-property">Use of <code>\p{<i>script</i>}</code> uses the improved Script_Extensions property</h2>
<p>Unicode 6.0 introduced an improved form of the Script (<code>sc</code>) property, and called it Script_Extensions (<code>scx</code>). As of now, Perl uses this improved version when a property is specified as just <code>\p{<i>script</i>}</code>. The meaning of compound forms, like <code>\p{sc=<i>script</i>}</code> are unchanged. This should make programs be more accurate when determining if a character is used in a given script, but there is a slight chance of breakage for programs that very specifically needed the old behavior. See <a href="/cperl/perlunicode.html#Scripts">"Scripts" in perlunicode</a>.</p>
<h2 id="Declaring-a-reference-to-a-variable">Declaring a reference to a variable</h2>
<p>As an experimental feature, Perl now allows the referencing operator to come after <a href="/cperl/perlfunc.html#my"><code>my()</code></a>, <a href="/cperl/perlfunc.html#state"><code>state()</code></a>, <a href="/cperl/perlfunc.html#our"><code>our()</code></a>, or <a href="/cperl/gperlfunc.html#local"><code>local()</code></a>. This syntax must be enabled with <code>use feature 'declared_refs'</code>. It is experimental, and will warn by default unless <code>no warnings 'experimental::refaliasing'</code> is in effect. It is intended mainly for use in assignments to references. For example:</p>
<pre><code> use experimental 'refaliasing', 'declared_refs';
my \$a = \$b;</code></pre>
<p>See <a href="/cperl/perlref.html#Assigning-to-References">"Assigning to References" in perlref</a> for slightly more detail.</p>
<p>Note that this still looks much worse than the perl6 bind operator: my $a := $b;</p>
<h2 id="Indented-Here-documents">Indented Here-documents</h2>
<p>This adds a new modifier '~' to here-docs that tells the parser that it should look for /^\s*$DELIM\n/ as the closing delimiter.</p>
<p>These syntaxes are all supported:</p>
<pre><code> <<~EOF;
<<~\EOF;
<<~'EOF';
<<~"EOF";
<<~`EOF`;
<<~ 'EOF';
<<~ "EOF";
<<~ `EOF`;</code></pre>
<p>The '~' modifier will strip, from each line in the here-doc, the same whitespace that appears before the delimiter.</p>
<p>Newlines will be copied as is, and lines that don't include the proper beginning whitespace will cause perl to croak.</p>
<p>For example:</p>
<pre><code> if (1) {
print <<~EOF;
Hello there
EOF
}</code></pre>
<p>prints "Hello there\n" with no leading whitespace.</p>
<h2 id="and-INC">'.' and @INC</h2>
<p>The old cperl <code>-Dfortify_inc</code> security feature was now also introduced by perl5 and renamed to <code>-Ddefault_inc_excludes_dot</code>.</p>
<p>Because the testing and make process for perl modules does not work well with <code>.</code> missing from @INC, cperl and perl5 still support the environment variable <code>PERL_USE_UNSAFE_INC=1</code> which makes Perl behave as it previously did, returning <code>.</code> to @INC in all child processes.</p>
<h2 id="create-a-safer-utf8_hop-called-utf8_hop_safe">create a safer utf8_hop() called utf8_hop_safe()</h2>
<p>Unlike <code>utf8_hop()</code>, <code>utf8_hop_safe()</code> won't navigate before the beginning or after the end of the supplied buffer.</p>
<h2 id="CAPTURE-CAPTURE-and-CAPTURE_ALL">@{^CAPTURE}, %{^CAPTURE}, and %{^CAPTURE_ALL}</h2>
<p><code>@{^CAPTURE}</code> exposes the capture buffers of the last match as an array. So <code>$1</code> is <code>${^CAPTURE}[0]</code>.</p>
<p><code>%{^CAPTURE}</code> is the equivalent to <code>%+</code> (ie named captures)</p>
<p><code>%{^CAPTURE_ALL}</code> is the equivalent to <code>%-</code> (ie all named captures).</p>
<h2 id="Improved-.pmc-loading">Improved .pmc loading</h2>
<p>cperl now sets the correct <i>.pmc</i> filename for <code>__FILE__</code> and <code>CopFILE</code>, when it was loaded from it.</p>
<p>cperl also allows bypassing a <i>.pmc</i> if loaded explicitly via <a href="/cperl/perlfunc.html#do">do</a> and an absolute pathname.</p>
<p>This allows improved <i>.pmc</i> file caching of only selective parts of a module. Such as a method jit, which stores onlt some subs, but not the whole module in it's cache. Hence the Cache logic in the <i>.pmc</i> can now first load the parallel source <i>.pm</i> and then apply the <i>.pmc</i> optimizations. E.g. by loading a LLVM <i>.bc</i> file contents with only some subs.</p>
<p>The impact for existing code is low. If you loaded a .pmc via <code>do "/abspath/module.pm"</code> you need to add now a final "c" explictly: <code>do "/abspath/module.pmc"</code>.</p>
<p>With perl5 upstream those two longstanding PMC bugs made it impossible to use a partial Byte- or JitCache. It also makes it possible to re-instate the old python-like timestamp logic which was removed for pugs 2006 with commit <a href="https://github.com/perl11/cperl/commit/a91233bf4cf6a12df8935c3530a6ca900ca6ca2f">a91233bf4cf</a>.</p>
<p>See <a href="https://github.com/perl11/cperl/issues/244">[cperl #244]</a>. cperl only.</p>
<h1 id="Security">Security</h1>
<h2 id="Storable-stack-overflows">Storable stack overflows</h2>
<p>By reading malcrafted local Storable files or memory you could easily overwrite the local stack with controlled data. With bigger values you could cause an immediate exit, without backtrace or an exception being caught.</p>
<p>Another major stack-overflow fix is for <a href="https://rt.cpan.org/Ticket/Display.html?id=97526">[cpan #97526]</a>, limiting the maximal number of nested hash or arrays to 3000. Cpanel::JSON::XS has it at 512.</p>
<p>Note that p5p doesn't think that these are security issues. <a href="https://rt.perl.org/Public/Bug/Display.html?id=130635">[perl #130635]</a> (even if similar less severe attacks had a CVE and a metasploit module, which cperl detects).</p>
<p>cperl only so far. Uploaded to CPAN, but at this date still unauthorized.</p>
<h2 id="Escaped-colons-and-relative-paths-in-PATH">"Escaped" colons and relative paths in PATH</h2>
<p>On Unix systems, Perl treats any relative paths in the PATH environment variable as tainted when starting a new process. Previously, it was allowing a backslash to escape a colon (unlike the OS), consequently allowing relative paths to be considered safe if the PATH was set to something like <code>/\:.</code>. The check has been fixed to treat <code>.</code> as tainted in that example.</p>
<h2 id="Unicode-identifiers:-Moderately-Restrictive-Level">Unicode identifiers: Moderately Restrictive Level</h2>
<p>cperl as first dynamic scripting language follows the <b>General Security Profile</b> for identifiers in programming languages.</p>
<p><b>Moderately Restrictive</b>: Allow <code>Latin</code> with other Recommended or Aspirational scripts except <code>Cyrillic</code> and <code>Greek</code>. Otherwise, the same as <a href="http://www.unicode.org/reports/tr39/#Identifier_Characters">Highly Restrictive</a>, i.e. allow <code>:Japanese</code>, <code>:Korean</code> and <code>:Hanb</code>.</p>
<p><i>"Some characters are not in modern customary use, and thus implementations may want to exclude them from identifiers. These include characters in historic and obsolete scripts, scripts used mostly liturgically, and regional scripts used only in very small communities or with very limited current usage. The set of characters in Table 4, Candidate Characters for Exclusion from Identifiers provides candidates of these."</i></p>
<p>cperl honors the <a href="http://www.unicode.org/reports/tr31/#Table_Candidate_Characters_for_Exclusion_from_Identifiers">TR31 Candidate Characters for Exclusion from Identifiers</a></p>
<p>I.e. You may still declare those scripts as valid, but they are not automatically allowed, similar to the need to declare mixed scripts.</p>
<pre><code> use utf8;
my $ᭅ = 1; # \x{1b45} BALINESE LETTER KAF SASAK</code></pre>
<p>=> Invalid script Balinese in identifier ᭅ for U+1B45</p>
<pre><code> use utf8 'Balinese';
my $ᭅ = 1; # \x{1b45} BALINESE LETTER KAF SASAK
print "ok";</code></pre>
<p>=></p>
<pre><code> ok</code></pre>
<p>The scripts listed at "Table 6, Aspirational Use Scripts": <code>Canadian_Aboriginal</code>, <code>Miao</code>, <code>Mongolian</code>, <code>Tifinagh</code> and <code>Yi</code> are included, i.e. need not to be declared.</p>
<p>With this restriction we are close to the implementation of the Moderately Restrictive level for identifiers by default. See <a href="http://www.unicode.org/reports/tr39/#General_Security_Profile">http://www.unicode.org/reports/tr39/#General_Security_Profile</a> and <a href="http://www.unicode.org/reports/tr36/#Security_Levels_and_Alerts">http://www.unicode.org/reports/tr36/#Security_Levels_and_Alerts</a>.</p>
<p>With special declarations of the used scripts you can weaken the restriction level to <b>Minimally Restrictive</b>.</p>
<p>Missing for the <b>Moderately Restrictive</b> level are warnings on single-, mixed and whole-script confusables, and warnings on certain incompatible mixed-script pairs such as <b>Greek + Cyrillic</b>.</p>
<p>All utf8 encoded names are checked for wellformed-ness.</p>
<h2 id="chdir-heap-buffer-overflow-on-the-perl-stack"><code>chdir</code> heap-buffer-overflow on the perl stack</h2>
<p>When called without argument it overwrote subsequent stack entries with the easily controllable result. <a href="https://rt.perl.org/Public/Bug/Display.html?id=129130">[perl #129130]</a></p>
<h2 id="Improved-Hash-DDoS-prevention">Improved Hash DDoS prevention</h2>
<p>This is merely a theoretical problem, improving on the previous sleep solution against hash floods. Distributed hashflood attacks could lead to memory exhaustion and denial of service in threaded servers, which would bypass the original FAIL_DELAY-like intrusion detection and mitigation.</p>
<p>First sleep, but if >128 concurrent attacks are detected, exit hard. Use a global hash_slowdos counter. Note that this is also triggered by a 128*8*128 hash collision single source attack (=131072). This is still better, faster and smaller than the java solution to convert the linked list to a tree. We log the attackers and can block them. <a href="https://github.com/perl11/cperl/issues/246">[cperl #246]</a>. cperl only.</p>
<h1 id="Incompatible-Changes">Incompatible Changes</h1>
<h2 id="String-delimiters-that-arent-stand-alone-graphemes-are-illegal">String delimiters that aren't stand-alone graphemes are illegal</h2>
<p>In order for Perl to eventually allow string delimiters to be Unicode grapheme clusters (which look like a single character, but may be a sequence of several ones), we stop allowing a single char delimiter that isn't a grapheme by itself. These are unlikely to exist in actual code, as they would typically display as attached to the character in front of them.</p>
<p>E.g. <code>qr ̂foobar̂;</code> is now an error, it is only deprecated with v5.25.9 upstream and will be illegal in perl5 v5.30. cperl only.</p>
<h2 id="for-state-loops-still-illegal">for state loops still illegal</h2>
<p>perl5.25.3 started allowing state variables in loops. cperl still disallows them.</p>
<pre><code> perl5.25.3 -E'use feature "declared_refs","refaliasing";
for state \$x (\$y) { print $x }'
=> warnings: Declaring references is experimental at -e line 1.
Aliasing via reference is experimental at -e line 1.
cperl5.25.3 -E'use feature "declared_refs","refaliasing";
for state \$x (\$y) { print $x }'
=> error: Missing $ on loop variable at -e line 1.</code></pre>
<p>and without declared_refs:</p>
<pre><code> perl5.25.3 -E'for state $x ($y) { print $x }'
cperl5.25.3 -E'for state $x ($y) { print $x }'
=> error: Missing $ on loop variable at -e line 1.</code></pre>
<h2 id="scalar-hash-return-value-changed"><code>scalar(%hash)</code> return value changed</h2>
<p>The value returned for <code>scalar(%hash)</code> will no longer show information about the buckets allocated in the hash. It will simply return the count of used keys. It is thus equivalent to <code>0+keys(%hash)</code>.</p>
<p>A form of backwards compatibility is provided via <code>Hash::Util::bucket_ratio()</code> which provides the same behavior as <code>scalar(%hash)</code> provided prior to Perl 5.25.</p>
<h2 id="keys-returned-from-an-lvalue-subroutine"><code>keys</code> returned from an lvalue subroutine</h2>
<p><code>keys</code> returned from an lvalue subroutine can no longer be assigned to in list context.</p>
<pre><code> sub foo : lvalue { keys(%INC) }
(foo) = 3; # death
sub bar : lvalue { keys(@_) }
(bar) = 3; # also an error</code></pre>
<p>This makes the lvalue sub case consistent with <code>(keys %hash) = ...</code> and <code>(keys @_) = ...</code>, which are also errors. <a href="https://rt.perl.org/Public/Bug/Display.html?id=128187">[perl #128187]</a></p>
<h1 id="Performance-Enhancements">Performance Enhancements</h1>
<ul>
<li><p>Less initial array elements</p>
<p>The initial size of empty arrays went in cperl from 4 to 2, AvMAX = 1. Array speed is 2-15% faster on perlbench, overall speed the fastest of all so far. Memory win: <0.1%</p>
</li>
<li><p>if length($str) is faster</p>
<p>length in boolean context without get magic doesn't need to calculate the utf8 length, it only needs to check if SvCUR field is empty. And it doesn't need to allocate a new IV for the result, just use the existing sv_yes or sv_no. Analog to <a href="https://github.com/perl11/cperl/issues/245">[cperl #245]</a> for ref. cperl only.</p>
</li>
<li><p>if ref() is faster</p>
<p>ref in boolean context doesn't need to allocate a string. 2-3x faster. See <a href="https://github.com/perl11/cperl/issues/245">[cperl #245]</a> and <a href="https://rt.perl.org/Public/Bug/Display.html?id=78288">[perl #78288]</a> cperl only. in perl5 announced for 5.28.</p>
</li>
<li><p>readline is faster</p>
<p>Reading from a file line-by-line with <code>readline()</code> or <code><></code> should now typically be faster due to a better implementation of the code that searches for the next newline character.</p>
</li>
<li><p><code>$ref1 = $ref2</code> has been optimized.</p>
</li>
<li><p>Array and hash assignment are faster</p>
<p>e.g.</p>
<pre><code> (..., @a) = (...);
(..., %h) = (...);</code></pre>
<p>especially when the RHS is empty.</p>
<p>Note that perl5 hash assignment is still inferior to cperl hash assignment.</p>
</li>
<li><p>Less SvSCREAM</p>
<p>Reduce the number of odd special cases for the SvSCREAM flag.</p>
</li>
<li><p>Better do_vop</p>
<p>Avoid <code>sv_catpvn()</code> in <code>do_vop()</code> when unneeded.</p>
</li>
<li><p>Better COW in Regex</p>
<p>Enhancements in Regex concat COW implementation.</p>
</li>
<li><p>Speed up AV and HV clearing/undeffing.</p>
</li>
<li><p>Converting a single-digit string to a number is now substantially faster.</p>
</li>
<li><p>Simplified split</p>
<p>The internal op implementing the <code>split</code> builtin has been simplified and sped up. Firstly, it no longer requires a subsidiary internal <code>pushre</code> op to do its work. Secondly, code of the form <code>my @x = split(...)</code> is now optimised in the same way as <code>@x = split(...)</code>, and is therefore a few percent faster. This required B::* compiler changes.</p>
</li>
<li><p>Constant fold with barewords</p>
<p>Bareword constant strings are now permitted to take part in constant folding. They were originally exempted from constant folding in August 1999, during the development of Perl 5.6, to ensure that <code>use strict "subs"</code> would still apply to bareword constants. That has now been accomplished a different way, so barewords, like other constants, now gain the performance benefits of constant folding.</p>
<p>This also means that void-context warnings on constant expressions of barewords now report the folded constant operand, rather than the operation; this matches the behaviour for non-bareword constants.</p>
</li>
</ul>
<h1 id="Modules-and-Pragmata">Modules and Pragmata</h1>
<h2 id="New-Modules-and-Pragmata">New Modules and Pragmata</h2>
<dl>
<dt id="types-0.01">types 0.01</dt>
<dd>
<p>Controls the type-checker. See <a>types</a> or <a href="/cperl/perltypes.html">perltypes</a>.</p>
</dd>
</dl>
<h2 id="Updated-Modules-and-Pragmata">Updated Modules and Pragmata</h2>
<dl>
<dt id="Archive-Tar-2.24">Archive-Tar 2.24</dt>
<dd>
<p>Handle tarballs compressed with pbzip2 (RT #119262)</p>
<p>Add missing strict/warnings pragma to Constants.pm</p>
<p>Check for gzip/bzip2 before round tripping gz/bz2 files in tests</p>
</dd>
<dt id="B-C-1.55_02">B-C 1.55_02</dt>
<dd>
<p>Fixes for PERL_OP_PARENT: moresib, sibling, parent.</p>
<p>Fix hints/522_patched.pl dependency on C.so [cpan #120161]</p>
<p>PUSHRE replaced by SPLIT, no xpad_cop_seq, SVpbm_VALID</p>
<p>Improved dl_module_to_sofile without 2nd arg</p>
</dd>
<dt id="B-Debug-1.24">B-Debug 1.24</dt>
<dd>
<p>No changes</p>
</dd>
<dt id="Carp-1.42c">Carp 1.42c</dt>
<dd>
<p>Handle chunk errors phrases</p>
</dd>
<dt id="Compress-Raw-Bzip2-2.070">Compress-Raw-Bzip2 2.070</dt>
<dd>
<p>This was already fixed in cperl since 5.25.2: <a href="https://rt.cpan.org/Ticket/Display.html?id=119005">RT #119005</a>: [PATCH] Wrong APPEND_OUTPUT logic</p>
<p>This was already fixed in cperl since 5.25.2: <a href="https://rt.cpan.org/Ticket/Display.html?id=119141">RT #119141</a>: -Wlogical-not-parentheses</p>
<p>This was already fixed in cperl Dec 8 2015 but lost with the update to 2.069 Mar 28 2016. <a href="https://rt.cpan.org/Ticket/Display.html?id=100817">RT #100817</a> gcc 4.9.2 warning -Wmaybe-uninitialized for cost[3-5] Coped fix for same issue from <a href="https://rt.cpan.org/Ticket/Display.html?id=105647">RT #105647</a></p>
</dd>
<dt id="Compress-Raw-Zlib-2.072">Compress-Raw-Zlib 2.072</dt>
<dd>
<p>Better fix for the cperl APPEND logic.</p>
<p>inflate.c: Fixed -1L compilation warning <a href="https://rt.cpan.org/Ticket/Display.html?id=119580">RT #119580</a></p>
<p>More fixes needed for 2.072 which doesn't even compile.</p>
<p>inflateUndermine: subvert arg conditionally used/unused <a href="https://rt.cpan.org/Ticket/Display.html?id=120207">RT #120207</a></p>
<p>two gcc6-found problems <a href="https://rt.cpan.org/Ticket/Display.html?id=112829">RT #112829</a></p>
<p>fix deflateParams for zlib > 1.2.8 Tests broken with zlib-1.2.10 <a href="https://rt.cpan.org/Ticket/Display.html?id=119762">RT #119762</a></p>
</dd>
<dt id="CPAN-2.17">CPAN 2.17</dt>
<dd>
<p>with cperl support. See <a href="https://github.com/andk/cpanpm/pull/109">https://github.com/andk/cpanpm/pull/109</a></p>
</dd>
<dt id="CPAN-Meta-Requirements">CPAN-Meta-Requirements</dt>
<dd>
<p>Moved from cpan to dist. <a href="https://github.com/perl11/cperl/issues/154">[cperl #154]</a>.</p>
</dd>
<dt id="Cpanel-JSON-XS-3.0227">Cpanel-JSON-XS 3.0227</dt>
<dd>
<p>fix CLONE and END</p>
<p>relax longdouble Gconvert test on ppc64le and aarch64-linux-ld</p>
</dd>
<dt id="DB_File-1.840">DB_File 1.840</dt>
<dd>
<p>unused arg warnings <a href="https://rt.cpan.org/Ticket/Display.html?id=107642">RT #107642</a></p>
<p>The other 2 fixes were already in cperl, plus a fix for reproducible builds.</p>
</dd>
<dt id="DynaLoader-2.07c">DynaLoader 2.07c</dt>
<dd>
<p>Fixed dl_findfile refcounts, "panic: attempt to copy freed scalar" errors.</p>
</dd>
<dt id="Filter-1.57">Filter 1.57</dt>
<dd>
<pre><code> * added 2 more pure tests
* Fixes for . in @INC
* added filter-util.pl to t/
* fixed INSTALLDIRS back to site since 5.12 [gh #2]</code></pre>
</dd>
<dt id="IO-Compress-2.070">IO-Compress 2.070</dt>
<dd>
<p>File::GlobMapper, Fix prototype errors while lazy loading the module <a href="https://rt.cpan.org/Ticket/Display.html?id=117675">RT #117675</a></p>
<p>zipdetails: CVE-2016-1238: avoid loading optional modules from default <a href="https://rt.cpan.org/Ticket/Display.html?id=116538">RT #116538</a></p>
</dd>
<dt id="Math-BigInt-1.999809">Math-BigInt 1.999809</dt>
<dd>
<p>Merged CPAN updates with cperl-specific c3, stricter tests and . in @INC fixes.</p>
</dd>
<dt id="Math-BigInt-FastCalc-0.5006">Math-BigInt-FastCalc 0.5006</dt>
<dd>
<p>Updated from CPAN:</p>
<p>2 new tests files from Math-BigInt.</p>
<p>Math::BigInt::FastCalc is now a subclass of Math::BigInt::Calc, so remove aliases like *Math::BigInt::FastCalc::_xxx = \&Math::BigInt::Calc::_xxx.</p>
<p>Use OO-calls rather than function calls. (i.e slower but overridable)</p>
</dd>
<dt id="Math-BigRat-0.2611">Math-BigRat 0.2611</dt>
<dd>
<p>Updated from CPAN: No functional changes, and the few actual changes in the test lib were for the worse.</p>
</dd>
<dt id="Net-Ping-2.58">Net-Ping 2.58</dt>
<dd>
<p>Stabilized test, geocities.com is down.</p>
<p>Return the port num as 5th return value with ack (jfraire).</p>
</dd>
<dt id="Opcode-1.35_01c">Opcode 1.35_01c</dt>
<dd>
<p>Add avhvswitch op</p>
</dd>
<dt id="Pod-HTML-2.23c">Pod-HTML 2.23c</dt>
<dd>
<p>fix cache races with parallel tests. add the PID to the temp. cache file</p>
</dd>
<dt id="Pod-Simple-4.35c">Pod-Simple 4.35c</dt>
<dd>
<p>Updated from CPAN 3.35: Turn off utf8 warnings when trying to see if a file is UTF-8 or not</p>
<p>Merged with our cperl signature modernizations, tracked at <a href="https://github.com/rurban/pod-simple/tree/cperl">https://github.com/rurban/pod-simple/tree/cperl</a>.</p>
<p>Moved from cpan to dist. <a href="https://github.com/perl11/cperl/issues/154">[cperl #154]</a>.</p>
</dd>
<dt id="POSIX-1.69_01">POSIX 1.69_01</dt>
<dd>
<p>Several defects in making its symbols exportable. <a href="https://rt.perl.org/Public/Bug/Display.html?id=127821">[perl #127821]</a></p>
<p>The <code>POSIX::tmpnam()</code> interface has been removed, see <a href="/cperl/perl5251delta.html#POSIX::tmpnam-has-been-removed">"POSIX::tmpnam() has been removed" in perl5251delta</a>.</p>
<p>Trying to import POSIX subs that have no real implementations (like <code>POSIX::atend()</code>) now fails at import time, instead of waiting until runtime.</p>
</dd>
<dt id="Scalar-List-Util-1.47_01">Scalar-List-Util 1.47_01</dt>
<dd>
<p>Bumped version because upstream is still years behind: lexical $_ support, binary names, various other fixes.</p>
<p>Improved taint test.</p>
</dd>
<dt id="Storable-3.05_03">Storable 3.05_03</dt>
<dd>
<p>From <a href="https://github.com/rurban/Storable">https://github.com/rurban/Storable</a></p>
<p>Fixed 3 null ptr dereferences leading to segfaults. <a href="https://rt.perl.org/Public/Bug/Display.html?id=130098">[perl #130098]</a></p>
<p>Fixed some important security bugs with reading from Storable files or memory, directly controlling the stack (not the perl stack). See <a href="#Storable-stack-overflow-or-exit">"Storable stack overflow or exit"</a>.</p>
<p>Another stack-overflow fix is for <a href="https://rt.cpan.org/Ticket/Display.html?id=97526">[cpan #97526]</a>, limiting the maximal number of nested hash or arrays to 3000. Cpanel::JSON::XS has it at 512.</p>
<p>Fixed up early huge buffer and index support from 3.00c, which was failing with wrong malloc errors due to silently overwrap >2GB. <i>t/huge.t</i> works now correctly. Note that 2 cases are not relevant since v5.25.1c/v5.24.1c anymore as with these releases we limit the maximum number of elements for hashes and arrays, and fail with "Too many elements" before. Bumped up PERL_TEST_MEMORY requirements to 8 and 16 for arrays and hashes. In reality the VMM subsystem will kill the process on perl5 before. <code>$a[9223372036854]=0</code> or <code>%a=(0..4294967296)</code> are easy ways to DoS a perl5 system. Only cperl is safe.</p>
<p>Skip or croak when reading or writing 64bit large objects on 32bit systems.</p>
</dd>
<dt id="Test-Simple">Test-Simple</dt>
<dd>
<p>Add doc and support for optional subtest @args.</p>
<p>Moved from cpan to dist. <a href="https://github.com/perl11/cperl/issues/154">[cperl #154]</a>.</p>
</dd>
<dt id="threads-2.12_01">threads 2.12_01</dt>
<dd>
<p>Upstream 2.12 had no changes (!) We keep our 2 added tests. Improve the modglobal init. Add a longer and more realistic threads DESCRIPTION.</p>
</dd>
<dt id="Thread-Queue-3.12">Thread-Queue 3.12</dt>
<dd>
<p>Calling any of the dequeue methods with COUNT greater than a queue's limit will generate an error.</p>
<p>But still have to keep our test fixes for . in @INC</p>
</dd>
<dt id="threads-shared-1.54">threads-shared 1.54</dt>
<dd>
<p>ifdef clang</p>
</dd>
</dl>
<h2 id="Removed-Modules-and-Pragmata">Removed Modules and Pragmata</h2>
<dl>
<dt id="I18N-Collate-1.02">I18N-Collate 1.02</dt>
<dd>
<p>Compared 8-bit scalar data according to the current locale.</p>
<p>Deprecated with 5.003_06. Its functionality was integrated into the Perl core language in the release 5.003_06.</p>
<p>See <a href="/cperl/perllocale.html">perllocale</a> for further information.</p>
</dd>
</dl>
<h1 id="Documentation">Documentation</h1>
<h2 id="Changes-to-Existing-Documentation">Changes to Existing Documentation</h2>
<h3 id="perlobj"><a href="/cperl/perlobj.html">perlobj</a></h3>
<ul>
<li><p>Added a section on calling methods using their fully qualified names.</p>
</li>
<li><p>Do not discourage manual @ISA.</p>
</li>
</ul>
<h3 id="perlop"><a href="/cperl/perlop.html">perlop</a></h3>
<ul>
<li><p>Clarify behavior single quote regexps.</p>
</li>
</ul>
<h3 id="perllocale"><a href="/cperl/perllocale.html">perllocale</a></h3>
<ul>
<li><p>Some locales aren't compatible with Perl. Note the potential bad consequences of using them.</p>
</li>
</ul>
<h3 id="perldiag"><a href="/cperl/perldiag.html">perldiag</a></h3>
<ul>
<li><p>Deprecations are to be marked with a D. <code>"%s() is deprecated on :utf8 handles"</code> use a deprecation message, and as such, such be marked <code>"(D deprecated)"</code> and not <code>"(W deprecated)"</code>.</p>
</li>
</ul>
<h3 id="perldtrace"><a href="/cperl/perldtrace.html">perldtrace</a></h3>
<ul>
<li><p>Describe which system have Dtrace. Changes in cperl. New examples.</p>
</li>
</ul>
<h3 id="perlguts"><a href="/cperl/perlguts.html">perlguts</a></h3>
<ul>
<li><p>add pTHX_ to magic method examples.</p>
</li>
</ul>
<h3 id="perlvar"><a href="/cperl/perlvar.html">perlvar</a></h3>
<ul>
<li><p>Document @ISA. Was documented other places, not not in perlvar.</p>
</li>
</ul>
<h3 id="perlootut"><a href="/cperl/perlootut.html">perlootut</a></h3>
<ul>
<li><p>Tidy the document.</p>
</li>
<li><p>Mention Moo more.</p>
</li>
</ul>
<h3 id="perlhack"><a href="/cperl/perlhack.html">perlhack</a></h3>
<ul>
<li><p>Document Tab VS Space.</p>
</li>
</ul>
<h3 id="perlre"><a href="/cperl/perlre.html">perlre</a></h3>
<ul>
<li><p>Several minor enhancements to the documentation.</p>
</li>
</ul>
<h3 id="perlinterp"><a href="/cperl/perlinterp.html">perlinterp</a></h3>
<ul>
<li><p><a href="/cperl/perlinterp.html">perlinterp</a> has been expanded to give a more detailed example of how to hunt around in the parser for how a given operator is handled.</p>
</li>
</ul>
<h3 id="perlcall"><a href="/cperl/perlcall.html">perlcall</a></h3>
<ul>
<li><p>Removed redundant <code>dSP</code> from an example.</p>
</li>
</ul>
<h3 id="perltie"><a href="/cperl/perltie.html">perltie</a></h3>
<ul>
<li><p>Updated documentation of <code>scalar(%hash)</code>. See <a href="#scalar-hash-return-value-changed">"scalar(%hash) return value changed"</a> above.</p>
</li>
</ul>
<h3 id="perldata"><a href="/cperl/perldata.html">perldata</a></h3>
<ul>
<li><p>Use of single character variables, with the variable name a non printable character in the range \x80-\xFF is no longer allowed. Update the docs to reflect this.</p>
</li>
<li><p>Updated documentation of <code>scalar(%hash)</code>. See <a href="#scalar-hash-return-value-changed">"scalar(%hash) return value changed"</a> above.</p>
</li>
<li><p>Described the <a href="http://www.unicode.org/reports/tr39/#General_Security_Profile">Moderately Restrictive level</a> for unicode identifiers.</p>
</li>
</ul>
<h3 id="perlexperiment-and-perlref"><a href="/cperl/perlexperiment.html">perlexperiment</a> and <a href="/cperl/perlref.html">perlref</a></h3>
<ul>
<li><p>Documented new feature: See <a href="#Declaring-a-reference-to-a-variable">"Declaring a reference to a variable"</a> above.</p>
<p>Document removed experiments: <a href="/cperl/perlsub.html#Lexical-Subroutines">"Lexical Subroutines" in perlsub</a> is now default. <code>Array and hash container functions accept references</code> removed.</p>
</li>
</ul>
<h3 id="perlfunc"><a href="/cperl/perlfunc.html">perlfunc</a></h3>
<ul>
<li><p>Defined on aggregates is no longer allowed. Perlfunc was still reporting it as deprecated, and that it will be deleted in the future.</p>
</li>
<li><p>Clarified documentation of <a href="/cperl/perlfunc.html#seek"><code>seek()</code></a>, <a href="/cperl/perlfunc.html#tell"><code>tell()</code></a> and <a href="/cperl/perlfunc.html#sysseek"><code>sysseek()</code></a>. <a href="https://rt.perl.org/Public/Bug/Display.html?id=128607">[perl #128607]</a></p>
</li>
<li><p>Removed obsolete documentation of <a href="/cperl/perlfunc.html#study"><code>study()</code></a>.</p>
</li>
</ul>
<h3 id="perlunicode"><a href="/cperl/perlunicode.html">perlunicode</a></h3>
<ul>
<li><p>Documented change to <code>\p{<i>script</i>}</code> to now use the improved Script_Extensions property. See <a href="#Use-of-p-script-uses-the-improved-Script_Extensions-property">"Use of \p{script} uses the improved Script_Extensions property"</a> above.</p>
</li>
<li><p>Updated the text to correspond with changes in Unicode UTS#18, concerning regular expressions, and Perl compatibility with what it says.</p>
</li>
</ul>
<h3 id="perlvar1"><a href="/cperl/perlvar.html">perlvar</a></h3>
<ul>
<li><p>Removed obsolete documentation of <code>${^ENCODING}</code>. See <a href="#ENCODING-has-been-removed">"${^ENCODING} has been removed"</a> above.</p>
</li>
</ul>
<h3 id="perlcommunity"><a href="/cperl/perlcommunity.html">perlcommunity</a></h3>
<ul>
<li><p>All references to Usenet have been removed.</p>
</li>
</ul>
<h3 id="perldelta"><a href="/cperl/perldelta.html">perldelta</a></h3>
<ul>
<li><p>All references to Usenet have been removed.</p>
</li>
</ul>
<h3 id="perllocale1"><a href="/cperl/perllocale.html">perllocale</a></h3>
<ul>
<li><p>Document NUL collation handling.</p>
</li>
</ul>
<h3 id="perlmodinstall"><a href="/cperl/perlmodinstall.html">perlmodinstall</a></h3>
<ul>
<li><p>All references to Usenet have been removed.</p>
</li>
</ul>
<h3 id="perlmodlib"><a href="/cperl/perlmodlib.html">perlmodlib</a></h3>
<ul>
<li><p>Updated the mirror list.</p>
</li>
<li><p>All references to Usenet have been removed.</p>
</li>
</ul>
<h3 id="perlnewmod"><a href="/cperl/perlnewmod.html">perlnewmod</a></h3>
<ul>
<li><p>All references to Usenet have been removed.</p>