1package Module::CoreList::Utils; 2 3use strict; 4use warnings; 5use Module::CoreList; 6 7our $VERSION = '5.20250118_40'; 8our %utilities; 9 10sub utilities { 11 my $perl = shift; 12 $perl = shift if eval { $perl->isa(__PACKAGE__) }; 13 return unless $perl or exists $utilities{$perl}; 14 return sort keys %{ $utilities{$perl} }; 15} 16 17sub _released_order { # Sort helper, to make '?' sort after everything else 18 (substr($Module::CoreList::released{$a}, 0, 1) eq "?") 19 ? ((substr($Module::CoreList::released{$b}, 0, 1) eq "?") 20 ? 0 21 : 1) 22 : ((substr($Module::CoreList::released{$b}, 0, 1) eq "?") 23 ? -1 24 : $Module::CoreList::released{$a} cmp $Module::CoreList::released{$b} ) 25} 26 27sub first_release_raw { 28 my $util = shift; 29 $util = shift if eval { $util->isa(__PACKAGE__) }; 30 #and scalar @_ and $_[0] =~ m#\A[a-zA-Z_][0-9a-zA-Z_]*(?:(::|')[0-9a-zA-Z_]+)*\z#; 31 my $version = shift; 32 33 my @perls = $version 34 ? grep { exists $utilities{$_}{ $util } && 35 $utilities{$_}{ $util } ge $version } keys %utilities 36 : grep { exists $utilities{$_}{ $util } } keys %utilities; 37 38 return grep { exists $Module::CoreList::released{$_} } @perls; 39} 40 41sub first_release_by_date { 42 my @perls = &first_release_raw; 43 return unless @perls; 44 return (sort _released_order @perls)[0]; 45} 46 47sub first_release { 48 my @perls = &first_release_raw; 49 return unless @perls; 50 return (sort { $a cmp $b } @perls)[0]; 51} 52 53sub removed_from { 54 my @perls = &removed_raw; 55 return shift @perls; 56} 57 58sub removed_from_by_date { 59 my @perls = sort _released_order &removed_raw; 60 return shift @perls; 61} 62 63sub removed_raw { 64 my $util = shift; 65 $util = shift if eval { $util->isa(__PACKAGE__) }; 66 return unless my @perls = sort { $a cmp $b } first_release_raw($util); 67 @perls = grep { exists $Module::CoreList::released{$_} } @perls; 68 my $last = pop @perls; 69 my @removed = grep { $_ > $last } sort { $a cmp $b } keys %utilities; 70 return @removed; 71} 72 73my %delta = ( 74 5 => { 75 changed => { 76 'a2p' => '1', 77 'c2ph' => '1', 78 'cppstdin' => '1', 79 'find2perl' => '1', 80 'pstruct' => '1', 81 's2p' => '1', 82 }, 83 removed => { 84 } 85 }, 86 87 5.001 => { 88 delta_from => 5, 89 changed => { 90 'h2xs' => '1', 91 }, 92 removed => { 93 } 94 }, 95 96 5.002 => { 97 delta_from => 5.001, 98 changed => { 99 'h2ph' => '1', 100 'perlbug' => '1', 101 'perldoc' => '1', 102 'pod2html' => '1', 103 'pod2latex' => '1', 104 'pod2man' => '1', 105 'pod2text' => '1', 106 }, 107 removed => { 108 } 109 }, 110 111 5.00307 => { 112 delta_from => 5.002, 113 changed => { 114 'pl2pm' => '1', 115 }, 116 removed => { 117 'cppstdin' => 1, 118 'pstruct' => 1, 119 } 120 }, 121 122 5.004 => { 123 delta_from => 5.00307, 124 changed => { 125 'splain' => '1', 126 }, 127 removed => { 128 } 129 }, 130 131 5.005 => { 132 delta_from => 5.00405, 133 changed => { 134 'perlcc' => '1', 135 }, 136 removed => { 137 } 138 }, 139 140 5.00503 => { 141 delta_from => 5.005, 142 changed => { 143 }, 144 removed => { 145 } 146 }, 147 148 5.00405 => { 149 delta_from => 5.004, 150 changed => { 151 }, 152 removed => { 153 } 154 }, 155 156 5.006 => { 157 delta_from => 5.00504, 158 changed => { 159 'dprofpp' => '1', 160 'pod2usage' => '1', 161 'podchecker' => '1', 162 'podselect' => '1', 163 'pstruct' => '1', 164 }, 165 removed => { 166 } 167 }, 168 169 5.006001 => { 170 delta_from => 5.006, 171 changed => { 172 }, 173 removed => { 174 } 175 }, 176 177 5.007003 => { 178 delta_from => 5.006002, 179 changed => { 180 'libnetcfg' => '1', 181 'perlivp' => '1', 182 'psed' => '1', 183 'xsubpp' => '1', 184 }, 185 removed => { 186 } 187 }, 188 189 5.008 => { 190 delta_from => 5.007003, 191 changed => { 192 'enc2xs' => '1', 193 'piconv' => '1', 194 }, 195 removed => { 196 } 197 }, 198 199 5.008001 => { 200 delta_from => 5.008, 201 changed => { 202 'cpan' => '1', 203 }, 204 removed => { 205 } 206 }, 207 208 5.009 => { 209 delta_from => 5.008009, 210 changed => { 211 }, 212 removed => { 213 'corelist' => 1, 214 'instmodsh' => 1, 215 'prove' => 1, 216 } 217 }, 218 219 5.008002 => { 220 delta_from => 5.008001, 221 changed => { 222 }, 223 removed => { 224 } 225 }, 226 227 5.006002 => { 228 delta_from => 5.006001, 229 changed => { 230 }, 231 removed => { 232 } 233 }, 234 235 5.008003 => { 236 delta_from => 5.008002, 237 changed => { 238 'instmodsh' => '1', 239 'prove' => '1', 240 }, 241 removed => { 242 } 243 }, 244 245 5.00504 => { 246 delta_from => 5.00503, 247 changed => { 248 }, 249 removed => { 250 } 251 }, 252 253 5.009001 => { 254 delta_from => 5.009, 255 changed => { 256 'instmodsh' => '1', 257 'prove' => '1', 258 }, 259 removed => { 260 } 261 }, 262 263 5.008004 => { 264 delta_from => 5.008003, 265 changed => { 266 }, 267 removed => { 268 } 269 }, 270 271 5.008005 => { 272 delta_from => 5.008004, 273 changed => { 274 }, 275 removed => { 276 } 277 }, 278 279 5.008006 => { 280 delta_from => 5.008005, 281 changed => { 282 }, 283 removed => { 284 } 285 }, 286 287 5.009002 => { 288 delta_from => 5.009001, 289 changed => { 290 'corelist' => '1', 291 }, 292 removed => { 293 } 294 }, 295 296 5.008007 => { 297 delta_from => 5.008006, 298 changed => { 299 }, 300 removed => { 301 } 302 }, 303 304 5.009003 => { 305 delta_from => 5.009002, 306 changed => { 307 'ptar' => '1', 308 'ptardiff' => '1', 309 'shasum' => '1', 310 }, 311 removed => { 312 } 313 }, 314 315 5.008008 => { 316 delta_from => 5.008007, 317 changed => { 318 }, 319 removed => { 320 } 321 }, 322 323 5.009004 => { 324 delta_from => 5.009003, 325 changed => { 326 'config_data' => '1', 327 }, 328 removed => { 329 } 330 }, 331 332 5.009005 => { 333 delta_from => 5.009004, 334 changed => { 335 'cpan2dist' => '1', 336 'cpanp' => '1', 337 'cpanp-run-perl' => '1', 338 }, 339 removed => { 340 'perlcc' => 1, 341 } 342 }, 343 344 5.010000 => { 345 delta_from => 5.009005, 346 changed => { 347 }, 348 removed => { 349 } 350 }, 351 352 5.008009 => { 353 delta_from => 5.008008, 354 changed => { 355 'corelist' => '1', 356 }, 357 removed => { 358 } 359 }, 360 361 5.010001 => { 362 delta_from => 5.010000, 363 changed => { 364 }, 365 removed => { 366 } 367 }, 368 369 5.011 => { 370 delta_from => 5.010001, 371 changed => { 372 }, 373 removed => { 374 } 375 }, 376 377 5.011001 => { 378 delta_from => 5.011, 379 changed => { 380 }, 381 removed => { 382 } 383 }, 384 385 5.011002 => { 386 delta_from => 5.011001, 387 changed => { 388 'perlthanks' => '1', 389 }, 390 removed => { 391 } 392 }, 393 394 5.011003 => { 395 delta_from => 5.011002, 396 changed => { 397 }, 398 removed => { 399 } 400 }, 401 402 5.011004 => { 403 delta_from => 5.011003, 404 changed => { 405 }, 406 removed => { 407 } 408 }, 409 410 5.011005 => { 411 delta_from => 5.011004, 412 changed => { 413 }, 414 removed => { 415 } 416 }, 417 418 5.012 => { 419 delta_from => 5.011005, 420 changed => { 421 }, 422 removed => { 423 } 424 }, 425 426 5.013 => { 427 delta_from => 5.012005, 428 changed => { 429 }, 430 removed => { 431 } 432 }, 433 434 5.012001 => { 435 delta_from => 5.012, 436 changed => { 437 }, 438 removed => { 439 } 440 }, 441 442 5.013001 => { 443 delta_from => 5.013, 444 changed => { 445 }, 446 removed => { 447 } 448 }, 449 450 5.013002 => { 451 delta_from => 5.013001, 452 changed => { 453 }, 454 removed => { 455 } 456 }, 457 458 5.013003 => { 459 delta_from => 5.013002, 460 changed => { 461 }, 462 removed => { 463 } 464 }, 465 466 5.013004 => { 467 delta_from => 5.013003, 468 changed => { 469 }, 470 removed => { 471 } 472 }, 473 474 5.012002 => { 475 delta_from => 5.012001, 476 changed => { 477 }, 478 removed => { 479 } 480 }, 481 482 5.013005 => { 483 delta_from => 5.013004, 484 changed => { 485 }, 486 removed => { 487 } 488 }, 489 490 5.013006 => { 491 delta_from => 5.013005, 492 changed => { 493 }, 494 removed => { 495 } 496 }, 497 498 5.013007 => { 499 delta_from => 5.013006, 500 changed => { 501 'ptargrep' => '1', 502 }, 503 removed => { 504 } 505 }, 506 507 5.013008 => { 508 delta_from => 5.013007, 509 changed => { 510 }, 511 removed => { 512 } 513 }, 514 515 5.013009 => { 516 delta_from => 5.013008, 517 changed => { 518 'json_pp' => '1', 519 }, 520 removed => { 521 } 522 }, 523 524 5.012003 => { 525 delta_from => 5.012002, 526 changed => { 527 }, 528 removed => { 529 } 530 }, 531 532 5.013010 => { 533 delta_from => 5.013009, 534 changed => { 535 }, 536 removed => { 537 } 538 }, 539 540 5.013011 => { 541 delta_from => 5.013010, 542 changed => { 543 }, 544 removed => { 545 } 546 }, 547 548 5.014 => { 549 delta_from => 5.013011, 550 changed => { 551 }, 552 removed => { 553 } 554 }, 555 556 5.014001 => { 557 delta_from => 5.014, 558 changed => { 559 }, 560 removed => { 561 } 562 }, 563 564 5.015 => { 565 delta_from => 5.014004, 566 changed => { 567 }, 568 removed => { 569 'dprofpp' => 1, 570 } 571 }, 572 573 5.012004 => { 574 delta_from => 5.012003, 575 changed => { 576 }, 577 removed => { 578 } 579 }, 580 581 5.015001 => { 582 delta_from => 5.015, 583 changed => { 584 }, 585 removed => { 586 } 587 }, 588 589 5.015002 => { 590 delta_from => 5.015001, 591 changed => { 592 }, 593 removed => { 594 } 595 }, 596 597 5.015003 => { 598 delta_from => 5.015002, 599 changed => { 600 }, 601 removed => { 602 } 603 }, 604 605 5.014002 => { 606 delta_from => 5.014001, 607 changed => { 608 }, 609 removed => { 610 } 611 }, 612 613 5.015004 => { 614 delta_from => 5.015003, 615 changed => { 616 }, 617 removed => { 618 } 619 }, 620 621 5.015005 => { 622 delta_from => 5.015004, 623 changed => { 624 }, 625 removed => { 626 } 627 }, 628 629 5.015006 => { 630 delta_from => 5.015005, 631 changed => { 632 'zipdetails' => '1', 633 }, 634 removed => { 635 } 636 }, 637 638 5.015007 => { 639 delta_from => 5.015006, 640 changed => { 641 }, 642 removed => { 643 } 644 }, 645 646 5.015008 => { 647 delta_from => 5.015007, 648 changed => { 649 }, 650 removed => { 651 } 652 }, 653 654 5.015009 => { 655 delta_from => 5.015008, 656 changed => { 657 }, 658 removed => { 659 } 660 }, 661 662 5.016 => { 663 delta_from => 5.015009, 664 changed => { 665 }, 666 removed => { 667 } 668 }, 669 670 5.017 => { 671 delta_from => 5.016003, 672 changed => { 673 }, 674 removed => { 675 } 676 }, 677 678 5.017001 => { 679 delta_from => 5.017, 680 changed => { 681 }, 682 removed => { 683 } 684 }, 685 686 5.017002 => { 687 delta_from => 5.017001, 688 changed => { 689 }, 690 removed => { 691 } 692 }, 693 694 5.016001 => { 695 delta_from => 5.016, 696 changed => { 697 }, 698 removed => { 699 } 700 }, 701 702 5.017003 => { 703 delta_from => 5.017002, 704 changed => { 705 }, 706 removed => { 707 } 708 }, 709 710 5.017004 => { 711 delta_from => 5.017003, 712 changed => { 713 }, 714 removed => { 715 } 716 }, 717 718 5.014003 => { 719 delta_from => 5.014002, 720 changed => { 721 }, 722 removed => { 723 } 724 }, 725 726 5.017005 => { 727 delta_from => 5.017004, 728 changed => { 729 }, 730 removed => { 731 } 732 }, 733 734 5.016002 => { 735 delta_from => 5.016001, 736 changed => { 737 }, 738 removed => { 739 } 740 }, 741 742 5.012005 => { 743 delta_from => 5.012004, 744 changed => { 745 }, 746 removed => { 747 } 748 }, 749 750 5.017006 => { 751 delta_from => 5.017005, 752 changed => { 753 }, 754 removed => { 755 } 756 }, 757 758 5.017007 => { 759 delta_from => 5.017006, 760 changed => { 761 }, 762 removed => { 763 } 764 }, 765 766 5.017008 => { 767 delta_from => 5.017007, 768 changed => { 769 }, 770 removed => { 771 } 772 }, 773 774 5.017009 => { 775 delta_from => 5.017008, 776 changed => { 777 }, 778 removed => { 779 } 780 }, 781 782 5.014004 => { 783 delta_from => 5.014003, 784 changed => { 785 }, 786 removed => { 787 } 788 }, 789 790 5.016003 => { 791 delta_from => 5.016002, 792 changed => { 793 }, 794 removed => { 795 } 796 }, 797 798 5.017010 => { 799 delta_from => 5.017009, 800 changed => { 801 }, 802 removed => { 803 } 804 }, 805 806 5.017011 => { 807 delta_from => 5.017010, 808 changed => { 809 }, 810 removed => { 811 } 812 }, 813 5.018000 => { 814 delta_from => 5.017011, 815 changed => { 816 }, 817 removed => { 818 } 819 }, 820 5.018001 => { 821 delta_from => 5.018000, 822 changed => { 823 }, 824 removed => { 825 } 826 }, 827 5.018002 => { 828 delta_from => 5.018001, 829 changed => { 830 }, 831 removed => { 832 } 833 }, 834 5.018003 => { 835 delta_from => 5.018000, 836 changed => { 837 }, 838 removed => { 839 } 840 }, 841 5.018004 => { 842 delta_from => 5.018000, 843 changed => { 844 }, 845 removed => { 846 } 847 }, 848 5.019000 => { 849 delta_from => 5.018000, 850 changed => { 851 }, 852 removed => { 853 'cpan2dist' => '1', 854 'cpanp' => '1', 855 'cpanp-run-perl' => '1', 856 'pod2latex' => '1', 857 } 858 }, 859 5.019001 => { 860 delta_from => 5.019000, 861 changed => { 862 }, 863 removed => { 864 } 865 }, 866 5.019002 => { 867 delta_from => 5.019001, 868 changed => { 869 }, 870 removed => { 871 } 872 }, 873 5.019003 => { 874 delta_from => 5.019002, 875 changed => { 876 }, 877 removed => { 878 } 879 }, 880 5.019004 => { 881 delta_from => 5.019003, 882 changed => { 883 }, 884 removed => { 885 } 886 }, 887 5.019005 => { 888 delta_from => 5.019004, 889 changed => { 890 }, 891 removed => { 892 } 893 }, 894 5.019006 => { 895 delta_from => 5.019005, 896 changed => { 897 }, 898 removed => { 899 } 900 }, 901 5.019007 => { 902 delta_from => 5.019006, 903 changed => { 904 }, 905 removed => { 906 } 907 }, 908 5.019008 => { 909 delta_from => 5.019007, 910 changed => { 911 }, 912 removed => { 913 } 914 }, 915 5.019009 => { 916 delta_from => 5.019008, 917 changed => { 918 }, 919 removed => { 920 } 921 }, 922 5.019010 => { 923 delta_from => 5.019009, 924 changed => { 925 }, 926 removed => { 927 } 928 }, 929 5.019011 => { 930 delta_from => 5.019010, 931 changed => { 932 }, 933 removed => { 934 } 935 }, 936 5.020000 => { 937 delta_from => 5.019011, 938 changed => { 939 }, 940 removed => { 941 } 942 }, 943 5.021000 => { 944 delta_from => 5.020000, 945 changed => { 946 }, 947 removed => { 948 } 949 }, 950 5.021001 => { 951 delta_from => 5.021000, 952 changed => { 953 }, 954 removed => { 955 'a2p' => 1, 956 'config_data' => 1, 957 'find2perl' => 1, 958 'psed' => 1, 959 's2p' => 1, 960 } 961 }, 962 5.021002 => { 963 delta_from => 5.021001, 964 changed => { 965 }, 966 removed => { 967 } 968 }, 969 5.021003 => { 970 delta_from => 5.021002, 971 changed => { 972 }, 973 removed => { 974 } 975 }, 976 5.020001 => { 977 delta_from => 5.02, 978 changed => { 979 }, 980 removed => { 981 } 982 }, 983 5.021004 => { 984 delta_from => 5.021003, 985 changed => { 986 }, 987 removed => { 988 } 989 }, 990 5.021005 => { 991 delta_from => 5.021004, 992 changed => { 993 }, 994 removed => { 995 } 996 }, 997 5.021006 => { 998 delta_from => 5.021005, 999 changed => { 1000 }, 1001 removed => { 1002 } 1003 }, 1004 5.021007 => { 1005 delta_from => 5.021006, 1006 changed => { 1007 }, 1008 removed => { 1009 } 1010 }, 1011 5.021008 => { 1012 delta_from => 5.021007, 1013 changed => { 1014 }, 1015 removed => { 1016 } 1017 }, 1018 5.020002 => { 1019 delta_from => 5.020001, 1020 changed => { 1021 }, 1022 removed => { 1023 } 1024 }, 1025 5.021009 => { 1026 delta_from => 5.021008, 1027 changed => { 1028 'encguess' => '1', 1029 }, 1030 removed => { 1031 } 1032 }, 1033 5.021010 => { 1034 delta_from => 5.021009, 1035 changed => { 1036 }, 1037 removed => { 1038 } 1039 }, 1040 5.021011 => { 1041 delta_from => 5.02101, 1042 changed => { 1043 }, 1044 removed => { 1045 } 1046 }, 1047 5.022000 => { 1048 delta_from => 5.021011, 1049 changed => { 1050 }, 1051 removed => { 1052 } 1053 }, 1054 5.023000 => { 1055 delta_from => 5.022000, 1056 changed => { 1057 }, 1058 removed => { 1059 } 1060 }, 1061 5.023001 => { 1062 delta_from => 5.023, 1063 changed => { 1064 }, 1065 removed => { 1066 } 1067 }, 1068 5.023002 => { 1069 delta_from => 5.023001, 1070 changed => { 1071 }, 1072 removed => { 1073 } 1074 }, 1075 5.020003 => { 1076 delta_from => 5.020002, 1077 changed => { 1078 }, 1079 removed => { 1080 } 1081 }, 1082 5.023003 => { 1083 delta_from => 5.023002, 1084 changed => { 1085 }, 1086 removed => { 1087 } 1088 }, 1089 5.023004 => { 1090 delta_from => 5.023003, 1091 changed => { 1092 }, 1093 removed => { 1094 } 1095 }, 1096 5.023005 => { 1097 delta_from => 5.023004, 1098 changed => { 1099 }, 1100 removed => { 1101 } 1102 }, 1103 5.022001 => { 1104 delta_from => 5.022, 1105 changed => { 1106 }, 1107 removed => { 1108 } 1109 }, 1110 5.023006 => { 1111 delta_from => 5.023005, 1112 changed => { 1113 }, 1114 removed => { 1115 } 1116 }, 1117 5.023007 => { 1118 delta_from => 5.023006, 1119 changed => { 1120 }, 1121 removed => { 1122 } 1123 }, 1124 5.023008 => { 1125 delta_from => 5.023007, 1126 changed => { 1127 }, 1128 removed => { 1129 } 1130 }, 1131 5.023009 => { 1132 delta_from => 5.023008, 1133 changed => { 1134 }, 1135 removed => { 1136 } 1137 }, 1138 5.022002 => { 1139 delta_from => 5.022001, 1140 changed => { 1141 }, 1142 removed => { 1143 } 1144 }, 1145 5.024000 => { 1146 delta_from => 5.023009, 1147 changed => { 1148 }, 1149 removed => { 1150 } 1151 }, 1152 5.025000 => { 1153 delta_from => 5.024000, 1154 changed => { 1155 }, 1156 removed => { 1157 } 1158 }, 1159 5.025001 => { 1160 delta_from => 5.025000, 1161 changed => { 1162 }, 1163 removed => { 1164 } 1165 }, 1166 5.025002 => { 1167 delta_from => 5.025001, 1168 changed => { 1169 }, 1170 removed => { 1171 } 1172 }, 1173 5.025003 => { 1174 delta_from => 5.025002, 1175 changed => { 1176 }, 1177 removed => { 1178 } 1179 }, 1180 5.025004 => { 1181 delta_from => 5.025003, 1182 changed => { 1183 }, 1184 removed => { 1185 } 1186 }, 1187 5.025005 => { 1188 delta_from => 5.025004, 1189 changed => { 1190 }, 1191 removed => { 1192 } 1193 }, 1194 5.025006 => { 1195 delta_from => 5.025005, 1196 changed => { 1197 }, 1198 removed => { 1199 } 1200 }, 1201 5.025007 => { 1202 delta_from => 5.025006, 1203 changed => { 1204 }, 1205 removed => { 1206 } 1207 }, 1208 5.025008 => { 1209 delta_from => 5.025007, 1210 changed => { 1211 }, 1212 removed => { 1213 } 1214 }, 1215 5.022003 => { 1216 delta_from => 5.022002, 1217 changed => { 1218 }, 1219 removed => { 1220 } 1221 }, 1222 5.024001 => { 1223 delta_from => 5.024000, 1224 changed => { 1225 }, 1226 removed => { 1227 } 1228 }, 1229 5.025009 => { 1230 delta_from => 5.025008, 1231 changed => { 1232 }, 1233 removed => { 1234 'c2ph' => 1, 1235 'pstruct' => 1, 1236 } 1237 }, 1238 5.025010 => { 1239 delta_from => 5.025009, 1240 changed => { 1241 }, 1242 removed => { 1243 } 1244 }, 1245 5.025011 => { 1246 delta_from => 5.025010, 1247 changed => { 1248 }, 1249 removed => { 1250 } 1251 }, 1252 5.025012 => { 1253 delta_from => 5.025011, 1254 changed => { 1255 }, 1256 removed => { 1257 } 1258 }, 1259 5.026000 => { 1260 delta_from => 5.025012, 1261 changed => { 1262 }, 1263 removed => { 1264 } 1265 }, 1266 5.027000 => { 1267 delta_from => 5.026000, 1268 changed => { 1269 }, 1270 removed => { 1271 } 1272 }, 1273 5.027001 => { 1274 delta_from => 5.027000, 1275 changed => { 1276 }, 1277 removed => { 1278 } 1279 }, 1280 5.022004 => { 1281 delta_from => 5.022003, 1282 changed => { 1283 }, 1284 removed => { 1285 } 1286 }, 1287 5.024002 => { 1288 delta_from => 5.024001, 1289 changed => { 1290 }, 1291 removed => { 1292 } 1293 }, 1294 5.027002 => { 1295 delta_from => 5.027001, 1296 changed => { 1297 }, 1298 removed => { 1299 } 1300 }, 1301 5.027003 => { 1302 delta_from => 5.027002, 1303 changed => { 1304 }, 1305 removed => { 1306 } 1307 }, 1308 5.027004 => { 1309 delta_from => 5.027003, 1310 changed => { 1311 }, 1312 removed => { 1313 } 1314 }, 1315 5.024003 => { 1316 delta_from => 5.024002, 1317 changed => { 1318 }, 1319 removed => { 1320 } 1321 }, 1322 5.026001 => { 1323 delta_from => 5.026000, 1324 changed => { 1325 }, 1326 removed => { 1327 } 1328 }, 1329 5.027005 => { 1330 delta_from => 5.027004, 1331 changed => { 1332 }, 1333 removed => { 1334 } 1335 }, 1336 5.027006 => { 1337 delta_from => 5.027005, 1338 changed => { 1339 }, 1340 removed => { 1341 } 1342 }, 1343 5.027007 => { 1344 delta_from => 5.027006, 1345 changed => { 1346 }, 1347 removed => { 1348 } 1349 }, 1350 5.027008 => { 1351 delta_from => 5.027007, 1352 changed => { 1353 }, 1354 removed => { 1355 } 1356 }, 1357 5.027009 => { 1358 delta_from => 5.027008, 1359 changed => { 1360 }, 1361 removed => { 1362 } 1363 }, 1364 5.027010 => { 1365 delta_from => 5.027009, 1366 changed => { 1367 }, 1368 removed => { 1369 } 1370 }, 1371 5.024004 => { 1372 delta_from => 5.024003, 1373 changed => { 1374 }, 1375 removed => { 1376 } 1377 }, 1378 5.026002 => { 1379 delta_from => 5.026001, 1380 changed => { 1381 }, 1382 removed => { 1383 } 1384 }, 1385 5.027011 => { 1386 delta_from => 5.027010, 1387 changed => { 1388 }, 1389 removed => { 1390 } 1391 }, 1392 5.028000 => { 1393 delta_from => 5.027011, 1394 changed => { 1395 }, 1396 removed => { 1397 } 1398 }, 1399 5.029000 => { 1400 delta_from => 5.028, 1401 changed => { 1402 }, 1403 removed => { 1404 } 1405 }, 1406 5.029001 => { 1407 delta_from => 5.029000, 1408 changed => { 1409 }, 1410 removed => { 1411 } 1412 }, 1413 5.029002 => { 1414 delta_from => 5.029001, 1415 changed => { 1416 }, 1417 removed => { 1418 } 1419 }, 1420 5.029003 => { 1421 delta_from => 5.029002, 1422 changed => { 1423 }, 1424 removed => { 1425 } 1426 }, 1427 5.029004 => { 1428 delta_from => 5.029003, 1429 changed => { 1430 }, 1431 removed => { 1432 } 1433 }, 1434 5.029005 => { 1435 delta_from => 5.029004, 1436 changed => { 1437 }, 1438 removed => { 1439 } 1440 }, 1441 5.026003 => { 1442 delta_from => 5.026002, 1443 changed => { 1444 }, 1445 removed => { 1446 } 1447 }, 1448 5.028001 => { 1449 delta_from => 5.028000, 1450 changed => { 1451 }, 1452 removed => { 1453 } 1454 }, 1455 5.029006 => { 1456 delta_from => 5.029005, 1457 changed => { 1458 }, 1459 removed => { 1460 } 1461 }, 1462 5.029007 => { 1463 delta_from => 5.029006, 1464 changed => { 1465 }, 1466 removed => { 1467 } 1468 }, 1469 5.029008 => { 1470 delta_from => 5.029007, 1471 changed => { 1472 }, 1473 removed => { 1474 } 1475 }, 1476 5.029009 => { 1477 delta_from => 5.029008, 1478 changed => { 1479 }, 1480 removed => { 1481 } 1482 }, 1483 5.028002 => { 1484 delta_from => 5.028001, 1485 changed => { 1486 }, 1487 removed => { 1488 } 1489 }, 1490 5.029010 => { 1491 delta_from => 5.029009, 1492 changed => { 1493 }, 1494 removed => { 1495 } 1496 }, 1497 5.030000 => { 1498 delta_from => 5.029010, 1499 changed => { 1500 }, 1501 removed => { 1502 } 1503 }, 1504 5.031000 => { 1505 delta_from => 5.03, 1506 changed => { 1507 }, 1508 removed => { 1509 } 1510 }, 1511 5.031001 => { 1512 delta_from => 5.031, 1513 changed => { 1514 }, 1515 removed => { 1516 'podselect' => 1, 1517 } 1518 }, 1519 5.031002 => { 1520 delta_from => 5.031001, 1521 changed => { 1522 }, 1523 removed => { 1524 } 1525 }, 1526 5.031003 => { 1527 delta_from => 5.031002, 1528 changed => { 1529 }, 1530 removed => { 1531 } 1532 }, 1533 5.031004 => { 1534 delta_from => 5.031003, 1535 changed => { 1536 }, 1537 removed => { 1538 } 1539 }, 1540 5.031005 => { 1541 delta_from => 5.031004, 1542 changed => { 1543 }, 1544 removed => { 1545 } 1546 }, 1547 5.030001 => { 1548 delta_from => 5.03, 1549 changed => { 1550 }, 1551 removed => { 1552 } 1553 }, 1554 5.031006 => { 1555 delta_from => 5.031005, 1556 changed => { 1557 'streamzip' => '1', 1558 }, 1559 removed => { 1560 } 1561 }, 1562 5.031007 => { 1563 delta_from => 5.031006, 1564 changed => { 1565 }, 1566 removed => { 1567 } 1568 }, 1569 5.031008 => { 1570 delta_from => 5.031007, 1571 changed => { 1572 }, 1573 removed => { 1574 } 1575 }, 1576 5.031009 => { 1577 delta_from => 5.031008, 1578 changed => { 1579 }, 1580 removed => { 1581 } 1582 }, 1583 5.030002 => { 1584 delta_from => 5.030001, 1585 changed => { 1586 }, 1587 removed => { 1588 } 1589 }, 1590 5.031010 => { 1591 delta_from => 5.031009, 1592 changed => { 1593 }, 1594 removed => { 1595 } 1596 }, 1597 5.031011 => { 1598 delta_from => 5.031010, 1599 changed => { 1600 }, 1601 removed => { 1602 } 1603 }, 1604 5.028003 => { 1605 delta_from => 5.028002, 1606 changed => { 1607 }, 1608 removed => { 1609 } 1610 }, 1611 5.030003 => { 1612 delta_from => 5.030002, 1613 changed => { 1614 }, 1615 removed => { 1616 } 1617 }, 1618 5.032000 => { 1619 delta_from => 5.031011, 1620 changed => { 1621 }, 1622 removed => { 1623 } 1624 }, 1625 5.033000 => { 1626 delta_from => 5.032, 1627 changed => { 1628 }, 1629 removed => { 1630 } 1631 }, 1632 5.033001 => { 1633 delta_from => 5.033000, 1634 changed => { 1635 }, 1636 removed => { 1637 } 1638 }, 1639 5.033002 => { 1640 delta_from => 5.033001, 1641 changed => { 1642 }, 1643 removed => { 1644 } 1645 }, 1646 5.033003 => { 1647 delta_from => 5.033002, 1648 changed => { 1649 }, 1650 removed => { 1651 } 1652 }, 1653 5.033004 => { 1654 delta_from => 5.033003, 1655 changed => { 1656 }, 1657 removed => { 1658 } 1659 }, 1660 5.033005 => { 1661 delta_from => 5.033004, 1662 changed => { 1663 }, 1664 removed => { 1665 } 1666 }, 1667 5.033006 => { 1668 delta_from => 5.033005, 1669 changed => { 1670 }, 1671 removed => { 1672 } 1673 }, 1674 5.032001 => { 1675 delta_from => 5.032000, 1676 changed => { 1677 }, 1678 removed => { 1679 } 1680 }, 1681 5.033007 => { 1682 delta_from => 5.033006, 1683 changed => { 1684 }, 1685 removed => { 1686 } 1687 }, 1688 5.033008 => { 1689 delta_from => 5.033007, 1690 changed => { 1691 }, 1692 removed => { 1693 } 1694 }, 1695 5.033009 => { 1696 delta_from => 5.033008, 1697 changed => { 1698 }, 1699 removed => { 1700 } 1701 }, 1702 5.034000 => { 1703 delta_from => 5.033009, 1704 changed => { 1705 }, 1706 removed => { 1707 } 1708 }, 1709 5.035000 => { 1710 delta_from => 5.034000, 1711 changed => { 1712 }, 1713 removed => { 1714 } 1715 }, 1716 5.035001 => { 1717 delta_from => 5.035, 1718 changed => { 1719 }, 1720 removed => { 1721 } 1722 }, 1723 5.035002 => { 1724 delta_from => 5.035001, 1725 changed => { 1726 }, 1727 removed => { 1728 } 1729 }, 1730 5.035003 => { 1731 delta_from => 5.035002, 1732 changed => { 1733 }, 1734 removed => { 1735 } 1736 }, 1737 5.035004 => { 1738 delta_from => 5.035003, 1739 changed => { 1740 }, 1741 removed => { 1742 } 1743 }, 1744 5.035005 => { 1745 delta_from => 5.035004, 1746 changed => { 1747 }, 1748 removed => { 1749 } 1750 }, 1751 5.035006 => { 1752 delta_from => 5.035005, 1753 changed => { 1754 }, 1755 removed => { 1756 } 1757 }, 1758 5.035007 => { 1759 delta_from => 5.035006, 1760 changed => { 1761 }, 1762 removed => { 1763 } 1764 }, 1765 5.035008 => { 1766 delta_from => 5.035007, 1767 changed => { 1768 }, 1769 removed => { 1770 } 1771 }, 1772 5.035009 => { 1773 delta_from => 5.035008, 1774 changed => { 1775 }, 1776 removed => { 1777 } 1778 }, 1779 5.034001 => { 1780 delta_from => 5.034000, 1781 changed => { 1782 }, 1783 removed => { 1784 } 1785 }, 1786 5.035010 => { 1787 delta_from => 5.035009, 1788 changed => { 1789 }, 1790 removed => { 1791 } 1792 }, 1793 5.035011 => { 1794 delta_from => 5.035010, 1795 changed => { 1796 }, 1797 removed => { 1798 } 1799 }, 1800 5.036000 => { 1801 delta_from => 5.035011, 1802 changed => { 1803 }, 1804 removed => { 1805 } 1806 }, 1807 5.037000 => { 1808 delta_from => 5.036000, 1809 changed => { 1810 }, 1811 removed => { 1812 } 1813 }, 1814 5.037001 => { 1815 delta_from => 5.037, 1816 changed => { 1817 }, 1818 removed => { 1819 } 1820 }, 1821 5.037002 => { 1822 delta_from => 5.037001, 1823 changed => { 1824 }, 1825 removed => { 1826 } 1827 }, 1828 5.037003 => { 1829 delta_from => 5.037002, 1830 changed => { 1831 }, 1832 removed => { 1833 } 1834 }, 1835 5.037004 => { 1836 delta_from => 5.037003, 1837 changed => { 1838 }, 1839 removed => { 1840 } 1841 }, 1842 5.037005 => { 1843 delta_from => 5.037004, 1844 changed => { 1845 }, 1846 removed => { 1847 } 1848 }, 1849 5.037006 => { 1850 delta_from => 5.037005, 1851 changed => { 1852 }, 1853 removed => { 1854 } 1855 }, 1856 5.037007 => { 1857 delta_from => 5.037006, 1858 changed => { 1859 }, 1860 removed => { 1861 } 1862 }, 1863 5.037008 => { 1864 delta_from => 5.037007, 1865 changed => { 1866 }, 1867 removed => { 1868 } 1869 }, 1870 5.037009 => { 1871 delta_from => 5.037008, 1872 changed => { 1873 }, 1874 removed => { 1875 } 1876 }, 1877 5.037010 => { 1878 delta_from => 5.037009, 1879 changed => { 1880 }, 1881 removed => { 1882 } 1883 }, 1884 5.037011 => { 1885 delta_from => 5.03701, 1886 changed => { 1887 }, 1888 removed => { 1889 } 1890 }, 1891 5.036001 => { 1892 delta_from => 5.036000, 1893 changed => { 1894 }, 1895 removed => { 1896 } 1897 }, 1898 5.038000 => { 1899 delta_from => 5.037011, 1900 changed => { 1901 }, 1902 removed => { 1903 } 1904 }, 1905 5.039001 => { 1906 delta_from => 5.038, 1907 changed => { 1908 }, 1909 removed => { 1910 } 1911 }, 1912 5.039002 => { 1913 delta_from => 5.039001, 1914 changed => { 1915 }, 1916 removed => { 1917 } 1918 }, 1919 5.039003 => { 1920 delta_from => 5.039002, 1921 changed => { 1922 }, 1923 removed => { 1924 } 1925 }, 1926 5.039004 => { 1927 delta_from => 5.039003, 1928 changed => { 1929 }, 1930 removed => { 1931 } 1932 }, 1933 5.039005 => { 1934 delta_from => 5.039004, 1935 changed => { 1936 }, 1937 removed => { 1938 } 1939 }, 1940 5.034002 => { 1941 delta_from => 5.034001, 1942 changed => { 1943 }, 1944 removed => { 1945 } 1946 }, 1947 5.036002 => { 1948 delta_from => 5.036001, 1949 changed => { 1950 }, 1951 removed => { 1952 } 1953 }, 1954 5.038001 => { 1955 delta_from => 5.038000, 1956 changed => { 1957 }, 1958 removed => { 1959 } 1960 }, 1961 5.034003 => { 1962 delta_from => 5.034002, 1963 changed => { 1964 }, 1965 removed => { 1966 } 1967 }, 1968 5.036003 => { 1969 delta_from => 5.036002, 1970 changed => { 1971 }, 1972 removed => { 1973 } 1974 }, 1975 5.038002 => { 1976 delta_from => 5.038001, 1977 changed => { 1978 }, 1979 removed => { 1980 } 1981 }, 1982 5.039006 => { 1983 delta_from => 5.039005, 1984 changed => { 1985 }, 1986 removed => { 1987 } 1988 }, 1989 5.039007 => { 1990 delta_from => 5.039006, 1991 changed => { 1992 }, 1993 removed => { 1994 } 1995 }, 1996 5.039008 => { 1997 delta_from => 5.039007, 1998 changed => { 1999 }, 2000 removed => { 2001 } 2002 }, 2003 5.039009 => { 2004 delta_from => 5.039008, 2005 changed => { 2006 }, 2007 removed => { 2008 } 2009 }, 2010 5.039010 => { 2011 delta_from => 5.039009, 2012 changed => { 2013 }, 2014 removed => { 2015 } 2016 }, 2017 5.040000 => { 2018 delta_from => 5.039010, 2019 changed => { 2020 }, 2021 removed => { 2022 } 2023 }, 2024 5.041000 => { 2025 delta_from => 5.040000, 2026 changed => { 2027 }, 2028 removed => { 2029 } 2030 }, 2031 5.041001 => { 2032 delta_from => 5.041000, 2033 changed => { 2034 }, 2035 removed => { 2036 } 2037 }, 2038 5.041002 => { 2039 delta_from => 5.041001, 2040 changed => { 2041 }, 2042 removed => { 2043 } 2044 }, 2045 5.041003 => { 2046 delta_from => 5.041002, 2047 changed => { 2048 }, 2049 removed => { 2050 } 2051 }, 2052 5.041004 => { 2053 delta_from => 5.041003, 2054 changed => { 2055 }, 2056 removed => { 2057 } 2058 }, 2059 5.041005 => { 2060 delta_from => 5.041004, 2061 changed => { 2062 }, 2063 removed => { 2064 } 2065 }, 2066 5.041006 => { 2067 delta_from => 5.041005, 2068 changed => { 2069 }, 2070 removed => { 2071 } 2072 }, 2073 5.041007 => { 2074 delta_from => 5.041006, 2075 changed => { 2076 }, 2077 removed => { 2078 } 2079 }, 2080 5.040001 => { 2081 delta_from => 5.040000, 2082 changed => { 2083 }, 2084 removed => { 2085 } 2086 }, 2087); 2088 2089%utilities = Module::CoreList::_undelta(\%delta); 2090 2091# Create aliases with trailing zeros for $] use 2092 2093$utilities{'5.000'} = $utilities{5}; 2094 2095_create_aliases(\%utilities); 2096 2097sub _create_aliases { 2098 my ($hash) = @_; 2099 2100 for my $version (keys %$hash) { 2101 next unless $version >= 5.010; 2102 2103 my $padded = sprintf "%0.6f", $version; 2104 2105 # If the version in string form isn't the same as the numeric version, 2106 # alias it. 2107 if ($padded ne $version && $version == $padded) { 2108 $hash->{$padded} = $hash->{$version}; 2109 } 2110 } 2111} 2112 2113'foo'; 2114 2115=pod 2116 2117=head1 NAME 2118 2119Module::CoreList::Utils - what utilities shipped with versions of perl 2120 2121=head1 SYNOPSIS 2122 2123 use Module::CoreList::Utils; 2124 2125 print $Module::CoreList::Utils::utilities{5.009003}{ptar}; # prints 1 2126 2127 print Module::CoreList::Utils->first_release('corelist'); 2128 # prints 5.008009 2129 2130 print Module::CoreList::Utils->first_release_by_date('corelist'); 2131 # prints 5.009002 2132 2133=head1 DESCRIPTION 2134 2135Module::CoreList::Utils provides information on which core and dual-life utilities shipped 2136with each version of L<perl>. 2137 2138It provides a number of mechanisms for querying this information. 2139 2140There is a functional programming API available for programmers to query 2141information. 2142 2143Programmers may also query the contained hash structure to find relevant 2144information. 2145 2146=head1 FUNCTIONS API 2147 2148These are the functions that are available, they may either be called as functions or class methods: 2149 2150 Module::CoreList::Utils::first_release('corelist'); # as a function 2151 2152 Module::CoreList::Utils->first_release('corelist'); # class method 2153 2154=over 2155 2156=item C<utilities> 2157 2158Requires a perl version as an argument, returns a list of utilities that shipped with 2159that version of perl, or undef/empty list if that perl doesn't exist. 2160 2161=item C<first_release( UTILITY )> 2162 2163Requires a UTILITY name as an argument, returns the perl version when that utility first 2164appeared in core as ordered by perl version number or undef ( in scalar context ) 2165or an empty list ( in list context ) if that utility is not in core. 2166 2167=item C<first_release_by_date( UTILITY )> 2168 2169Requires a UTILITY name as an argument, returns the perl version when that utility first 2170appeared in core as ordered by release date or undef ( in scalar context ) 2171or an empty list ( in list context ) if that utility is not in core. 2172 2173=item C<removed_from( UTILITY )> 2174 2175Takes a UTILITY name as an argument, returns the first perl version where that utility 2176was removed from core. Returns undef if the given utility was never in core or remains 2177in core. 2178 2179=item C<removed_from_by_date( UTILITY )> 2180 2181Takes a UTILITY name as an argument, returns the first perl version by release date where that 2182utility was removed from core. Returns undef if the given utility was never in core or remains 2183in core. 2184 2185=back 2186 2187=head1 DATA STRUCTURES 2188 2189These are the hash data structures that are available: 2190 2191=over 2192 2193=item C<%Module::CoreList::Utils::utilities> 2194 2195A hash of hashes that is keyed on perl version as indicated 2196in $]. The second level hash is utility / defined pairs. 2197 2198=back 2199 2200=head1 AUTHOR 2201 2202Chris C<BinGOs> Williams <chris@bingosnet.co.uk> 2203 2204Currently maintained by the perl 5 porters E<lt>perl5-porters@perl.orgE<gt>. 2205 2206This module is the result of archaeology undertaken during QA Hackathon 2207in Lancaster, April 2013. 2208 2209=head1 LICENSE 2210 2211Copyright (C) 2013 Chris Williams. All Rights Reserved. 2212 2213This module is free software; you can redistribute it and/or modify it 2214under the same terms as Perl itself. 2215 2216=head1 SEE ALSO 2217 2218L<corelist>, L<Module::CoreList>, L<perl>, L<http://perlpunks.de/corelist> 2219 2220=cut 2221