This file is indexed.

/usr/share/perl/5.26.1/pod/perl5200delta.pod is in perl-doc 5.26.1-6.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

   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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
=encoding utf8

=head1 NAME

perl5200delta - what is new for perl v5.20.0

=head1 DESCRIPTION

This document describes differences between the 5.18.0 release and the
5.20.0 release.

If you are upgrading from an earlier release such as 5.16.0, first read
L<perl5180delta>, which describes differences between 5.16.0 and 5.18.0.

=head1 Core Enhancements

=head2 Experimental Subroutine signatures

Declarative syntax to unwrap argument list into lexical variables.
C<sub foo ($a,$b) {...}> checks the number of arguments and puts the
arguments into lexical variables.  Signatures are not equivalent to
the existing idiom of C<sub foo { my($a,$b) = @_; ... }>.  Signatures
are only available by enabling a non-default feature, and generate
warnings about being experimental.  The syntactic clash with
prototypes is managed by disabling the short prototype syntax when
signatures are enabled.

See L<perlsub/Signatures> for details.

=head2 C<sub>s now take a C<prototype> attribute

When declaring or defining a C<sub>, the prototype can now be specified inside
of a C<prototype> attribute instead of in parens following the name.

For example, C<sub foo($$){}> could be rewritten as
C<sub foo : prototype($$){}>.

=head2 More consistent prototype parsing

Multiple semicolons in subroutine prototypes have long been tolerated and
treated as a single semicolon.  There was one case where this did not
happen.  A subroutine whose prototype begins with "*" or ";*" can affect
whether a bareword is considered a method name or sub call.  This now
applies also to ";;;*".

Whitespace has long been allowed inside subroutine prototypes, so
C<sub( $ $ )> is equivalent to C<sub($$)>, but until now it was stripped
when the subroutine was parsed.  Hence, whitespace was I<not> allowed in
prototypes set by C<Scalar::Util::set_prototype>.  Now it is permitted,
and the parser no longer strips whitespace.  This means
C<prototype &mysub> returns the original prototype, whitespace and all.

=head2 C<rand> now uses a consistent random number generator

Previously perl would use a platform specific random number generator, varying
between the libc rand(), random() or drand48().

This meant that the quality of perl's random numbers would vary from platform
to platform, from the 15 bits of rand() on Windows to 48-bits on POSIX
platforms such as Linux with drand48().

Perl now uses its own internal drand48() implementation on all platforms.  This
does not make perl's C<rand> cryptographically secure.  [perl #115928]

=head2 New slice syntax

The new C<%hash{...}> and C<%array[...]> syntax returns a list of key/value (or
index/value) pairs.  See L<perldata/"Key/Value Hash Slices">.

=head2 Experimental Postfix Dereferencing

When the C<postderef> feature is in effect, the following syntactical
equivalencies are set up:

  $sref->$*;  # same as ${ $sref }  # interpolates
  $aref->@*;  # same as @{ $aref }  # interpolates
  $href->%*;  # same as %{ $href }
  $cref->&*;  # same as &{ $cref }
  $gref->**;  # same as *{ $gref }

  $aref->$#*; # same as $#{ $aref }

  $gref->*{ $slot }; # same as *{ $gref }{ $slot }

  $aref->@[ ... ];  # same as @$aref[ ... ]  # interpolates
  $href->@{ ... };  # same as @$href{ ... }  # interpolates
  $aref->%[ ... ];  # same as %$aref[ ... ]
  $href->%{ ... };  # same as %$href{ ... }

Those marked as interpolating only interpolate if the associated
C<postderef_qq> feature is also enabled.  This feature is B<experimental> and
will trigger C<experimental::postderef>-category warnings when used, unless
they are suppressed.

For more information, consult L<the Postfix Dereference Syntax section of
perlref|perlref/Postfix Dereference Syntax>.

=head2 Unicode 6.3 now supported

Perl now supports and is shipped with Unicode 6.3 (though Perl may be
recompiled with any previous Unicode release as well).  A detailed list of
Unicode 6.3 changes is at L<http://www.unicode.org/versions/Unicode6.3.0/>.

=head2 New C<\p{Unicode}> regular expression pattern property

This is a synonym for C<\p{Any}> and matches the set of Unicode-defined
code points 0 - 0x10FFFF.

=head2 Better 64-bit support

On 64-bit platforms, the internal array functions now use 64-bit offsets,
allowing Perl arrays to hold more than 2**31 elements, if you have the memory
available.

The regular expression engine now supports strings longer than 2**31
characters.  [perl #112790, #116907]

The functions PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt and
PerlIO_set_ptrcnt now have SSize_t, rather than int, return values and
parameters.

=head2 C<S<use locale>> now works on UTF-8 locales

Until this release, only single-byte locales, such as the ISO 8859
series were supported.  Now, the increasingly common multi-byte UTF-8
locales are also supported.  A UTF-8 locale is one in which the
character set is Unicode and the encoding is UTF-8.  The POSIX
C<LC_CTYPE> category operations (case changing (like C<lc()>, C<"\U">),
and character classification (C<\w>, C<\D>, C<qr/[[:punct:]]/>)) under
such a locale work just as if not under locale, but instead as if under
C<S<use feature 'unicode_strings'>>, except taint rules are followed.
Sorting remains by code point order in this release.  [perl #56820].

=head2 C<S<use locale>> now compiles on systems without locale ability

Previously doing this caused the program to not compile.  Within its
scope the program behaves as if in the "C" locale.  Thus programs
written for platforms that support locales can run on locale-less
platforms without change.  Attempts to change the locale away from the
"C" locale will, of course, fail.

=head2 More locale initialization fallback options

If there was an error with locales during Perl start-up, it immediately
gave up and tried to use the C<"C"> locale.  Now it first tries using
other locales given by the environment variables, as detailed in
L<perllocale/ENVIRONMENT>.  For example, if C<LC_ALL> and C<LANG> are
both set, and using the C<LC_ALL> locale fails, Perl will now try the
C<LANG> locale, and only if that fails, will it fall back to C<"C">.  On
Windows machines, Perl will try, ahead of using C<"C">, the system
default locale if all the locales given by environment variables fail.

=head2 C<-DL> runtime option now added for tracing locale setting

This is designed for Perl core developers to aid in field debugging bugs
regarding locales.

=head2 B<-F> now implies B<-a> and B<-a> implies B<-n>

Previously B<-F> without B<-a> was a no-op, and B<-a> without B<-n> or B<-p>
was a no-op, with this change, if you supply B<-F> then both B<-a> and B<-n>
are implied and if you supply B<-a> then B<-n> is implied.

You can still use B<-p> for its extra behaviour. [perl #116190]

=head2 $a and $b warnings exemption

The special variables $a and $b, used in C<sort>, are now exempt from "used
once" warnings, even where C<sort> is not used.  This makes it easier for
CPAN modules to provide functions using $a and $b for similar purposes.
[perl #120462]

=head1 Security

=head2 Avoid possible read of free()d memory during parsing

It was possible that free()d memory could be read during parsing in the unusual
circumstance of the Perl program ending with a heredoc and the last line of the
file on disk having no terminating newline character.  This has now been fixed.

=head1 Incompatible Changes

=head2 C<do> can no longer be used to call subroutines

The C<do SUBROUTINE(LIST)> form has resulted in a deprecation warning
since Perl v5.0.0, and is now a syntax error.

=head2 Quote-like escape changes

The character after C<\c> in a double-quoted string ("..." or qq(...))
or regular expression must now be a printable character and may not be
C<{>.

A literal C<{> after C<\B> or C<\b> is now fatal.

These were deprecated in perl v5.14.0.

=head2 Tainting happens under more circumstances; now conforms to documentation

This affects regular expression matching and changing the case of a
string (C<lc>, C<"\U">, I<etc>.) within the scope of C<use locale>.
The result is now tainted based on the operation, no matter what the
contents of the string were, as the documentation (L<perlsec>,
L<perllocale/SECURITY>) indicates it should.  Previously, for the case
change operation, if the string contained no characters whose case
change could be affected by the locale, the result would not be tainted.
For example, the result of C<uc()> on an empty string or one containing
only above-Latin1 code points is now tainted, and wasn't before.  This
leads to more consistent tainting results.  Regular expression patterns
taint their non-binary results (like C<$&>, C<$2>) if and only if the
pattern contains elements whose matching depends on the current
(potentially tainted) locale.  Like the case changing functions, the
actual contents of the string being matched now do not matter, whereas
formerly it did.  For example, if the pattern contains a C<\w>, the
results will be tainted even if the match did not have to use that
portion of the pattern to succeed or fail, because what a C<\w> matches
depends on locale.  However, for example, a C<.> in a pattern will not
enable tainting, because the dot matches any single character, and what
the current locale is doesn't change in any way what matches and what
doesn't.

=head2 C<\p{}>, C<\P{}> matching has changed for non-Unicode code
points.

C<\p{}> and C<\P{}> are defined by Unicode only on Unicode-defined code
points (C<U+0000> through C<U+10FFFF>).  Their behavior on matching
these legal Unicode code points is unchanged, but there are changes for
code points C<0x110000> and above.  Previously, Perl treated the result
of matching C<\p{}> and C<\P{}> against these as C<undef>, which
translates into "false".  For C<\P{}>, this was then complemented into
"true".  A warning was supposed to be raised when this happened.
However, various optimizations could prevent the warning, and the
results were often counter-intuitive, with both a match and its seeming
complement being false.  Now all non-Unicode code points are treated as
typical unassigned Unicode code points.  This generally is more
Do-What-I-Mean.  A warning is raised only if the results are arguably
different from a strict Unicode approach, and from what Perl used to do.
Code that needs to be strictly Unicode compliant can make this warning
fatal, and then Perl always raises the warning.

Details are in L<perlunicode/Beyond Unicode code points>.

=head2 C<\p{All}> has been expanded to match all possible code points

The Perl-defined regular expression pattern element C<\p{All}>, unused
on CPAN, used to match just the Unicode code points; now it matches all
possible code points; that is, it is equivalent to C<qr/./s>.  Thus
C<\p{All}> is no longer synonymous with C<\p{Any}>, which continues to
match just the Unicode code points, as Unicode says it should.

=head2 Data::Dumper's output may change

Depending on the data structures dumped and the settings set for
Data::Dumper, the dumped output may have changed from previous
versions.

If you have tests that depend on the exact output of Data::Dumper,
they may fail.

To avoid this problem in your code, test against the data structure
from evaluating the dumped structure, instead of the dump itself.

=head2 Locale decimal point character no longer leaks outside of S<C<use locale>> scope

This is actually a bug fix, but some code has come to rely on the bug
being present, so this change is listed here.  The current locale that
the program is running under is not supposed to be visible to Perl code
except within the scope of a S<C<use locale>>.  However, until now under
certain circumstances, the character used for a decimal point (often a
comma) leaked outside the scope.  If your code is affected by this
change, simply add a S<C<use locale>>.

=head2 Assignments of Windows sockets error codes to $! now prefer F<errno.h> values over WSAGetLastError() values

In previous versions of Perl, Windows sockets error codes as returned by
WSAGetLastError() were assigned to $!, and some constants such as ECONNABORTED,
not in F<errno.h> in VC++ (or the various Windows ports of gcc) were defined to
corresponding WSAE* values to allow $! to be tested against the E* constants
exported by L<Errno> and L<POSIX>.

This worked well until VC++ 2010 and later, which introduced new E* constants
with values E<gt> 100 into F<errno.h>, including some being (re)defined by perl
to WSAE* values.  That caused problems when linking XS code against other
libraries which used the original definitions of F<errno.h> constants.

To avoid this incompatibility, perl now maps WSAE* error codes to E* values
where possible, and assigns those values to $!.  The E* constants exported by
L<Errno> and L<POSIX> are updated to match so that testing $! against them,
wherever previously possible, will continue to work as expected, and all E*
constants found in F<errno.h> are now exported from those modules with their
original F<errno.h> values.

In order to avoid breakage in existing Perl code which assigns WSAE* values to
$!, perl now intercepts the assignment and performs the same mapping to E*
values as it uses internally when assigning to $! itself.

However, one backwards-incompatibility remains: existing Perl code which
compares $! against the numeric values of the WSAE* error codes that were
previously assigned to $! will now be broken in those cases where a
corresponding E* value has been assigned instead.  This is only an issue for
those E* values E<lt> 100, which were always exported from L<Errno> and
L<POSIX> with their original F<errno.h> values, and therefore could not be used
for WSAE* error code tests (e.g. WSAEINVAL is 10022, but the corresponding
EINVAL is 22).  (E* values E<gt> 100, if present, were redefined to WSAE*
values anyway, so compatibility can be achieved by using the E* constants,
which will work both before and after this change, albeit using different
numeric values under the hood.)

=head2 Functions C<PerlIO_vsprintf> and C<PerlIO_sprintf> have been removed

These two functions, undocumented, unused in CPAN, and problematic, have been
removed.

=head1 Deprecations

=head2 The C</\C/> character class

The C</\C/> regular expression character class is deprecated. From perl
5.22 onwards it will generate a warning, and from perl 5.24 onwards it
will be a regular expression compiler error. If you need to examine the
individual bytes that make up a UTF8-encoded character, then use
C<utf8::encode()> on the string (or a copy) first.

=head2 Literal control characters in variable names

This deprecation affects things like $\cT, where \cT is a literal control (such
as a C<NAK> or C<NEGATIVE ACKNOWLEDGE> character) in
the source code.  Surprisingly, it appears that originally this was intended as
the canonical way of accessing variables like $^T, with the caret form only
being added as an alternative.

The literal control form is being deprecated for two main reasons.  It has what
are likely unfixable bugs, such as $\cI not working as an alias for $^I, and
their usage not being portable to non-ASCII platforms: While $^T will work
everywhere, \cT is whitespace in EBCDIC.  [perl #119123]

=head2 References to non-integers and non-positive integers in C<$/>

Setting C<$/> to a reference to zero or a reference to a negative integer is
now deprecated, and will behave B<exactly> as though it was set to C<undef>.
If you want slurp behavior set C<$/> to C<undef> explicitly.

Setting C<$/> to a reference to a non integer is now forbidden and will
throw an error. Perl has never documented what would happen in this
context and while it used to behave the same as setting C<$/> to
the address of the references in future it may behave differently, so we
have forbidden this usage.

=head2 Character matching routines in POSIX

Use of any of these functions in the C<POSIX> module is now deprecated:
C<isalnum>, C<isalpha>, C<iscntrl>, C<isdigit>, C<isgraph>, C<islower>,
C<isprint>, C<ispunct>, C<isspace>, C<isupper>, and C<isxdigit>.  The
functions are buggy and don't work on UTF-8 encoded strings.  See their
entries in L<POSIX> for more information.

A warning is raised on the first call to any of them from each place in
the code that they are called.  (Hence a repeated statement in a loop
will raise just the one warning.)

=head2 Interpreter-based threads are now I<discouraged>

The "interpreter-based threads" provided by Perl are not the fast, lightweight
system for multitasking that one might expect or hope for.  Threads are
implemented in a way that make them easy to misuse.  Few people know how to
use them correctly or will be able to provide help.

The use of interpreter-based threads in perl is officially
L<discouraged|perlpolicy/discouraged>.

=head2 Module removals

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.

The core versions of these modules will now issue C<"deprecated">-category
warnings to alert you to this fact.  To silence these deprecation warnings,
install the modules in question from CPAN.

Note that the planned removal of these modules from core does not reflect a
judgement about the quality of the code and should not be taken as a suggestion
that their use be halted.  Their disinclusion from core primarily hinges on
their necessity to bootstrapping a fully functional, CPAN-capable Perl
installation, not on concerns over their design.

=over

=item L<CGI> and its associated CGI:: packages

=item L<inc::latest>

=item L<Package::Constants>

=item L<Module::Build> and its associated Module::Build:: packages

=back

=head2 Utility removals

The following utilities will be removed from the core distribution in a
future release, and will at that time need to be installed from CPAN.

=over 4

=item L<find2perl>

=item L<s2p>

=item L<a2p>

=back

=head1 Performance Enhancements

=over 4

=item *

Perl has a new copy-on-write mechanism that avoids the need to copy the
internal string buffer when assigning from one scalar to another. This
makes copying large strings appear much faster.  Modifying one of the two
(or more) strings after an assignment will force a copy internally. This
makes it unnecessary to pass strings by reference for efficiency.

This feature was already available in 5.18.0, but wasn't enabled by
default. It is the default now, and so you no longer need build perl with
the F<Configure> argument:

    -Accflags=-DPERL_NEW_COPY_ON_WRITE

It can be disabled (for now) in a perl build with:

    -Accflags=-DPERL_NO_COW

On some operating systems Perl can be compiled in such a way that any
attempt to modify string buffers shared by multiple SVs will crash.  This
way XS authors can test that their modules handle copy-on-write scalars
correctly.  See L<perlguts/"Copy on Write"> for detail.

=item *

Perl has an optimizer for regular expression patterns.  It analyzes the pattern
to find things such as the minimum length a string has to be to match, etc.  It
now better handles code points that are above the Latin1 range.

=item *

Executing a regex that contains the C<^> anchor (or its variant under the
C</m> flag) has been made much faster in several situations.

=item *

Precomputed hash values are now used in more places during method lookup.

=item *

Constant hash key lookups (C<$hash{key}> as opposed to C<$hash{$key}>) have
long had the internal hash value computed at compile time, to speed up
lookup.  This optimisation has only now been applied to hash slices as
well.

=item *

Combined C<and> and C<or> operators in void context, like those
generated for C<< unless ($a && $b) >> and C<< if ($a || b) >> now
short circuit directly to the end of the statement. [perl #120128]

=item *

In certain situations, when C<return> is the last statement in a subroutine's
main scope, it will be optimized out. This means code like:

  sub baz { return $cat; }

will now behave like:

  sub baz { $cat; }

which is notably faster.

[perl #120765]

=item *

Code like:

  my $x; # or @x, %x
  my $y;

is now optimized to:

  my ($x, $y);

In combination with the L<padrange optimization introduced in
v5.18.0|perl5180delta/Internal Changes>, this means longer uninitialized my
variable statements are also optimized, so:

  my $x; my @y; my %z;

becomes:

  my ($x, @y, %z);

[perl #121077]

=item *

The creation of certain sorts of lists, including array and hash slices, is now
faster.

=item *

The optimisation for arrays indexed with a small constant integer is now
applied for integers in the range -128..127, rather than 0..255. This should
speed up Perl code using expressions like C<$x[-1]>, at the expense of
(presumably much rarer) code using expressions like C<$x[200]>.

=item *

The first iteration over a large hash (using C<keys> or C<each>) is now
faster. This is achieved by preallocating the hash's internal iterator
state, rather than lazily creating it when the hash is first iterated. (For
small hashes, the iterator is still created only when first needed. The
assumption is that small hashes are more likely to be used as objects, and
therefore never allocated. For large hashes, that's less likely to be true,
and the cost of allocating the iterator is swamped by the cost of allocating
space for the hash itself.)

=item *

When doing a global regex match on a string that came from the C<readline>
or C<E<lt>E<gt>> operator, the data is no longer copied unnecessarily.
[perl #121259]

=item *

Dereferencing (as in C<$obj-E<gt>[0]> or C<$obj-E<gt>{k}>) is now faster
when C<$obj> is an instance of a class that has overloaded methods, but
doesn't overload any of the dereferencing methods C<@{}>, C<%{}>, and so on.

=item *

Perl's optimiser no longer skips optimising code that follows certain
C<eval {}> expressions (including those with an apparent infinite loop).

=item *

The implementation now does a better job of avoiding meaningless work at
runtime. Internal effect-free "null" operations (created as a side-effect of
parsing Perl programs) are normally deleted during compilation. That
deletion is now applied in some situations that weren't previously handled.

=item *

Perl now does less disk I/O when dealing with Unicode properties that cover
up to three ranges of consecutive code points.

=back

=head1 Modules and Pragmata

=head2 New Modules and Pragmata

=over 4

=item *

L<experimental> 0.007 has been added to the Perl core.

=item *

L<IO::Socket::IP> 0.29 has been added to the Perl core.

=back

=head2 Updated Modules and Pragmata

=over 4

=item *

L<Archive::Tar> has been upgraded from version 1.90 to 1.96.

=item *

L<arybase> has been upgraded from version 0.06 to 0.07.

=item *

L<Attribute::Handlers> has been upgraded from version 0.94 to 0.96.

=item *

L<attributes> has been upgraded from version 0.21 to 0.22.

=item *

L<autodie> has been upgraded from version 2.13 to 2.23.

=item *

L<AutoLoader> has been upgraded from version 5.73 to 5.74.

=item *

L<autouse> has been upgraded from version 1.07 to 1.08.

=item *

L<B> has been upgraded from version 1.42 to 1.48.

=item *

L<B::Concise> has been upgraded from version 0.95 to 0.992.

=item *

L<B::Debug> has been upgraded from version 1.18 to 1.19.

=item *

L<B::Deparse> has been upgraded from version 1.20 to 1.26.

=item *

L<base> has been upgraded from version 2.18 to 2.22.

=item *

L<Benchmark> has been upgraded from version 1.15 to 1.18.

=item *

L<bignum> has been upgraded from version 0.33 to 0.37.

=item *

L<Carp> has been upgraded from version 1.29 to 1.3301.

=item *

L<CGI> has been upgraded from version 3.63 to 3.65.
NOTE: L<CGI> is deprecated and may be removed from a future version of Perl.

=item *

L<charnames> has been upgraded from version 1.36 to 1.40.

=item *

L<Class::Struct> has been upgraded from version 0.64 to 0.65.

=item *

L<Compress::Raw::Bzip2> has been upgraded from version 2.060 to 2.064.

=item *

L<Compress::Raw::Zlib> has been upgraded from version 2.060 to 2.065.

=item *

L<Config::Perl::V> has been upgraded from version 0.17 to 0.20.

=item *

L<constant> has been upgraded from version 1.27 to 1.31.

=item *

L<CPAN> has been upgraded from version 2.00 to 2.05.

=item *

L<CPAN::Meta> has been upgraded from version 2.120921 to 2.140640.

=item *

L<CPAN::Meta::Requirements> has been upgraded from version 2.122 to 2.125.

=item *

L<CPAN::Meta::YAML> has been upgraded from version 0.008 to 0.012.

=item *

L<Data::Dumper> has been upgraded from version 2.145 to 2.151.

=item *

L<DB> has been upgraded from version 1.04 to 1.07.

=item *

L<DB_File> has been upgraded from version 1.827 to 1.831.

=item *

L<DBM_Filter> has been upgraded from version 0.05 to 0.06.

=item *

L<deprecate> has been upgraded from version 0.02 to 0.03.

=item *

L<Devel::Peek> has been upgraded from version 1.11 to 1.16.

=item *

L<Devel::PPPort> has been upgraded from version 3.20 to 3.21.

=item *

L<diagnostics> has been upgraded from version 1.31 to 1.34.

=item *

L<Digest::MD5> has been upgraded from version 2.52 to 2.53.

=item *

L<Digest::SHA> has been upgraded from version 5.84 to 5.88.

=item *

L<DynaLoader> has been upgraded from version 1.18 to 1.25.

=item *

L<Encode> has been upgraded from version 2.49 to 2.60.

=item *

L<encoding> has been upgraded from version 2.6_01 to 2.12.

=item *

L<English> has been upgraded from version 1.06 to 1.09.

C<$OLD_PERL_VERSION> was added as an alias of C<$]>.

=item *

L<Errno> has been upgraded from version 1.18 to 1.20_03.

=item *

L<Exporter> has been upgraded from version 5.68 to 5.70.

=item *

L<ExtUtils::CBuilder> has been upgraded from version 0.280210 to 0.280216.

=item *

L<ExtUtils::Command> has been upgraded from version 1.17 to 1.18.

=item *

L<ExtUtils::Embed> has been upgraded from version 1.30 to 1.32.

=item *

L<ExtUtils::Install> has been upgraded from version 1.59 to 1.67.

=item *

L<ExtUtils::MakeMaker> has been upgraded from version 6.66 to 6.98.

=item *

L<ExtUtils::Miniperl> has been upgraded from version  to 1.01.

=item *

L<ExtUtils::ParseXS> has been upgraded from version 3.18 to 3.24.

=item *

L<ExtUtils::Typemaps> has been upgraded from version 3.19 to 3.24.

=item *

L<ExtUtils::XSSymSet> has been upgraded from version 1.2 to 1.3.

=item *

L<feature> has been upgraded from version 1.32 to 1.36.

=item *

L<fields> has been upgraded from version 2.16 to 2.17.

=item *

L<File::Basename> has been upgraded from version 2.84 to 2.85.

=item *

L<File::Copy> has been upgraded from version 2.26 to 2.29.

=item *

L<File::DosGlob> has been upgraded from version 1.10 to 1.12.

=item *

L<File::Fetch> has been upgraded from version 0.38 to 0.48.

=item *

L<File::Find> has been upgraded from version 1.23 to 1.27.

=item *

L<File::Glob> has been upgraded from version 1.20 to 1.23.

=item *

L<File::Spec> has been upgraded from version 3.40 to 3.47.

=item *

L<File::Temp> has been upgraded from version 0.23 to 0.2304.

=item *

L<FileCache> has been upgraded from version 1.08 to 1.09.

=item *

L<Filter::Simple> has been upgraded from version 0.89 to 0.91.

=item *

L<Filter::Util::Call> has been upgraded from version 1.45 to 1.49.

=item *

L<Getopt::Long> has been upgraded from version 2.39 to 2.42.

=item *

L<Getopt::Std> has been upgraded from version 1.07 to 1.10.

=item *

L<Hash::Util::FieldHash> has been upgraded from version 1.10 to 1.15.

=item *

L<HTTP::Tiny> has been upgraded from version 0.025 to 0.043.

=item *

L<I18N::Langinfo> has been upgraded from version 0.10 to 0.11.

=item *

L<I18N::LangTags> has been upgraded from version 0.39 to 0.40.

=item *

L<if> has been upgraded from version 0.0602 to 0.0603.

=item *

L<inc::latest> has been upgraded from version 0.4003 to 0.4205.
NOTE: L<inc::latest> is deprecated and may be removed from a future version of Perl.

=item *

L<integer> has been upgraded from version 1.00 to 1.01.

=item *

L<IO> has been upgraded from version 1.28 to 1.31.

=item *

L<IO::Compress::Gzip> and friends have been upgraded from version 2.060 to
2.064.

=item *

L<IPC::Cmd> has been upgraded from version 0.80 to 0.92.

=item *

L<IPC::Open3> has been upgraded from version 1.13 to 1.16.

=item *

L<IPC::SysV> has been upgraded from version 2.03 to 2.04.

=item *

L<JSON::PP> has been upgraded from version 2.27202 to 2.27203.

=item *

L<List::Util> has been upgraded from version 1.27 to 1.38.

=item *

L<locale> has been upgraded from version 1.02 to 1.03.

=item *

L<Locale::Codes> has been upgraded from version 3.25 to 3.30.

=item *

L<Locale::Maketext> has been upgraded from version 1.23 to 1.25.

=item *

L<Math::BigInt> has been upgraded from version 1.9991 to 1.9993.

=item *

L<Math::BigInt::FastCalc> has been upgraded from version 0.30 to 0.31.

=item *

L<Math::BigRat> has been upgraded from version 0.2604 to 0.2606.

=item *

L<MIME::Base64> has been upgraded from version 3.13 to 3.14.

=item *

L<Module::Build> has been upgraded from version 0.4003 to 0.4205.
NOTE: L<Module::Build> is deprecated and may be removed from a future version of Perl.

=item *

L<Module::CoreList> has been upgraded from version 2.89 to 3.10.

=item *

L<Module::Load> has been upgraded from version 0.24 to 0.32.

=item *

L<Module::Load::Conditional> has been upgraded from version 0.54 to 0.62.

=item *

L<Module::Metadata> has been upgraded from version 1.000011 to 1.000019.

=item *

L<mro> has been upgraded from version 1.11 to 1.16.

=item *

L<Net::Ping> has been upgraded from version 2.41 to 2.43.

=item *

L<Opcode> has been upgraded from version 1.25 to 1.27.

=item *

L<Package::Constants> has been upgraded from version 0.02 to 0.04.
NOTE: L<Package::Constants> is deprecated and may be removed from a future version of Perl.

=item *

L<Params::Check> has been upgraded from version 0.36 to 0.38.

=item *

L<parent> has been upgraded from version 0.225 to 0.228.

=item *

L<Parse::CPAN::Meta> has been upgraded from version 1.4404 to 1.4414.

=item *

L<Perl::OSType> has been upgraded from version 1.003 to 1.007.

=item *

L<perlfaq> has been upgraded from version 5.0150042 to 5.0150044.

=item *

L<PerlIO> has been upgraded from version 1.07 to 1.09.

=item *

L<PerlIO::encoding> has been upgraded from version 0.16 to 0.18.

=item *

L<PerlIO::scalar> has been upgraded from version 0.16 to 0.18.

=item *

L<PerlIO::via> has been upgraded from version 0.12 to 0.14.

=item *

L<Pod::Escapes> has been upgraded from version 1.04 to 1.06.

=item *

L<Pod::Functions> has been upgraded from version 1.06 to 1.08.

=item *

L<Pod::Html> has been upgraded from version 1.18 to 1.21.

=item *

L<Pod::Parser> has been upgraded from version 1.60 to 1.62.

=item *

L<Pod::Perldoc> has been upgraded from version 3.19 to 3.23.

=item *

L<Pod::Usage> has been upgraded from version 1.61 to 1.63.

=item *

L<POSIX> has been upgraded from version 1.32 to 1.38_03.

=item *

L<re> has been upgraded from version 0.23 to 0.26.

=item *

L<Safe> has been upgraded from version 2.35 to 2.37.

=item *

L<Scalar::Util> has been upgraded from version 1.27 to 1.38.

=item *

L<SDBM_File> has been upgraded from version 1.09 to 1.11.

=item *

L<Socket> has been upgraded from version 2.009 to 2.013.

=item *

L<Storable> has been upgraded from version 2.41 to 2.49.

=item *

L<strict> has been upgraded from version 1.07 to 1.08.

=item *

L<subs> has been upgraded from version 1.01 to 1.02.

=item *

L<Sys::Hostname> has been upgraded from version 1.17 to 1.18.

=item *

L<Sys::Syslog> has been upgraded from version 0.32 to 0.33.

=item *

L<Term::Cap> has been upgraded from version 1.13 to 1.15.

=item *

L<Term::ReadLine> has been upgraded from version 1.12 to 1.14.

=item *

L<Test::Harness> has been upgraded from version 3.26 to 3.30.

=item *

L<Test::Simple> has been upgraded from version 0.98 to 1.001002.

=item *

L<Text::ParseWords> has been upgraded from version 3.28 to 3.29.

=item *

L<Text::Tabs> has been upgraded from version 2012.0818 to 2013.0523.

=item *

L<Text::Wrap> has been upgraded from version 2012.0818 to 2013.0523.

=item *

L<Thread> has been upgraded from version 3.02 to 3.04.

=item *

L<Thread::Queue> has been upgraded from version 3.02 to 3.05.

=item *

L<threads> has been upgraded from version 1.86 to 1.93.

=item *

L<threads::shared> has been upgraded from version 1.43 to 1.46.

=item *

L<Tie::Array> has been upgraded from version 1.05 to 1.06.

=item *

L<Tie::File> has been upgraded from version 0.99 to 1.00.

=item *

L<Tie::Hash> has been upgraded from version 1.04 to 1.05.

=item *

L<Tie::Scalar> has been upgraded from version 1.02 to 1.03.

=item *

L<Tie::StdHandle> has been upgraded from version 4.3 to 4.4.

=item *

L<Time::HiRes> has been upgraded from version 1.9725 to 1.9726.

=item *

L<Time::Piece> has been upgraded from version 1.20_01 to 1.27.

=item *

L<Unicode::Collate> has been upgraded from version 0.97 to 1.04.

=item *

L<Unicode::Normalize> has been upgraded from version 1.16 to 1.17.

=item *

L<Unicode::UCD> has been upgraded from version 0.51 to 0.57.

=item *

L<utf8> has been upgraded from version 1.10 to 1.13.

=item *

L<version> has been upgraded from version 0.9902 to 0.9908.

=item *

L<vmsish> has been upgraded from version 1.03 to 1.04.

=item *

L<warnings> has been upgraded from version 1.18 to 1.23.

=item *

L<Win32> has been upgraded from version 0.47 to 0.49.

=item *

L<XS::Typemap> has been upgraded from version 0.10 to 0.13.

=item *

L<XSLoader> has been upgraded from version 0.16 to 0.17.

=back

=head1 Documentation

=head2 New Documentation

=head3 L<perlrepository>

This document was removed (actually, renamed L<perlgit> and given a major
overhaul) in Perl v5.14, causing Perl documentation websites to show the now
out of date version in Perl v5.12 as the latest version.  It has now been
restored in stub form, directing readers to current information.

=head2 Changes to Existing Documentation

=head3 L<perldata>

=over 4

=item *

New sections have been added to document the new index/value array slice and
key/value hash slice syntax.

=back

=head3 L<perldebguts>

=over 4

=item *

The C<DB::goto> and C<DB::lsub> debugger subroutines are now documented.  [perl
#77680]

=back

=head3 L<perlexperiment>

=over

=item *

C<\s> matching C<\cK> is marked experimental.

=item *

ithreads were accepted in v5.8.0 (but are discouraged as of v5.20.0).

=item *

Long doubles are not considered experimental.

=item *

Code in regular expressions, regular expression backtracking verbs,
and lvalue subroutines are no longer listed as experimental.  (This
also affects L<perlre> and L<perlsub>.)

=back

=head3 L<perlfunc>

=over

=item *

C<chop> and C<chomp> now note that they can reset the hash iterator.

=item *

C<exec>'s handling of arguments is now more clearly documented.

=item *

C<eval EXPR> now has caveats about expanding floating point numbers in some
locales.

=item *

C<goto EXPR> is now documented to handle an expression that evalutes to a
code reference as if it was C<goto &$coderef>.  This behavior is at least ten
years old.

=item *

Since Perl v5.10, it has been possible for subroutines in C<@INC> to return
a reference to a scalar holding initial source code to prepend to the file.
This is now documented.

=item *

The documentation of C<ref> has been updated to recommend the use of
C<blessed>, C<isa> and C<reftype> when dealing with references to blessed
objects.

=back

=head3 L<perlguts>

=over 4

=item *

Numerous minor changes have been made to reflect changes made to the perl
internals in this release.

=item *

New sections on L<Read-Only Values|perlguts/"Read-Only Values"> and
L<Copy on Write|perlguts/"Copy on Write"> have been added.

=back

=head3 L<perlhack>

=over 4

=item *

The L<Super Quick Patch Guide|perlhack/SUPER QUICK PATCH GUIDE> section has
been updated.

=back

=head3 L<perlhacktips>

=over 4

=item *

The documentation has been updated to include some more examples of C<gdb>
usage.

=back

=head3 L<perllexwarn>

=over 4

=item *

The L<perllexwarn> documentation used to describe the hierarchy of warning
categories understood by the L<warnings> pragma. That description has now
been moved to the L<warnings> documentation itself, leaving L<perllexwarn>
as a stub that points to it. This change consolidates all documentation for
lexical warnings in a single place.

=back

=head3 L<perllocale>

=over

=item *

The documentation now mentions F<fc()> and C<\F>, and includes many
clarifications and corrections in general.

=back

=head3 L<perlop>

=over 4

=item *

The language design of Perl has always called for monomorphic operators.
This is now mentioned explicitly.

=back

=head3 L<perlopentut>

=over 4

=item *

The C<open> tutorial has been completely rewritten by Tom Christiansen, and now
focuses on covering only the basics, rather than providing a comprehensive
reference to all things openable.  This rewrite came as the result of a
vigorous discussion on perl5-porters kicked off by a set of improvements
written by Alexander Hartmaier to the existing L<perlopentut>.  A "more than
you ever wanted to know about C<open>" document may follow in subsequent
versions of perl.

=back

=head3 L<perlre>

=over 4

=item *

The fact that the regexp engine makes no effort to call (?{}) and (??{})
constructs any specified number of times (although it will basically DWIM
in case of a successful match) has been documented.

=item *

The C</r> modifier (for non-destructive substitution) is now documented. [perl
#119151]

=item *

The documentation for C</x> and C<(?# comment)> has been expanded and clarified.

=back

=head3 L<perlreguts>

=over 4

=item *

The documentation has been updated in the light of recent changes to
F<regcomp.c>.

=back

=head3 L<perlsub>

=over 4

=item *

The need to predeclare recursive functions with prototypes in order for the
prototype to be honoured in the recursive call is now documented. [perl #2726]

=item *

A list of subroutine names used by the perl implementation is now included.
[perl #77680]

=back

=head3 L<perltrap>

=over 4

=item *

There is now a L<JavaScript|perltrap/JavaScript Traps> section.

=back

=head3 L<perlunicode>

=over 4

=item *

The documentation has been updated to reflect C<Bidi_Class> changes in
Unicode 6.3.

=back

=head3 L<perlvar>

=over 4

=item *

A new section explaining the performance issues of $`, $& and $', including
workarounds and changes in different versions of Perl, has been added.

=item *

Three L<English> variable names which have long been documented but do not
actually exist have been removed from the documentation.  These were
C<$OLD_PERL_VERSION>, C<$OFMT>, and C<$ARRAY_BASE>.

(Actually, C<OLD_PERL_VERSION> I<does> exist, starting with this revision, but
remained undocumented until perl 5.22.0.)

=back

=head3 L<perlxs>

=over 4

=item *

Several problems in the C<MY_CXT> example have been fixed.

=back

=head1 Diagnostics

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 L<perldiag>.

=head2 New Diagnostics

=head3 New Errors

=over 4

=item *

L<delete argument is indexE<sol>value array slice, use array slice|perldiag/"delete argument is index/value array slice, use array slice">

(F) You used index/value array slice syntax (C<%array[...]>) as the argument to
C<delete>.  You probably meant C<@array[...]> with an @ symbol instead.

=item *

L<delete argument is keyE<sol>value hash slice, use hash slice|perldiag/"delete argument is key/value hash slice, use hash slice">

(F) You used key/value hash slice syntax (C<%hash{...}>) as the argument to
C<delete>.  You probably meant C<@hash{...}> with an @ symbol instead.

=item *

L<Magical list constants are not supported|perldiag/"Magical list constants are
not supported">

(F) You assigned a magical array to a stash element, and then tried to use the
subroutine from the same slot.  You are asking Perl to do something it cannot
do, details subject to change between Perl versions.

=item *

Added L<Setting $E<sol> to a %s reference is forbidden|perldiag/"Setting $E<sol> to %s reference is forbidden">

=back

=head3 New Warnings

=over 4

=item *

L<%s on reference is experimental|perldiag/"push on reference is experimental">:

The "auto-deref" feature is experimental.

Starting in v5.14.0, it was possible to use push, pop, keys, and other
built-in functions not only on aggregate types, but on references to
them.  The feature was not deployed to its original intended
specification, and now may become redundant to postfix dereferencing.
It has always been categorized as an experimental feature, and in
v5.20.0 is carries a warning as such.

Warnings will now be issued at compile time when these operations are
detected.

  no if $] >= 5.01908, warnings => "experimental::autoderef";

Consider, though, replacing the use of these features, as they may
change behavior again before becoming stable.

=item *

L<A sequence of multiple spaces in a charnames alias definition is deprecated|perldiag/"A sequence of multiple spaces in a charnames alias definition is deprecated">

L<Trailing white-space in a charnames alias definition is deprecated|perldiag/"Trailing white-space in a charnames alias definition is deprecated">

These two deprecation warnings involving C<\N{...}> were incorrectly
implemented.  They did not warn by default (now they do) and could not be
made fatal via C<< use warnings FATAL => 'deprecated' >> (now they can).

=item *

L<Attribute prototype(%s) discards earlier prototype attribute in same sub|perldiag/"Attribute prototype(%s) discards earlier prototype attribute in same sub">

(W misc) A sub was declared as C<sub foo : prototype(A) : prototype(B) {}>, for
example.  Since each sub can only have one prototype, the earlier
declaration(s) are discarded while the last one is applied.

=item *

L<Invalid \0 character in %s for %s: %s\0%s|perldiag/"Invalid \0 character in %s for %s: %s\0%s">

(W syscalls) Embedded \0 characters in pathnames or other system call arguments
produce a warning as of 5.20.  The parts after the \0 were formerly ignored by
system calls.

=item *

L<Matched non-Unicode code point 0x%X against Unicode property; may not be portable|perldiag/"Matched non-Unicode code point 0x%X against Unicode property; may not be portable">.

This replaces the message "Code point 0x%X is not Unicode, all \p{} matches
fail; all \P{} matches succeed".

=item *

L<Missing ']' in prototype for %s : %s|perldiag/"Missing ']' in prototype for %s : %s">

(W illegalproto) A grouping was started with C<[> but never closed with C<]>.

=item *

L<Possible precedence issue with control flow operator|perldiag/"Possible precedence issue with control flow operator">

(W syntax) There is a possible problem with the mixing of a control flow
operator (e.g. C<return>) and a low-precedence operator like C<or>.  Consider:

    sub { return $a or $b; }

This is parsed as:

    sub { (return $a) or $b; }

Which is effectively just:

    sub { return $a; }

Either use parentheses or the high-precedence variant of the operator.

Note this may be also triggered for constructs like:

    sub { 1 if die; }

=item *

L<Postfix dereference is experimental|perldiag/"Postfix dereference is experimental">

(S experimental::postderef) This warning is emitted if you use the experimental
postfix dereference syntax.  Simply suppress the warning if you want to use the
feature, but know that in doing so you are taking the risk of using an
experimental feature which may change or be removed in a future Perl version:

    no warnings "experimental::postderef";
    use feature "postderef", "postderef_qq";
    $ref->$*;
    $aref->@*;
    $aref->@[@indices];
    ... etc ...

=item *

L<Prototype '%s' overridden by attribute 'prototype(%s)' in %s|perldiag/"Prototype '%s' overridden by attribute 'prototype(%s)' in %s">

(W prototype) A prototype was declared in both the parentheses after the sub
name and via the prototype attribute.  The prototype in parentheses is useless,
since it will be replaced by the prototype from the attribute before it's ever
used.

=item *

L<Scalar value @%s[%s] better written as $%s[%s]|perldiag/"Scalar value @%s[%s] better written as $%s[%s]">

(W syntax) In scalar context, you've used an array index/value slice (indicated
by %) to select a single element of an array.  Generally it's better to ask for
a scalar value (indicated by $).  The difference is that C<$foo[&bar]> always
behaves like a scalar, both in the value it returns and when evaluating its
argument, while C<%foo[&bar]> provides a list context to its subscript, which
can do weird things if you're expecting only one subscript.  When called in
list context, it also returns the index (what C<&bar> returns) in addition to
the value.

=item *

L<Scalar value @%s{%s} better written as $%s{%s}|perldiag/"Scalar value @%s{%s} better written as $%s{%s}">

(W syntax) In scalar context, you've used a hash key/value slice (indicated by
%) to select a single element of a hash.  Generally it's better to ask for a
scalar value (indicated by $).  The difference is that C<$foo{&bar}> always
behaves like a scalar, both in the value it returns and when evaluating its
argument, while C<@foo{&bar}> and provides a list context to its subscript,
which can do weird things if you're expecting only one subscript.  When called
in list context, it also returns the key in addition to the value.

=item *

L<Setting $E<sol> to a reference to %s as a form of slurp is deprecated, treating as undef|perldiag/"Setting $E<sol> to a reference to %s as a form of slurp is deprecated, treating as undef">

=item *

L<Unexpected exit %u|perldiag/"Unexpected exit %u">

(S) exit() was called or the script otherwise finished gracefully when
C<PERL_EXIT_WARN> was set in C<PL_exit_flags>.

=item *

L<Unexpected exit failure %d|perldiag/"Unexpected exit failure %d">

(S) An uncaught die() was called when C<PERL_EXIT_WARN> was set in
C<PL_exit_flags>.

=item *

L<Use of literal control characters in variable names is deprecated|perldiag/"Use of literal control characters in variable names is deprecated">

(D deprecated) Using literal control characters in the source to refer to the
^FOO variables, like $^X and ${^GLOBAL_PHASE} is now deprecated.  This only
affects code like $\cT, where \cT is a control (like a C<SOH>) in the
source code: ${"\cT"} and $^T remain valid.

=item *

L<Useless use of greediness modifier|perldiag/"Useless use of greediness modifier '%c' in regex; marked by <-- HERE in m/%s/">

This fixes [Perl #42957].

=back

=head2 Changes to Existing Diagnostics

=over 4

=item *

Warnings and errors from the regexp engine are now UTF-8 clean.

=item *

The "Unknown switch condition" error message has some slight changes.  This
error triggers when there is an unknown condition in a C<(?(foo))> conditional.
The error message used to read:

    Unknown switch condition (?(%s in regex;

But what %s could be was mostly up to luck.  For C<(?(foobar))>, you might have
seen "fo" or "f".  For Unicode characters, you would generally get a corrupted
string.  The message has been changed to read:

    Unknown switch condition (?(...)) in regex;

Additionally, the C<'E<lt>-- HERE'> marker in the error will now point to the
correct spot in the regex.

=item *

The "%s "\x%X" does not map to Unicode" warning is now correctly listed as a
severe warning rather than as a fatal error.

=item *

Under rare circumstances, one could get a "Can't coerce readonly REF to
string" instead of the customary "Modification of a read-only value".  This
alternate error message has been removed.

=item *

"Ambiguous use of * resolved as operator *": This and similar warnings
about "%" and "&" used to occur in some circumstances where there was no
operator of the type cited, so the warning was completely wrong.  This has
been fixed [perl #117535, #76910].

=item *

Warnings about malformed subroutine prototypes are now more consistent in
how the prototypes are rendered.  Some of these warnings would truncate
prototypes containing nulls.  In other cases one warning would suppress
another.  The warning about illegal characters in prototypes no longer says
"after '_'" if the bad character came before the underscore.

=item *

L<Perl folding rules are not up-to-date for 0x%X; please use the perlbug
utility to report; in regex; marked by <-- HERE in
mE<sol>%sE<sol>|perldiag/"Perl folding rules are not up-to-date for 0x%X;
please use the perlbug utility to report; in regex; marked by <-- HERE in
m/%s/">

This message is now only in the regexp category, and not in the deprecated
category.  It is still a default (i.e., severe) warning [perl #89648].

=item *

L<%%s[%s] in scalar context better written as $%s[%s]|perldiag/"%%s[%s] in scalar context better written as $%s[%s]">

This warning now occurs for any C<%array[$index]> or C<%hash{key}> known to
be in scalar context at compile time.  Previously it was worded "Scalar
value %%s[%s] better written as $%s[%s]".

=item *

L<Switch condition not recognized in regex; marked by <-- HERE in mE<sol>%sE<sol>|perldiag/"Switch condition not recognized in regex; marked by <-- HERE in m/%s/">:

The description for this diagnostic has been extended to cover all cases where the warning may occur.
Issues with the positioning of the arrow indicator have also been resolved.

=item *

The error messages for C<my($a?$b$c)> and C<my(do{})> now mention "conditional
expression" and "do block", respectively, instead of reading 'Can't declare
null operation in "my"'.

=item *

When C<use re "debug"> executes a regex containing a backreference, the
debugging output now shows what string is being matched.

=item *

The now fatal error message C<Character following "\c" must be ASCII> has been
reworded as C<Character following "\c" must be printable ASCII> to emphasize
that in C<\cI<X>>, I<X> must be a I<printable (non-control)> ASCII character.

=back

=head1 Utility Changes

=head3 L<a2p>

=over 4

=item *

A possible crash from an off-by-one error when trying to access before the
beginning of a buffer has been fixed.  [perl #120244]

=back

=head3 F<bisect.pl>

The git bisection tool F<Porting/bisect.pl> has had many enhancements.

It is provided as part of the source distribution but not installed because
it is not self-contained as it relies on being run from within a git
checkout. Note also that it makes no attempt to fix tests, correct runtime
bugs or make something useful to install - its purpose is to make minimal
changes to get any historical revision of interest to build and run as close
as possible to "as-was", and thereby make C<git bisect> easy to use.

=over 4

=item *

Can optionally run the test case with a timeout.

=item *

Can now run in-place in a clean git checkout.

=item *

Can run the test case under C<valgrind>.

=item *

Can apply user supplied patches and fixes to the source checkout before
building.

=item *

Now has fixups to enable building several more historical ranges of bleadperl,
which can be useful for pinpointing the origins of bugs or behaviour changes.

=back

=head3 L<find2perl>

=over 4

=item *

L<find2perl> now handles C<?> wildcards correctly.  [perl #113054]

=back

=head3 L<perlbug>

=over 4

=item *

F<perlbug> now has a C<-p> option for attaching patches with a bug report.

=item *

L<perlbug> has been modified to supply the report template with CRLF line
endings on Windows.
[L<perl #121277|https://rt.perl.org/Public/Bug/Display.html?id=121277>]

=item *

L<perlbug> now makes as few assumptions as possible about the encoding of the
report.  This will likely change in the future to assume UTF-8 by default but
allow a user override.

=back

=head1 Configuration and Compilation

=over 4

=item *

The F<Makefile.PL> for L<SDBM_File> now generates a better F<Makefile>, which
avoids a race condition during parallel makes, which could cause the build to
fail.  This is the last known parallel make problem (on *nix platforms), and
therefore we believe that a parallel make should now always be error free.

=item *

F<installperl> and F<installman>'s option handling has been refactored to use
L<Getopt::Long>. Both are used by the F<Makefile> C<install> targets, and
are not installed, so these changes are only likely to affect custom
installation scripts.

=over 4

=item *

Single letter options now also have long names.

=item *

Invalid options are now rejected.

=item *

Command line arguments that are not options are now rejected.

=item *

Each now has a C<--help> option to display the usage message.

=back

The behaviour for all valid documented invocations is unchanged.

=item *

Where possible, the build now avoids recursive invocations of F<make> when
building pure-Perl extensions, without removing any parallelism from the
build. Currently around 80 extensions can be processed directly by the
F<make_ext.pl> tool, meaning that 80 invocations of F<make> and 160
invocations of F<miniperl> are no longer made.

=item *

The build system now works correctly when compiling under GCC or Clang with
link-time optimization enabled (the C<-flto> option). [perl #113022]

=item *

Distinct library basenames with C<d_libname_unique>.

When compiling perl with this option, the library files for XS modules are
named something "unique" -- for example, Hash/Util/Util.so becomes
Hash/Util/PL_Hash__Util.so.  This behavior is similar to what currently
happens on VMS, and serves as groundwork for the Android port.

=item *

C<sysroot> option to indicate the logical root directory under gcc and clang.

When building with this option set, both Configure and the compilers search
for all headers and libraries under this new sysroot, instead of /.

This is a huge time saver if cross-compiling, but can also help
on native builds if your toolchain's files have non-standard locations.

=item *

The cross-compilation model has been renovated.
There's several new options, and some backwards-incompatible changes:

We now build binaries for miniperl and generate_uudmap to be used on the host,
rather than running every miniperl call on the target; this means that, short
of 'make test', we no longer need access to the target system once Configure is
done.  You can provide already-built binaries through the C<hostperl> and
C<hostgenerate> options to Configure.

Additionally, if targeting an EBCDIC platform from an ASCII host,
or viceversa, you'll need to run Configure with C<-Uhostgenerate>, to
indicate that generate_uudmap should be run on the target.

Finally, there's also a way of having Configure end early, right after
building the host binaries, by cross-compiling without specifying a
C<targethost>.

The incompatible changes include no longer using xconfig.h, xlib, or
Cross.pm, so canned config files and Makefiles will have to be updated.

=item *

Related to the above, there is now a way of specifying the location of sh
(or equivalent) on the target system: C<targetsh>.

For example, Android has its sh in /system/bin/sh, so if cross-compiling
from a more normal Unixy system with sh in /bin/sh, "targetsh" would end
up as /system/bin/sh, and "sh" as /bin/sh.

=item *

By default, B<gcc> 4.9 does some optimizations that break perl.  The B<-fwrapv>
option disables those optimizations (and probably others), so for B<gcc> 4.3
and later (since the there might be similar problems lurking on older versions
too, but B<-fwrapv> was broken before 4.3, and the optimizations probably won't
go away), F<Configure> now adds B<-fwrapv> unless the user requests
B<-fno-wrapv>, which disables B<-fwrapv>, or B<-fsanitize=undefined>, which
turns the overflows B<-fwrapv> ignores into runtime errors.
[L<perl #121505|https://rt.perl.org/Public/Bug/Display.html?id=121505>]

=back

=head1 Testing

=over 4

=item *

The C<test.valgrind> make target now allows tests to be run in parallel.
This target allows Perl's test suite to be run under Valgrind, which detects
certain sorts of C programming errors, though at significant cost in running
time. On suitable hardware, allowing parallel execution claws back a lot of
that additional cost. [perl #121431]

=item *

Various tests in F<t/porting/> are no longer skipped when the perl
F<.git> directory is outside the perl tree and pointed to by
C<$GIT_DIR>. [perl #120505]

=item *

The test suite no longer fails when the user's interactive shell maintains a
C<$PWD> environment variable, but the F</bin/sh> used for running tests
doesn't.

=back

=head1 Platform Support

=head2 New Platforms

=over 4

=item Android

Perl can now be built for Android, either natively or through
cross-compilation, for all three currently available architectures (ARM,
MIPS, and x86), on a wide range of versions.

=item Bitrig

Compile support has been added for Bitrig, a fork of OpenBSD.

=item FreeMiNT

Support has been added for FreeMiNT, a free open-source OS for the Atari ST
system and its successors, based on the original MiNT that was officially
adopted by Atari.

=item Synology

Synology ships its NAS boxes with a lean Linux distribution (DSM) on relative
cheap CPU's (like the Marvell Kirkwood mv6282 - ARMv5tel or Freescale QorIQ
P1022 ppc - e500v2) not meant for workstations or development. These boxes
should build now. The basic problems are the non-standard location for tools.

=back

=head2 Discontinued Platforms

=over 4

=item C<sfio>

Code related to supporting the C<sfio> I/O system has been removed.

Perl 5.004 added support to use the native API of C<sfio>, AT&T's Safe/Fast
I/O library. This code still built with v5.8.0, albeit with many regression
tests failing, but was inadvertently broken before the v5.8.1 release,
meaning that it has not worked on any version of Perl released since then.
In over a decade we have received no bug reports about this, hence it is clear
that no-one is using this functionality on any version of Perl that is still
supported to any degree.

=item AT&T 3b1

Configure support for the 3b1, also known as the AT&T Unix PC (and the similar
AT&T 7300), has been removed.

=item DG/UX

DG/UX was a Unix sold by Data General. The last release was in April 2001.
It only runs on Data General's own hardware.

=item EBCDIC

In the absence of a regular source of smoke reports, code intended to support
native EBCDIC platforms will be removed from perl before 5.22.0.

=back

=head2 Platform-Specific Notes

=over 4

=item Cygwin

=over 4

=item *

recv() on a connected handle would populate the returned sender
address with whatever happened to be in the working buffer.  recv()
now uses a workaround similar to the Win32 recv() wrapper and returns
an empty string when recvfrom(2) doesn't modify the supplied address
length. [perl #118843]

=item *

Fixed a build error in cygwin.c on Cygwin 1.7.28.

Tests now handle the errors that occur when C<cygserver> isn't
running.

=back

=item GNU/Hurd

The BSD compatibility library C<libbsd> is no longer required for builds.

=item Linux

The hints file now looks for C<libgdbm_compat> only if C<libgdbm> itself is
also wanted. The former is never useful without the latter, and in some
circumstances, including it could actually prevent building.

=item Mac OS

The build system now honors an C<ld> setting supplied by the user running
F<Configure>.

=item MidnightBSD

C<objformat> was removed from version 0.4-RELEASE of MidnightBSD and had been
deprecated on earlier versions.  This caused the build environment to be
erroneously configured for C<a.out> rather than C<elf>.  This has been now
been corrected.

=item Mixed-endian platforms

The code supporting C<pack> and C<unpack> operations on mixed endian
platforms has been removed. We believe that Perl has long been unable to
build on mixed endian architectures (such as PDP-11s), so we don't think
that this change will affect any platforms which were able to build v5.18.0.

=item VMS

=over 4

=item *

The C<PERL_ENV_TABLES> feature to control the population of %ENV at perl
start-up was broken in Perl 5.16.0 but has now been fixed.

=item *

Skip access checks on remotes in opendir().  [perl #121002]

=item *

A check for glob metacharacters in a path returned by the
L<C<glob()>|perlfunc/glob> operator has been replaced with a check for VMS
wildcard characters.  This saves a significant number of unnecessary
L<C<lstat()>|perlfunc/lstat> calls such that some simple glob operations become
60-80% faster.

=back

=item Win32

=over 4

=item *

C<rename> and C<link> on Win32 now set $! to ENOSPC and EDQUOT when
appropriate.  [perl #119857]

=item *

The BUILD_STATIC and ALL_STATIC makefile options for linking some or (nearly)
all extensions statically (into perl520.dll, and into a separate
perl-static.exe too) were broken for MinGW builds. This has now been fixed.

The ALL_STATIC option has also been improved to include the Encode and Win32
extensions (for both VC++ and MinGW builds).

=item *

Support for building with Visual C++ 2013 has been added.  There are currently
two possible test failures (see L<perlwin32/"Testing Perl on Windows">) which
will hopefully be resolved soon.

=item *

Experimental support for building with Intel C++ Compiler has been added.  The
nmake makefile (win32/Makefile) and the dmake makefile (win32/makefile.mk) can
be used.  A "nmake test" will not pass at this time due to F<cpan/CGI/t/url.t>.

=item *

Killing a process tree with L<perlfunc/kill> and a negative signal, was broken
starting in 5.18.0. In this bug, C<kill> always returned 0 for a negative
signal even for valid PIDs, and no processes were terminated. This has been
fixed [perl #121230].

=item *

The time taken to build perl on Windows has been reduced quite significantly
(time savings in the region of 30-40% are typically seen) by reducing the
number of, usually failing, I/O calls for each L<C<require()>|perlfunc/require>
(for B<miniperl.exe> only).
[L<perl #121119|https://rt.perl.org/Public/Bug/Display.html?id=121119>]

=item *

About 15 minutes of idle sleeping was removed from running C<make test> due to
a bug in which the timeout monitor used for tests could not be cancelled once
the test completes, and the full timeout period elapsed before running the next
test file.
[L<perl #121395|https://rt.perl.org/Public/Bug/Display.html?id=121395>]

=item *

On a perl built without pseudo-fork (pseudo-fork builds were not affected by
this bug), killing a process tree with L<C<kill()>|perlfunc/kill> and a negative
signal resulted in C<kill()> inverting the returned value.  For example, if
C<kill()> killed 1 process tree PID then it returned 0 instead of 1, and if
C<kill()> was passed 2 invalid PIDs then it returned 2 instead of 0.  This has
probably been the case since the process tree kill feature was implemented on
Win32.  It has now been corrected to follow the documented behaviour.
[L<perl #121230|https://rt.perl.org/Public/Bug/Display.html?id=121230>]

=item *

When building a 64-bit perl, an uninitialized memory read in B<miniperl.exe>,
used during the build process, could lead to a 4GB B<wperl.exe> being created.
This has now been fixed.  (Note that B<perl.exe> itself was unaffected, but
obviously B<wperl.exe> would have been completely broken.)
[L<perl #121471|https://rt.perl.org/Public/Bug/Display.html?id=121471>]

=item *

Perl can now be built with B<gcc> version 4.8.1 from L<http://www.mingw.org>.
This was previously broken due to an incorrect definition of DllMain() in one
of perl's source files.  Earlier B<gcc> versions were also affected when using
version 4 of the w32api package.  Versions of B<gcc> available from
L<http://mingw-w64.sourceforge.net/> were not affected.
[L<perl #121643|https://rt.perl.org/Public/Bug/Display.html?id=121643>]

=item *

The test harness now has no failures when perl is built on a FAT drive with the
Windows OS on an NTFS drive.
[L<perl #21442|https://rt.perl.org/Public/Bug/Display.html?id=21442>]

=item *

When cloning the context stack in fork() emulation, Perl_cx_dup()
would crash accessing parameter information for context stack entries
that included no parameters, as with C<&foo;>.
[L<perl #121721|https://rt.perl.org/Public/Bug/Display.html?id=121721>]

=item *

Introduced by
L<perl #113536|https://rt.perl.org/Public/Bug/Display.html?id=113536>, a memory
leak on every call to C<system> and backticks (C< `` >), on most Win32 Perls
starting from 5.18.0 has been fixed.  The memory leak only occurred if you
enabled psuedo-fork in your build of Win32 Perl, and were running that build on
Server 2003 R2 or newer OS.  The leak does not appear on WinXP SP3.
[L<perl #121676|https://rt.perl.org/Public/Bug/Display.html?id=121676>]

=back

=item WinCE

=over 4

=item *

The building of XS modules has largely been restored.  Several still cannot
(yet) be built but it is now possible to build Perl on WinCE with only a couple
of further patches (to L<Socket> and L<ExtUtils::MakeMaker>), hopefully to be
incorporated soon.

=item *

Perl can now be built in one shot with no user intervention on WinCE by running
C<nmake -f Makefile.ce all>.

Support for building with EVC (Embedded Visual C++) 4 has been restored.  Perl
can also be built using Smart Devices for Visual C++ 2005 or 2008.

=back

=back

=head1 Internal Changes

=over 4

=item *

The internal representation has changed for the match variables $1, $2 etc.,
$`, $&, $', ${^PREMATCH}, ${^MATCH} and ${^POSTMATCH}.  It uses slightly less
memory, avoids string comparisons and numeric conversions during lookup, and
uses 23 fewer lines of C.  This change should not affect any external code.

=item *

Arrays now use NULL internally to represent unused slots, instead of
&PL_sv_undef.  &PL_sv_undef is no longer treated as a special value, so
av_store(av, 0, &PL_sv_undef) will cause element 0 of that array to hold a
read-only undefined scalar.  C<$array[0] = anything> will croak and
C<\$array[0]> will compare equal to C<\undef>.

=item *

The SV returned by HeSVKEY_force() now correctly reflects the UTF8ness of the
underlying hash key when that key is not stored as a SV.  [perl #79074]

=item *

Certain rarely used functions and macros available to XS code are now
deprecated.  These are:
C<utf8_to_uvuni_buf> (use C<utf8_to_uvchr_buf> instead),
C<valid_utf8_to_uvuni> (use C<utf8_to_uvchr_buf> instead),
C<NATIVE_TO_NEED> (this did not work properly anyway),
and C<ASCII_TO_NEED> (this did not work properly anyway).

Starting in this release, almost never does application code need to
distinguish between the platform's character set and Latin1, on which the
lowest 256 characters of Unicode are based.  New code should not use
C<utf8n_to_uvuni> (use C<utf8_to_uvchr_buf> instead),
nor
C<uvuni_to_utf8> (use C<uvchr_to_utf8> instead),

=item *

The Makefile shortcut targets for many rarely (or never) used testing and
profiling targets have been removed, or merged into the only other Makefile
target that uses them.  Specifically, these targets are gone, along with
documentation that referenced them or explained how to use them:

    check.third check.utf16 check.utf8 coretest minitest.prep
    minitest.utf16 perl.config.dashg perl.config.dashpg
    perl.config.gcov perl.gcov perl.gprof perl.gprof.config
    perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
    perl.third perl.third.config perl.valgrind.config purecovperl
    pureperl quantperl test.deparse test.taintwarn test.third
    test.torture test.utf16 test.utf8 test_notty.deparse
    test_notty.third test_notty.valgrind test_prep.third
    test_prep.valgrind torturetest ucheck ucheck.third ucheck.utf16
    ucheck.valgrind utest utest.third utest.utf16 utest.valgrind

It's still possible to run the relevant commands by "hand" - no underlying
functionality has been removed.

=item *

It is now possible to keep Perl from initializing locale handling.
For the most part, Perl doesn't pay attention to locale.  (See
L<perllocale>.)  Nonetheless, until now, on startup, it has always
initialized locale handling to the system default, just in case the
program being executed ends up using locales.  (This is one of the first
things a locale-aware program should do, long before Perl knows if it
will actually be needed or not.)  This works well except when Perl is
embedded in another application which wants a locale that isn't the
system default.  Now, if the environment variable
C<PERL_SKIP_LOCALE_INIT> is set at the time Perl is started, this
initialization step is skipped.  Prior to this, on Windows platforms,
the only workaround for this deficiency was to use a hacked-up copy of
internal Perl code.  Applications that need to use older Perls can
discover if the embedded Perl they are using needs the workaround by
testing that the C preprocessor symbol C<HAS_SKIP_LOCALE_INIT> is not
defined.  [RT #38193]

=item *

C<BmRARE> and C<BmPREVIOUS> have been removed.  They were not used anywhere
and are not part of the API.  For XS modules, they are now #defined as 0.

=item *

C<sv_force_normal>, which usually croaks on read-only values, used to allow
read-only values to be modified at compile time.  This has been changed to
croak on read-only values regardless.  This change uncovered several core
bugs.

=item *

Perl's new copy-on-write mechanism  (which is now enabled by default),
allows any C<SvPOK> scalar to be automatically upgraded to a copy-on-write
scalar when copied. A reference count on the string buffer is stored in
the string buffer itself.

For example:

    $ perl -MDevel::Peek -e'$a="abc"; $b = $a; Dump $a; Dump $b'
    SV = PV(0x260cd80) at 0x2620ad8
      REFCNT = 1
      FLAGS = (POK,IsCOW,pPOK)
      PV = 0x2619bc0 "abc"\0
      CUR = 3
      LEN = 16
      COW_REFCNT = 1
    SV = PV(0x260ce30) at 0x2620b20
      REFCNT = 1
      FLAGS = (POK,IsCOW,pPOK)
      PV = 0x2619bc0 "abc"\0
      CUR = 3
      LEN = 16
      COW_REFCNT = 1

Note that both scalars share the same PV buffer and have a COW_REFCNT
greater than zero.

This means that XS code which wishes to modify the C<SvPVX()> buffer of an
SV should call C<SvPV_force()> or similar first, to ensure a valid (and
unshared) buffer, and to call C<SvSETMAGIC()> afterwards. This in fact has
always been the case (for example hash keys were already copy-on-write);
this change just spreads the COW behaviour to a wider variety of SVs.

One important difference is that before 5.18.0, shared hash-key scalars
used to have the C<SvREADONLY> flag set; this is no longer the case.

This new behaviour can still be disabled by running F<Configure> with
B<-Accflags=-DPERL_NO_COW>.  This option will probably be removed in Perl
5.22.

=item *

C<PL_sawampersand> is now a constant.  The switch this variable provided
(to enable/disable the pre-match copy depending on whether C<$&> had been
seen) has been removed and replaced with copy-on-write, eliminating a few
bugs.

The previous behaviour can still be enabled by running F<Configure> with
B<-Accflags=-DPERL_SAWAMPERSAND>.

=item *

The functions C<my_swap>, C<my_htonl> and C<my_ntohl> have been removed.
It is unclear why these functions were ever marked as I<A>, part of the
API. XS code can't call them directly, as it can't rely on them being
compiled. Unsurprisingly, no code on CPAN references them.

=item *

The signature of the C<Perl_re_intuit_start()> regex function has changed;
the function pointer C<intuit> in the regex engine plugin structure
has also changed accordingly. A new parameter, C<strbeg> has been added;
this has the same meaning as the same-named parameter in
C<Perl_regexec_flags>. Previously intuit would try to guess the start of
the string from the passed SV (if any), and would sometimes get it wrong
(e.g. with an overloaded SV).

=item *

The signature of the C<Perl_regexec_flags()> regex function has
changed; the function pointer C<exec> in the regex engine plugin
structure has also changed to match.  The C<minend> parameter now has
type C<SSize_t> to better support 64-bit systems.

=item *

XS code may use various macros to change the case of a character or code
point (for example C<toLOWER_utf8()>).  Only a couple of these were
documented until now;
and now they should be used in preference to calling the underlying
functions.  See L<perlapi/Character case changing>.

=item *

The code dealt rather inconsistently with uids and gids. Some
places assumed that they could be safely stored in UVs, others
in IVs, others in ints. Four new macros are introduced:
SvUID(), sv_setuid(), SvGID(), and sv_setgid()

=item *

C<sv_pos_b2u_flags> has been added to the API.  It is similar to C<sv_pos_b2u>,
but supports long strings on 64-bit platforms.

=item *

C<PL_exit_flags> can now be used by perl embedders or other XS code to have
perl C<warn> or C<abort> on an attempted exit. [perl #52000]

=item *

Compiling with C<-Accflags=-PERL_BOOL_AS_CHAR> now allows C99 and C++
compilers to emulate the aliasing of C<bool> to C<char> that perl does for
C89 compilers.  [perl #120314]

=item *

The C<sv> argument in L<perlapi/sv_2pv_flags>, L<perlapi/sv_2iv_flags>,
L<perlapi/sv_2uv_flags>, and L<perlapi/sv_2nv_flags> and their older wrappers
sv_2pv, sv_2iv, sv_2uv, sv_2nv, is now non-NULL. Passing NULL now will crash.
When the non-NULL marker was introduced en masse in 5.9.3 the functions
were marked non-NULL, but since the creation of the SV API in 5.0 alpha 2, if
NULL was passed, the functions returned 0 or false-type values. The code that
supports C<sv> argument being non-NULL dates to 5.0 alpha 2 directly, and
indirectly to Perl 1.0 (pre 5.0 api). The lack of documentation that the
functions accepted a NULL C<sv> was corrected in 5.11.0 and between 5.11.0
and 5.19.5 the functions were marked NULLOK. As an optimization the NULLOK code
has now been removed, and the functions became non-NULL marked again, because
core getter-type macros never pass NULL to these functions and would crash
before ever passing NULL.

The only way a NULL C<sv> can be passed to sv_2*v* functions is if XS code
directly calls sv_2*v*. This is unlikely as XS code uses Sv*V* macros to get
the underlying value out of the SV. One possible situation which leads to
a NULL C<sv> being passed to sv_2*v* functions, is if XS code defines its own
getter type Sv*V* macros, which check for NULL B<before> dereferencing and
checking the SV's flags through public API Sv*OK* macros or directly using
private API C<SvFLAGS>, and if C<sv> is NULL, then calling the sv_2*v functions
with a NULL litteral or passing the C<sv> containing a NULL value.

=item *

newATTRSUB is now a macro

The public API newATTRSUB was previously a macro to the private
function Perl_newATTRSUB. Function Perl_newATTRSUB has been removed. newATTRSUB
is now macro to a different internal function.

=item *

Changes in warnings raised by C<utf8n_to_uvchr()>

This bottom level function decodes the first character of a UTF-8 string
into a code point.  It is accessible to C<XS> level code, but it's
discouraged from using it directly.  There are higher level functions
that call this that should be used instead, such as
L<perlapi/utf8_to_uvchr_buf>.  For completeness though, this documents
some changes to it.  Now, tests for malformations are done before any
tests for other potential issues.  One of those issues involves code
points so large that they have never appeared in any official standard
(the current standard has scaled back the highest acceptable code point
from earlier versions).  It is possible (though not done in CPAN) to
warn and/or forbid these code points, while accepting smaller code
points that are still above the legal Unicode maximum.  The warning
message for this now includes the code point if representable on the
machine.  Previously it always displayed raw bytes, which is what it
still does for non-representable code points.

=item *

Regexp engine changes that affect the pluggable regex engine interface

Many flags that used to be exposed via regexp.h and used to populate the
extflags member of struct regexp have been removed. These fields were
technically private to Perl's own regexp engine and should not have been
exposed there in the first place.

The affected flags are:

    RXf_NOSCAN
    RXf_CANY_SEEN
    RXf_GPOS_SEEN
    RXf_GPOS_FLOAT
    RXf_ANCH_BOL
    RXf_ANCH_MBOL
    RXf_ANCH_SBOL
    RXf_ANCH_GPOS

As well as the follow flag masks:

    RXf_ANCH_SINGLE
    RXf_ANCH

All have been renamed to PREGf_ equivalents and moved to regcomp.h.

The behavior previously achieved by setting one or more of the RXf_ANCH_
flags (via the RXf_ANCH mask) have now been replaced by a *single* flag bit
in extflags:

    RXf_IS_ANCHORED

pluggable regex engines which previously used to set these flags should
now set this flag ALONE.

=item *

The Perl core now consistently uses C<av_tindex()> ("the top index of an
array") as a more clearly-named synonym for C<av_len()>.

=item *

The obscure interpreter variable C<PL_timesbuf> is expected to be removed
early in the 5.21.x development series, so that Perl 5.22.0 will not provide
it to XS authors.  While the variable still exists in 5.20.0, we hope that
this advance warning of the deprecation will help anyone who is using that
variable.

=back

=head1 Selected Bug Fixes

=head2 Regular Expressions

=over 4

=item *

Fixed a small number of regexp constructions that could either fail to
match or crash perl when the string being matched against was
allocated above the 2GB line on 32-bit systems. [RT #118175]

=item *

Various memory leaks involving the parsing of the C<(?[...])> regular
expression construct have been fixed.

=item *

C<(?[...])> now allows interpolation of precompiled patterns consisting of
C<(?[...])> with bracketed character classes inside (C<$pat =
S<qr/(?[ [a] ])/;> S</(?[ $pat ])/>>).  Formerly, the brackets would
confuse the regular expression parser.

=item *

The "Quantifier unexpected on zero-length expression" warning message could
appear twice starting in Perl v5.10 for a regular expression also
containing alternations (e.g., "a|b") triggering the trie optimisation.

=item *

Perl v5.18 inadvertently introduced a bug whereby interpolating mixed up-
and down-graded UTF-8 strings in a regex could result in malformed UTF-8
in the pattern: specifically if a downgraded character in the range
C<\x80..\xff> followed a UTF-8 string, e.g.

    utf8::upgrade(  my $u = "\x{e5}");
    utf8::downgrade(my $d = "\x{e5}");
    /$u$d/

[RT #118297]

=item *

In regular expressions containing multiple code blocks, the values of
C<$1>, C<$2>, etc., set by nested regular expression calls would leak from
one block to the next.  Now these variables always refer to the outer
regular expression at the start of an embedded block [perl #117917].

=item *

C</$qr/p> was broken in Perl 5.18.0; the C</p> flag was ignored.  This has been
fixed. [perl #118213]

=item *

Starting in Perl 5.18.0, a construct like C</[#](?{})/x> would have its C<#>
incorrectly interpreted as a comment.  The code block would be skipped,
unparsed.  This has been corrected.

=item *

Starting in Perl 5.001, a regular expression like C</[#$a]/x> or C</[#]$a/x>
would have its C<#> incorrectly interpreted as a comment, so the variable would
not interpolate.  This has been corrected. [perl #45667]

=item *

Perl 5.18.0 inadvertently made dereferenced regular expressions
S<(C<${ qr// }>)> false as booleans.  This has been fixed.

=item *

The use of C<\G> in regular expressions, where it's not at the start of the
pattern, is now slightly less buggy (although it is still somewhat
problematic).

=item *

Where a regular expression included code blocks (C</(?{...})/>), and where the
use of constant overloading triggered a re-compilation of the code block, the
second compilation didn't see its outer lexical scope.  This was a regression
in Perl 5.18.0.

=item *

The string position set by C<pos> could shift if the string changed
representation internally to or from utf8.  This could happen, e.g., with
references to objects with string overloading.

=item *

Taking references to the return values of two C<pos> calls with the same
argument, and then assigning a reference to one and C<undef> to the other,
could result in assertion failures or memory leaks.

=item *

Elements of @- and @+ now update correctly when they refer to non-existent
captures.  Previously, a referenced element (C<$ref = \$-[1]>) could refer to
the wrong match after subsequent matches.

=item *

The code that parses regex backrefs (or ambiguous backref/octals) such as \123
did a simple atoi(), which could wrap round to negative values on long digit
strings and cause segmentation faults.  This has now been fixed.  [perl
#119505]

=item *

Assigning another typeglob to C<*^R> no longer makes the regular expression
engine crash.

=item *

The C<\N> regular expression escape, when used without the curly braces (to
mean C<[^\n]>), was ignoring a following C<*> if followed by whitespace
under /x.  It had been this way since C<\N> to mean C<[^\n]> was introduced
in 5.12.0.

=item *

C<s///>, C<tr///> and C<y///> now work when a wide character is used as the
delimiter.  [perl #120463]

=item *

Some cases of unterminated (?...) sequences in regular expressions (e.g.,
C</(?</>) have been fixed to produce the proper error message instead of
"panic: memory wrap".  Other cases (e.g., C</(?(/>) have yet to be fixed.

=item *

When a reference to a reference to an overloaded object was returned from
a regular expression C<(??{...})> code block, an incorrect implicit
dereference could take place if the inner reference had been returned by
a code block previously.

=item *

A tied variable returned from C<(??{...})> sees the inner values of match
variables (i.e., the $1 etc. from any matches inside the block) in its
FETCH method.  This was not the case if a reference to an overloaded object
was the last thing assigned to the tied variable.  Instead, the match
variables referred to the outer pattern during the FETCH call.

=item *

Fix unexpected tainting via regexp using locale. Previously, under certain
conditions, the use of character classes could cause tainting when it
shouldn't. Some character classes are locale-dependent, but before this
patch, sometimes tainting was happening even for character classes that
don't depend on the locale. [perl #120675]

=item *

Under certain conditions, Perl would throw an error if in an lookbehind
assertion in a regexp, the assertion referred to a named subpattern,
complaining the lookbehind was variable when it wasn't. This has been
fixed. [perl #120600], [perl #120618]. The current fix may be improved
on in the future.

=item *

C<$^R> wasn't available outside of the regular expression that
initialized it.  [perl #121070]

=item *

A large set of fixes and refactoring for re_intuit_start() was merged,
the highlights are:

=over

=item *

Fixed a panic when compiling the regular expression
C</\x{100}[xy]\x{100}{2}/>.

=item *

Fixed a performance regression when performing a global pattern match
against a UTF-8 string.  [perl #120692]

=item *

Fixed another performance issue where matching a regular expression
like C</ab.{1,2}x/> against a long UTF-8 string would unnecessarily
calculate byte offsets for a large portion of the string. [perl
#120692]

=back

=item *

Fixed an alignment error when compiling regular expressions when built
with GCC on HP-UX 64-bit.

=item *

On 64-bit platforms C<pos> can now be set to a value higher than 2**31-1.
[perl #72766]

=back

=head2 Perl 5 Debugger and -d

=over 4

=item *

The debugger's C<man> command been fixed. It was broken in the v5.18.0
release. The C<man> command is aliased to the names C<doc> and C<perldoc> -
all now work again.

=item *

C<@_> is now correctly visible in the debugger, fixing a regression
introduced in v5.18.0's debugger. [RT #118169]

=item *

Under copy-on-write builds (the default as of 5.20.0) C<< ${'_<-e'}[0] >>
no longer gets mangled.  This is the first line of input saved for the
debugger's use for one-liners [perl #118627].

=item *

On non-threaded builds, setting C<${"_E<lt>filename"}> to a reference or
typeglob no longer causes C<__FILE__> and some error messages to produce a
corrupt string, and no longer prevents C<#line> directives in string evals from
providing the source lines to the debugger.  Threaded builds were unaffected.

=item *

Starting with Perl 5.12, line numbers were off by one if the B<-d> switch was
used on the #! line.  Now they are correct.

=item *

C<*DB::DB = sub {} if 0> no longer stops Perl's debugging mode from finding
C<DB::DB> subs declared thereafter.

=item *

C<%{'_<...'}> hashes now set breakpoints on the corresponding C<@{'_<...'}>
rather than whichever array C<@DB::dbline> is aliased to.  [perl #119799]

=item *

Call set-magic when setting $DB::sub.  [perl #121255]

=item *

The debugger's "n" command now respects lvalue subroutines and steps over
them [perl #118839].

=back

=head2 Lexical Subroutines

=over 4

=item *

Lexical constants (C<my sub a() { 42 }>) no longer crash when inlined.

=item *

Parameter prototypes attached to lexical subroutines are now respected when
compiling sub calls without parentheses.  Previously, the prototypes were
honoured only for calls I<with> parentheses. [RT #116735]

=item *

Syntax errors in lexical subroutines in combination with calls to the same
subroutines no longer cause crashes at compile time.

=item *

Deep recursion warnings no longer crash lexical subroutines. [RT #118521]

=item *

The dtrace sub-entry probe now works with lexical subs, instead of
crashing [perl #118305].

=item *

Undefining an inlinable lexical subroutine (C<my sub foo() { 42 } undef
&foo>) would result in a crash if warnings were turned on.

=item *

An undefined lexical sub used as an inherited method no longer crashes.

=item *

The presence of a lexical sub named "CORE" no longer stops the CORE::
prefix from working.

=back

=head2 Everything Else

=over 4

=item *

The OP allocation code now returns correctly aligned memory in all cases
for C<struct pmop>. Previously it could return memory only aligned to a
4-byte boundary, which is not correct for an ithreads build with 64 bit IVs
on some 32 bit platforms. Notably, this caused the build to fail completely
on sparc GNU/Linux. [RT #118055]

=item *

Evaluating large hashes in scalar context is now much faster, as the number
of used chains in the hash is now cached for larger hashes. Smaller hashes
continue not to store it and calculate it when needed, as this saves one IV.
That would be 1 IV overhead for every object built from a hash. [RT #114576]

=item *

Perl v5.16 inadvertently introduced a bug whereby calls to XSUBs that were
not visible at compile time were treated as lvalues and could be assigned
to, even when the subroutine was not an lvalue sub.  This has been fixed.
[RT #117947]

=item *

In Perl v5.18.0 dualvars that had an empty string for the string part but a
non-zero number for the number part starting being treated as true.  In
previous versions they were treated as false, the string representation
taking precedeence.  The old behaviour has been restored. [RT #118159]

=item *

Since Perl v5.12, inlining of constants that override built-in keywords of
the same name had countermanded C<use subs>, causing subsequent mentions of
the constant to use the built-in keyword instead.  This has been fixed.

=item *

The warning produced by C<-l $handle> now applies to IO refs and globs, not
just to glob refs.  That warning is also now UTF8-clean. [RT #117595]

=item *

C<delete local $ENV{nonexistent_env_var}> no longer leaks memory.

=item *

C<sort> and C<require> followed by a keyword prefixed with C<CORE::> now
treat it as a keyword, and not as a subroutine or module name. [RT #24482]

=item *

Through certain conundrums, it is possible to cause the current package to
be freed.  Certain operators (C<bless>, C<reset>, C<open>, C<eval>) could
not cope and would crash.  They have been made more resilient. [RT #117941]

=item *

Aliasing filehandles through glob-to-glob assignment would not update
internal method caches properly if a package of the same name as the
filehandle existed, resulting in filehandle method calls going to the
package instead.  This has been fixed.

=item *

C<./Configure -de -Dusevendorprefix> didn't default. [RT #64126]

=item *

The C<Statement unlikely to be reached> warning was listed in
L<perldiag> as an C<exec>-category warning, but was enabled and disabled
by the C<syntax> category.  On the other hand, the C<exec> category
controlled its fatal-ness.  It is now entirely handled by the C<exec>
category.

=item *

The "Replacement list is longer that search list" warning for C<tr///> and
C<y///> no longer occurs in the presence of the C</c> flag. [RT #118047]

=item *

Stringification of NVs are not cached so that the lexical locale controls
stringification of the decimal point. [perl #108378] [perl #115800]

=item *

There have been several fixes related to Perl's handling of locales.  perl
#38193 was described above in L</Internal Changes>.
Also fixed is 
#118197, where the radix (decimal point) character had to be an ASCII
character (which doesn't work for some non-Western languages);
and #115808, in which C<POSIX::setlocale()> on failure returned an
C<undef> which didn't warn about not being defined even if those
warnings were enabled.

=item *

Compiling a C<split> operator whose third argument is a named constant
evaluating to 0 no longer causes the constant's value to change.

=item *

A named constant used as the second argument to C<index> no longer gets
coerced to a string if it is a reference, regular expression, dualvar, etc.

=item *

A named constant evaluating to the undefined value used as the second
argument to C<index> no longer produces "uninitialized" warnings at compile
time.  It will still produce them at run time.

=item *

When a scalar was returned from a subroutine in @INC, the referenced scalar
was magically converted into an IO thingy, possibly resulting in "Bizarre
copy" errors if that scalar continued to be used elsewhere.  Now Perl uses
an internal copy of the scalar instead.

=item *

Certain uses of the C<sort> operator are optimised to modify an array in
place, such as C<@a = sort @a>.  During the sorting, the array is made
read-only.  If a sort block should happen to die, then the array remained
read-only even outside the C<sort>.  This has been fixed.

=item *

C<$a> and C<$b> inside a sort block are aliased to the actual arguments to
C<sort>, so they can be modified through those two variables.  This did not
always work, e.g., for lvalue subs and C<$#ary>, and probably many other
operators.  It works now.

=item *

The arguments to C<sort> are now all in list context.  If the C<sort>
itself were called in void or scalar context, then I<some>, but not all, of
the arguments used to be in void or scalar context.

=item *

Subroutine prototypes with Unicode characters above U+00FF were getting
mangled during closure cloning.  This would happen with subroutines closing
over lexical variables declared outside, and with lexical subs.

=item *

C<UNIVERSAL::can> now treats its first argument the same way that method
calls do: Typeglobs and glob references with non-empty IO slots are treated
as handles, and strings are treated as filehandles, rather than packages,
if a handle with that name exists [perl #113932].

=item *

Method calls on typeglobs (e.g., C<< *ARGV->getline >>) used to stringify
the typeglob and then look it up again.  Combined with changes in Perl
5.18.0, this allowed C<< *foo->bar >> to call methods on the "foo" package
(like C<< foo->bar >>).  In some cases it could cause the method to be
called on the wrong handle.  Now a typeglob argument is treated as a
handle (just like C<< (\*foo)->bar >>), or, if its IO slot is empty, an
error is raised.

=item *

Assigning a vstring to a tied variable or to a subroutine argument aliased
to a nonexistent hash or array element now works, without flattening the
vstring into a regular string.

=item *

C<pos>, C<tie>, C<tied> and C<untie> did not work
properly on subroutine arguments aliased to nonexistent
hash and array elements [perl #77814, #27010].

=item *

The C<< => >> fat arrow operator can now quote built-in keywords even if it
occurs on the next line, making it consistent with how it treats other
barewords.

=item *

Autovivifying a subroutine stub via C<\&$glob> started causing crashes in Perl
5.18.0 if the $glob was merely a copy of a real glob, i.e., a scalar that had
had a glob assigned to it.  This has been fixed. [perl #119051]

=item *

Perl used to leak an implementation detail when it came to referencing the
return values of certain operators.  C<for ($a+$b) { warn \$_; warn \$_ }> used
to display two different memory addresses, because the C<\> operator was
copying the variable.  Under threaded builds, it would also happen for
constants (C<for(1) { ... }>).  This has been fixed. [perl #21979, #78194,
#89188, #109746, #114838, #115388]

=item *

The range operator C<..> was returning the same modifiable scalars with each
call, unless it was the only thing in a C<foreach> loop header.  This meant
that changes to values within the list returned would be visible the next time
the operator was executed. [perl #3105]

=item *

Constant folding and subroutine inlining no longer cause operations that would
normally return new modifiable scalars to return read-only values instead.

=item *

Closures of the form C<sub () { $some_variable }> are no longer inlined,
causing changes to the variable to be ignored by callers of the subroutine.
[perl #79908]

=item *

Return values of certain operators such as C<ref> would sometimes be shared
between recursive calls to the same subroutine, causing the inner call to
modify the value returned by C<ref> in the outer call.  This has been fixed.

=item *

C<__PACKAGE__> and constants returning a package name or hash key are now
consistently read-only.  In various previous Perl releases, they have become
mutable under certain circumstances.

=item *

Enabling "used once" warnings no longer causes crashes on stash circularities
created at compile time (C<*Foo::Bar::Foo:: = *Foo::>).

=item *

Undef constants used in hash keys (C<use constant u =E<gt> undef; $h{+u}>) no
longer produce "uninitialized" warnings at compile time.

=item *

Modifying a substitution target inside the substitution replacement no longer
causes crashes.

=item *

The first statement inside a string eval used to use the wrong pragma setting
sometimes during constant folding.  C<eval 'uc chr 0xe0'> would randomly choose
between Unicode, byte, and locale semantics.  This has been fixed.

=item *

The handling of return values of @INC filters (subroutines returned by
subroutines in @INC) has been fixed in various ways.  Previously tied variables
were mishandled, and setting $_ to a reference or typeglob could result in
crashes.

=item *

The C<SvPVbyte> XS function has been fixed to work with tied scalars returning
something other than a string.  It used to return utf8 in those cases where
C<SvPV> would.

=item *

Perl 5.18.0 inadvertently made C<--> and C<++> crash on dereferenced regular
expressions, and stopped C<++> from flattening vstrings.

=item *

C<bless> no longer dies with "Can't bless non-reference value" if its first
argument is a tied reference.

=item *

C<reset> with an argument no longer skips copy-on-write scalars, regular
expressions, typeglob copies, and vstrings.  Also, when encountering those or
read-only values, it no longer skips any array or hash with the same name.

=item *

C<reset> with an argument now skips scalars aliased to typeglobs
(C<for $z (*foo) { reset "z" }>).  Previously it would corrupt memory or crash.

=item *

C<ucfirst> and C<lcfirst> were not respecting the bytes pragma.  This was a
regression from Perl 5.12. [perl #117355]

=item *

Changes to C<UNIVERSAL::DESTROY> now update DESTROY caches in all classes,
instead of causing classes that have already had objects destroyed to continue
using the old sub.  This was a regression in Perl 5.18. [perl #114864]

=item *

All known false-positive occurrences of the deprecation warning "Useless use of
'\'; doesn't escape metacharacter '%c'", added in Perl 5.18.0, have been
removed. [perl #119101]

=item *

The value of $^E is now saved across signal handlers on Windows.  [perl #85104]

=item *

A lexical filehandle (as in C<open my $fh...>) is usually given a name based on
the current package and the name of the variable, e.g. "main::$fh".  Under
recursion, the filehandle was losing the "$fh" part of the name.  This has been
fixed.

=item *

Uninitialized values returned by XSUBs are no longer exempt from uninitialized
warnings.  [perl #118693]

=item *

C<elsif ("")> no longer erroneously produces a warning about void context.
[perl #118753]

=item *

Passing C<undef> to a subroutine now causes @_ to contain the same read-only
undefined scalar that C<undef> returns.  Furthermore, C<exists $_[0]> will now
return true if C<undef> was the first argument.  [perl #7508, #109726]

=item *

Passing a non-existent array element to a subroutine does not usually
autovivify it unless the subroutine modifies its argument.  This did not work
correctly with negative indices and with non-existent elements within the
array.  The element would be vivified immediately.  The delayed vivification
has been extended to work with those.  [perl #118691]

=item *

Assigning references or globs to the scalar returned by $#foo after the @foo
array has been freed no longer causes assertion failures on debugging builds
and memory leaks on regular builds.

=item *

On 64-bit platforms, large ranges like 1..1000000000000 no longer crash, but
eat up all your memory instead.  [perl #119161]

=item *

C<__DATA__> now puts the C<DATA> handle in the right package, even if the
current package has been renamed through glob assignment.

=item *

When C<die>, C<last>, C<next>, C<redo>, C<goto> and C<exit> unwind the scope,
it is possible for C<DESTROY> recursively to call a subroutine or format that
is currently being exited.  It that case, sometimes the lexical variables
inside the sub would start out having values from the outer call, instead of
being undefined as they should.  This has been fixed.  [perl #119311]

=item *

${^MPEN} is no longer treated as a synonym for ${^MATCH}.

=item *

Perl now tries a little harder to return the correct line number in
C<(caller)[2]>.  [perl #115768]

=item *

Line numbers inside multiline quote-like operators are now reported correctly.
[perl #3643]

=item *

C<#line> directives inside code embedded in quote-like operators are now
respected.

=item *

Line numbers are now correct inside the second here-doc when two here-doc
markers occur on the same line.

=item *

An optimization in Perl 5.18 made incorrect assumptions causing a bad
interaction with the L<Devel::CallParser> CPAN module.  If the module was
loaded then lexical variables declared in separate statements following a
C<my(...)> list might fail to be cleared on scope exit.

=item *

C<&xsub> and C<goto &xsub> calls now allow the called subroutine to autovivify
elements of @_.

=item *

C<&xsub> and C<goto &xsub> no longer crash if *_ has been undefined and has no
ARRAY entry (i.e. @_ does not exist).

=item *

C<&xsub> and C<goto &xsub> now work with tied @_.

=item *

Overlong identifiers no longer cause a buffer overflow (and a crash).  They
started doing so in Perl 5.18.

=item *

The warning "Scalar value @hash{foo} better written as $hash{foo}" now produces
far fewer false positives.  In particular, C<@hash{+function_returning_a_list}>
and C<@hash{ qw "foo bar baz" }> no longer warn.  The same applies to array
slices.  [perl #28380, #114024]

=item *

C<$! = EINVAL; waitpid(0, WNOHANG);> no longer goes into an internal infinite
loop.  [perl #85228]

=item *

A possible segmentation fault in filehandle duplication has been fixed.

=item *

A subroutine in @INC can return a reference to a scalar containing the initial
contents of the file.  However, that scalar was freed prematurely if not
referenced elsewhere, giving random results.

=item *

C<last> no longer returns values that the same statement has accumulated so
far, fixing amongst other things the long-standing bug that C<push @a, last>
would try to return the @a, copying it like a scalar in the process and
resulting in the error, "Bizarre copy of ARRAY in last."  [perl #3112]

=item *

In some cases, closing file handles opened to pipe to or from a process, which
had been duplicated into a standard handle, would call perl's internal waitpid
wrapper with a pid of zero.  With the fix for [perl #85228] this zero pid was
passed to C<waitpid>, possibly blocking the process.  This wait for process
zero no longer occurs.  [perl #119893]

=item *

C<select> used to ignore magic on the fourth (timeout) argument, leading to
effects such as C<select> blocking indefinitely rather than the expected sleep
time.  This has now been fixed.  [perl #120102]

=item *

The class name in C<for my class $foo> is now parsed correctly.  In the case of
the second character of the class name being followed by a digit (e.g. 'a1b')
this used to give the error "Missing $ on loop variable".  [perl #120112]

=item *

Perl 5.18.0 accidentally disallowed C<-bareword> under C<use strict> and
C<use integer>.  This has been fixed.  [perl #120288]

=item *

C<-a> at the start of a line (or a hyphen with any single letter that is
not a filetest operator) no longer produces an erroneous 'Use of "-a"
without parentheses is ambiguous' warning.  [perl #120288]

=item *

Lvalue context is now properly propagated into bare blocks and C<if> and
C<else> blocks in lvalue subroutines.  Previously, arrays and hashes would
sometimes incorrectly be flattened when returned in lvalue list context, or
"Bizarre copy" errors could occur.  [perl #119797]

=item *

Lvalue context is now propagated to the branches of C<||> and C<&&> (and
their alphabetic equivalents, C<or> and C<and>).  This means
C<foreach (pos $x || pos $y) {...}> now allows C<pos> to be modified
through $_.

=item *

C<stat> and C<readline> remember the last handle used; the former
for the special C<_> filehandle, the latter for C<${^LAST_FH}>.
C<eval "*foo if 0"> where *foo was the last handle passed to C<stat>
or C<readline> could cause that handle to be forgotten if the
handle were not opened yet.  This has been fixed.

=item *

Various cases of C<delete $::{a}>, C<delete $::{ENV}> etc. causing a crash
have been fixed.  [perl #54044]

=item *

Setting C<$!> to EACCESS before calling C<require> could affect
C<require>'s behaviour.  This has been fixed.

=item *

The "Can't use \1 to mean $1 in expression" warning message now only occurs
on the right-hand (replacement) part of a substitution.  Formerly it could
happen in code embedded in the left-hand side, or in any other quote-like
operator.

=item *

Blessing into a reference (C<bless $thisref, $thatref>) has long been
disallowed, but magical scalars for the second like C<$/> and those tied
were exempt.  They no longer are.  [perl #119809]

=item *

Blessing into a reference was accidentally allowed in 5.18 if the class
argument were a blessed reference with stale method caches (i.e., whose
class had had subs defined since the last method call).  They are
disallowed once more, as in 5.16.

=item *

C<< $x->{key} >> where $x was declared as C<my Class $x> no longer crashes
if a Class::FIELDS subroutine stub has been declared.

=item *

C<@$obj{'key'}> and C<${$obj}{key}> used to be exempt from compile-time
field checking ("No such class field"; see L<fields>) but no longer are.

=item *

A nonexistent array element with a large index passed to a subroutine that
ties the array and then tries to access the element no longer results in a
crash.

=item *

Declaring a subroutine stub named NEGATIVE_INDICES no longer makes negative
array indices crash when the current package is a tied array class.

=item *

Declaring a C<require>, C<glob>, or C<do> subroutine stub in the
CORE::GLOBAL:: package no longer makes compilation of calls to the
corresponding functions crash.

=item *

Aliasing CORE::GLOBAL:: functions to constants stopped working in Perl 5.10
but has now been fixed.

=item *

When C<`...`> or C<qx/.../> calls a C<readpipe> override, double-quotish
interpolation now happens, as is the case when there is no override.
Previously, the presence of an override would make these quote-like
operators act like C<q{}>, suppressing interpolation.  [perl #115330]

=item *

C<<<<`...`> here-docs (with backticks as the delimiters) now call
C<readpipe> overrides.  [perl #119827]

=item *

C<&CORE::exit()> and C<&CORE::die()> now respect L<vmsish> hints.

=item *

Undefining a glob that triggers a DESTROY method that undefines the same
glob is now safe.  It used to produce "Attempt to free unreferenced glob
pointer" warnings and leak memory.

=item *

If subroutine redefinition (C<eval 'sub foo{}'> or C<newXS> for XS code)
triggers a DESTROY method on the sub that is being redefined, and that
method assigns a subroutine to the same slot (C<*foo = sub {}>), C<$_[0]>
is no longer left pointing to a freed scalar.  Now DESTROY is delayed until
the new subroutine has been installed.

=item *

On Windows, perl no longer calls CloseHandle() on a socket handle.  This makes
debugging easier on Windows by removing certain irrelevant bad handle
exceptions.  It also fixes a race condition that made socket functions randomly
fail in a Perl process with multiple OS threads, and possible test failures in
F<dist/IO/t/cachepropagate-tcp.t>.  [perl #120091/118059]

=item *

Formats involving UTF-8 encoded strings, or strange vars like ties,
overloads, or stringified refs (and in recent
perls, pure NOK vars) would generally do the wrong thing in formats
when the var is treated as a string and repeatedly chopped, as in
C<< ^<<<~~ >> and similar. This has now been resolved.
[perl #33832/45325/113868/119847/119849/119851]

=item *

C<< semctl(..., SETVAL, ...) >> would set the semaphore to the top
32-bits of the supplied integer instead of the bottom 32-bits on
64-bit big-endian systems. [perl #120635]

=item *

C<< readdir() >> now only sets C<$!> on error.  C<$!> is no longer set
to C<EBADF> when then terminating C<undef> is read from the directory
unless the system call sets C<$!>. [perl #118651]

=item *

C<&CORE::glob> no longer causes an intermittent crash due to perl's stack
getting corrupted. [perl #119993]

=item *

C<open> with layers that load modules (e.g., "<:encoding(utf8)") no longer
runs the risk of crashing due to stack corruption.

=item *

Perl 5.18 broke autoloading via C<< ->SUPER::foo >> method calls by looking
up AUTOLOAD from the current package rather than the current package's
superclass.  This has been fixed. [perl #120694]

=item *

A longstanding bug causing C<do {} until CONSTANT>, where the constant
holds a true value, to read unallocated memory has been resolved.  This
would usually happen after a syntax error.  In past versions of Perl it has
crashed intermittently. [perl #72406]

=item *

Fix HP-UX C<$!> failure. HP-UX strerror() returns an empty string for an
unknown error code.  This caused an assertion to fail under DEBUGGING
builds.  Now instead, the returned string for C<"$!"> contains text
indicating the code is for an unknown error.

=item *

Individually-tied elements of @INC (as in C<tie $INC[0]...>) are now
handled correctly.  Formerly, whether a sub returned by such a tied element
would be treated as a sub depended on whether a FETCH had occurred
previously.

=item *

C<getc> on a byte-sized handle after the same C<getc> operator had been
used on a utf8 handle used to treat the bytes as utf8, resulting in erratic
behavior (e.g., malformed UTF-8 warnings).

=item *

An initial C<{> at the beginning of a format argument line was always
interpreted as the beginning of a block prior to v5.18.  In Perl v5.18, it
started being treated as an ambiguous token.  The parser would guess
whether it was supposed to be an anonymous hash constructor or a block
based on the contents.  Now the previous behavious has been restored.
[perl #119973]

=item *

In Perl v5.18 C<undef *_; goto &sub> and C<local *_; goto &sub> started
crashing.  This has been fixed. [perl #119949]

=item *

Backticks (C< `` > or C< qx// >) combined with multiple threads on
Win32 could result in output sent to stdout on one thread being
captured by backticks of an external command in another thread.

This could occur for pseudo-forked processes too, as Win32's
pseudo-fork is implemented in terms of threads.  [perl #77672]

=item *

C<< open $fh, ">+", undef >> no longer leaks memory when TMPDIR is set
but points to a directory a temporary file cannot be created in.  [perl
#120951]

=item *

C< for ( $h{k} || '' ) > no longer auto-vivifies C<$h{k}>.  [perl
#120374]

=item *

On Windows machines, Perl now emulates the POSIX use of the environment
for locale initialization.  Previously, the environment was ignored.
See L<perllocale/ENVIRONMENT>.

=item *

Fixed a crash when destroying a self-referencing GLOB.  [perl #121242]

=back

=head1 Known Problems

=over 4

=item *

L<IO::Socket> is known to fail tests on AIX 5.3.  There is
L<a patch|https://rt.perl.org/Ticket/Display.html?id=120835> in the request
tracker, #120835, which may be applied to future releases.

=item *

The following modules are known to have test failures with this version of
Perl.  Patches have been submitted, so there will hopefully be new releases
soon:

=over

=item *

L<Data::Structure::Util> version 0.15

=item *

L<HTML::StripScripts> version 1.05

=item *

L<List::Gather> version 0.08.

=back

=back

=head1 Obituary

Diana Rosa, 27, of Rio de Janeiro, went to her long rest on May 10,
2014, along with the plush camel she kept hanging on her computer screen
all the time. She was a passionate Perl hacker who loved the language and its
community, and who never missed a Rio.pm event. She was a true artist, an
enthusiast about writing code, singing arias and graffiting walls. We'll never
forget you.

Greg McCarroll died on August 28, 2013.

Greg was well known for many good reasons. He was one of the organisers of
the first YAPC::Europe, which concluded with an unscheduled auction where he
frantically tried to raise extra money to avoid the conference making a
loss. It was Greg who mistakenly arrived for a london.pm meeting a week
late; some years later he was the one who sold the choice of official
meeting date at a YAPC::Europe auction, and eventually as glorious leader of
london.pm he got to inherit the irreverent confusion that he had created.

Always helpful, friendly and cheerfully optimistic, you will be missed, but
never forgotten.

=head1 Acknowledgements

Perl 5.20.0 represents approximately 12 months of development since Perl 5.18.0
and contains approximately 470,000 lines of changes across 2,900 files from 124
authors.

Excluding auto-generated files, documentation and release tools, there were
approximately 280,000 lines of changes to 1,800 .pm, .t, .c and .h files.

Perl continues to flourish into its third decade thanks to a vibrant community
of users and developers. The following people are known to have contributed the
improvements that became Perl 5.20.0:

Aaron Crane, Abhijit Menon-Sen, Abigail, Abir Viqar, Alan Haggai Alavi, Alan
Hourihane, Alexander Voronov, Alexandr Ciornii, Andy Dougherty, Anno Siegel,
Aristotle Pagaltzis, Arthur Axel 'fREW' Schmidt, Brad Gilbert, Brendan Byrd,
Brian Childs, Brian Fraser, Brian Gottreu, Chris 'BinGOs' Williams, Christian
Millour, Colin Kuskie, Craig A. Berry, Dabrien 'Dabe' Murphy, Dagfinn Ilmari
Mannsåker, Daniel Dragan, Darin McBride, David Golden, David Leadbeater, David
Mitchell, David Nicol, David Steinbrunner, Dennis Kaarsemaker, Dominic
Hargreaves, Ed Avis, Eric Brine, Evan Zacks, Father Chrysostomos, Florian
Ragwitz, François Perrad, Gavin Shelley, Gideon Israel Dsouza, Gisle Aas,
Graham Knop, H.Merijn Brand, Hauke D, Heiko Eissfeldt, Hiroo Hayashi, Hojung
Youn, James E Keenan, Jarkko Hietaniemi, Jerry D. Hedden, Jess Robinson, Jesse
Luehrs, Johan Vromans, John Gardiner Myers, John Goodyear, John P. Linderman,
John Peacock, kafka, Kang-min Liu, Karen Etheridge, Karl Williamson, Keedi Kim,
Kent Fredric, kevin dawson, Kevin Falcone, Kevin Ryde, Leon Timmermans, Lukas
Mai, Marc Simpson, Marcel Grünauer, Marco Peereboom, Marcus Holland-Moritz,
Mark Jason Dominus, Martin McGrath, Matthew Horsfall, Max Maischein, Mike
Doherty, Moritz Lenz, Nathan Glenn, Nathan Trapuzzano, Neil Bowers, Neil
Williams, Nicholas Clark, Niels Thykier, Niko Tyni, Olivier Mengué, Owain G.
Ainsworth, Paul Green, Paul Johnson, Peter John Acklam, Peter Martini, Peter
Rabbitson, Petr Písař, Philip Boulain, Philip Guenther, Piotr Roszatycki,
Rafael Garcia-Suarez, Reini Urban, Reuben Thomas, Ricardo Signes, Ruslan
Zakirov, Sergey Alekseev, Shirakata Kentaro, Shlomi Fish, Slaven Rezic,
Smylers, Steffen Müller, Steve Hay, Sullivan Beck, Thomas Sibley, Tobias
Leich, Toby Inkster, Tokuhiro Matsuno, Tom Christiansen, Tom Hukins, Tony Cook,
Victor Efimov, Viktor Turskyi, Vladimir Timofeev, YAMASHINA Hio, Yves Orton,
Zefram, Zsbán Ambrus, Ævar Arnfjörð Bjarmason.

The list above is almost certainly incomplete as it is automatically generated
from version control history. In particular, it does not include the names of
the (very much appreciated) contributors who reported issues to the Perl bug
tracker.

Many of the changes included in this version originated in the CPAN modules
included in Perl's core. We're grateful to the entire CPAN community for
helping Perl to flourish.

For a more complete list of all of Perl's historical contributors, please see
the F<AUTHORS> file in the Perl source distribution.

=head1 Reporting Bugs

If you find what you think is a bug, you might check the articles recently
posted to the comp.lang.perl.misc newsgroup and the perl bug database at
http://rt.perl.org/perlbug/ .  There may also be information at
http://www.perl.org/ , the Perl Home Page.

If you believe you have an unreported bug, please run the L<perlbug> program
included with your release.  Be sure to trim your bug down to a tiny but
sufficient test case.  Your bug report, along with the output of C<perl -V>,
will be sent off to perlbug@perl.org to be analysed by the Perl porting team.

If the bug you are reporting has security implications, which make it
inappropriate to send to a publicly archived mailing list, then please send it
to perl5-security-report@perl.org.  This points to a closed subscription
unarchived mailing list, which includes all the core committers, who will be
able to help assess the impact of issues, figure out a resolution, and help
co-ordinate the release of patches to mitigate or fix the problem across all
platforms on which Perl is supported.  Please only use this address for
security issues in the Perl core, not for modules independently distributed on
CPAN.

=head1 SEE ALSO

The F<Changes> file for an explanation of how to view exhaustive details on
what changed.

The F<INSTALL> file for how to build Perl.

The F<README> file for general stuff.

The F<Artistic> and F<Copying> files for copyright information.

=cut