1 package Module::CoreList::Utils;
7 our $VERSION = '5.20231125';
12 $perl = shift if eval { $perl->isa(__PACKAGE__) };
13 return unless $perl or exists $utilities{$perl};
14 return sort keys %{ $utilities{$perl} };
17 sub _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 "?")
22 : ((substr($Module::CoreList::released{$b}, 0, 1) eq "?")
24 : $Module::CoreList::released{$a} cmp $Module::CoreList::released{$b} )
27 sub first_release_raw {
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#;
34 ? grep { exists $utilities{$_}{ $util } &&
35 $utilities{$_}{ $util } ge $version } keys %utilities
36 : grep { exists $utilities{$_}{ $util } } keys %utilities;
38 return grep { exists $Module::CoreList::released{$_} } @perls;
41 sub first_release_by_date {
42 my @perls = &first_release_raw;
44 return (sort _released_order @perls)[0];
48 my @perls = &first_release_raw;
50 return (sort { $a cmp $b } @perls)[0];
54 my @perls = &removed_raw;
58 sub removed_from_by_date {
59 my @perls = sort _released_order &removed_raw;
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;
123 delta_from => 5.00307,
132 delta_from => 5.00405,
157 delta_from => 5.00504,
178 delta_from => 5.006002,
190 delta_from => 5.007003,
209 delta_from => 5.008009,
220 delta_from => 5.008001,
228 delta_from => 5.006001,
236 delta_from => 5.008002,
246 delta_from => 5.00503,
264 delta_from => 5.008003,
272 delta_from => 5.008004,
280 delta_from => 5.008005,
288 delta_from => 5.009001,
297 delta_from => 5.008006,
305 delta_from => 5.009002,
316 delta_from => 5.008007,
324 delta_from => 5.009003,
326 'config_data' => '1',
333 delta_from => 5.009004,
337 'cpanp-run-perl' => '1',
345 delta_from => 5.009005,
353 delta_from => 5.008008,
362 delta_from => 5.010000,
370 delta_from => 5.010001,
386 delta_from => 5.011001,
395 delta_from => 5.011002,
403 delta_from => 5.011003,
411 delta_from => 5.011004,
419 delta_from => 5.011005,
427 delta_from => 5.012005,
451 delta_from => 5.013001,
459 delta_from => 5.013002,
467 delta_from => 5.013003,
475 delta_from => 5.012001,
483 delta_from => 5.013004,
491 delta_from => 5.013005,
499 delta_from => 5.013006,
508 delta_from => 5.013007,
516 delta_from => 5.013008,
525 delta_from => 5.012002,
533 delta_from => 5.013009,
541 delta_from => 5.013010,
549 delta_from => 5.013011,
565 delta_from => 5.014004,
574 delta_from => 5.012003,
590 delta_from => 5.015001,
598 delta_from => 5.015002,
606 delta_from => 5.014001,
614 delta_from => 5.015003,
622 delta_from => 5.015004,
630 delta_from => 5.015005,
639 delta_from => 5.015006,
647 delta_from => 5.015007,
655 delta_from => 5.015008,
663 delta_from => 5.015009,
671 delta_from => 5.016003,
687 delta_from => 5.017001,
703 delta_from => 5.017002,
711 delta_from => 5.017003,
719 delta_from => 5.014002,
727 delta_from => 5.017004,
735 delta_from => 5.016001,
743 delta_from => 5.012004,
751 delta_from => 5.017005,
759 delta_from => 5.017006,
767 delta_from => 5.017007,
775 delta_from => 5.017008,
783 delta_from => 5.014003,
791 delta_from => 5.016002,
799 delta_from => 5.017009,
807 delta_from => 5.017010,
814 delta_from => 5.017011,
821 delta_from => 5.018000,
828 delta_from => 5.018001,
835 delta_from => 5.018000,
842 delta_from => 5.018000,
849 delta_from => 5.018000,
855 'cpanp-run-perl' => '1',
860 delta_from => 5.019000,
867 delta_from => 5.019001,
874 delta_from => 5.019002,
881 delta_from => 5.019003,
888 delta_from => 5.019004,
895 delta_from => 5.019005,
902 delta_from => 5.019006,
909 delta_from => 5.019007,
916 delta_from => 5.019008,
923 delta_from => 5.019009,
930 delta_from => 5.019010,
937 delta_from => 5.019011,
944 delta_from => 5.020000,
951 delta_from => 5.021000,
963 delta_from => 5.021001,
970 delta_from => 5.021002,
984 delta_from => 5.021003,
991 delta_from => 5.021004,
998 delta_from => 5.021005,
1005 delta_from => 5.021006,
1012 delta_from => 5.021007,
1019 delta_from => 5.020001,
1026 delta_from => 5.021008,
1034 delta_from => 5.021009,
1041 delta_from => 5.02101,
1048 delta_from => 5.021011,
1055 delta_from => 5.022000,
1062 delta_from => 5.023,
1069 delta_from => 5.023001,
1076 delta_from => 5.020002,
1083 delta_from => 5.023002,
1090 delta_from => 5.023003,
1097 delta_from => 5.023004,
1104 delta_from => 5.022,
1111 delta_from => 5.023005,
1118 delta_from => 5.023006,
1125 delta_from => 5.023007,
1132 delta_from => 5.023008,
1139 delta_from => 5.022001,
1146 delta_from => 5.023009,
1153 delta_from => 5.024000,
1160 delta_from => 5.025000,
1167 delta_from => 5.025001,
1174 delta_from => 5.025002,
1181 delta_from => 5.025003,
1188 delta_from => 5.025004,
1195 delta_from => 5.025005,
1202 delta_from => 5.025006,
1209 delta_from => 5.025007,
1216 delta_from => 5.022002,
1223 delta_from => 5.024000,
1230 delta_from => 5.025008,
1239 delta_from => 5.025009,
1246 delta_from => 5.025010,
1253 delta_from => 5.025011,
1260 delta_from => 5.025012,
1267 delta_from => 5.026000,
1274 delta_from => 5.027000,
1281 delta_from => 5.022003,
1288 delta_from => 5.024001,
1295 delta_from => 5.027001,
1302 delta_from => 5.027002,
1309 delta_from => 5.027003,
1316 delta_from => 5.024002,
1323 delta_from => 5.026000,
1330 delta_from => 5.027004,
1337 delta_from => 5.027005,
1344 delta_from => 5.027006,
1351 delta_from => 5.027007,
1358 delta_from => 5.027008,
1365 delta_from => 5.027009,
1372 delta_from => 5.024003,
1379 delta_from => 5.026001,
1386 delta_from => 5.027010,
1393 delta_from => 5.027011,
1400 delta_from => 5.028,
1407 delta_from => 5.029000,
1414 delta_from => 5.029001,
1421 delta_from => 5.029002,
1428 delta_from => 5.029003,
1435 delta_from => 5.029004,
1442 delta_from => 5.026002,
1449 delta_from => 5.028000,
1456 delta_from => 5.029005,
1463 delta_from => 5.029006,
1470 delta_from => 5.029007,
1477 delta_from => 5.029008,
1484 delta_from => 5.028001,
1491 delta_from => 5.029009,
1498 delta_from => 5.029010,
1512 delta_from => 5.031,
1520 delta_from => 5.031001,
1527 delta_from => 5.031002,
1534 delta_from => 5.031003,
1541 delta_from => 5.031004,
1555 delta_from => 5.031005,
1563 delta_from => 5.031006,
1570 delta_from => 5.031007,
1577 delta_from => 5.031008,
1584 delta_from => 5.030001,
1591 delta_from => 5.031009,
1598 delta_from => 5.031010,
1605 delta_from => 5.028002,
1612 delta_from => 5.030002,
1619 delta_from => 5.031011,
1626 delta_from => 5.032,
1633 delta_from => 5.033000,
1640 delta_from => 5.033001,
1647 delta_from => 5.033002,
1654 delta_from => 5.033003,
1661 delta_from => 5.033004,
1668 delta_from => 5.033005,
1675 delta_from => 5.032000,
1682 delta_from => 5.033006,
1689 delta_from => 5.033007,
1696 delta_from => 5.033008,
1703 delta_from => 5.033009,
1710 delta_from => 5.034000,
1717 delta_from => 5.035,
1724 delta_from => 5.035001,
1731 delta_from => 5.035002,
1738 delta_from => 5.035003,
1745 delta_from => 5.035004,
1752 delta_from => 5.035005,
1759 delta_from => 5.035006,
1766 delta_from => 5.035007,
1773 delta_from => 5.035008,
1780 delta_from => 5.034000,
1787 delta_from => 5.035009,
1794 delta_from => 5.035010,
1801 delta_from => 5.035011,
1808 delta_from => 5.036000,
1815 delta_from => 5.037,
1822 delta_from => 5.037001,
1829 delta_from => 5.037002,
1836 delta_from => 5.037003,
1843 delta_from => 5.037004,
1850 delta_from => 5.037005,
1857 delta_from => 5.037006,
1864 delta_from => 5.037007,
1871 delta_from => 5.037008,
1878 delta_from => 5.037009,
1885 delta_from => 5.03701,
1892 delta_from => 5.036000,
1899 delta_from => 5.037011,
1906 delta_from => 5.038,
1913 delta_from => 5.039001,
1920 delta_from => 5.039002,
1927 delta_from => 5.039003,
1934 delta_from => 5.039004,
1941 delta_from => 5.039005,
1948 delta_from => 5.034001,
1955 delta_from => 5.036001,
1962 delta_from => 5.038000,
1970 %utilities = Module::CoreList::_undelta(\%delta);
1972 # Create aliases with trailing zeros for $] use
1974 $utilities{'5.000'} = $utilities{5};
1976 _create_aliases(\%utilities);
1978 sub _create_aliases {
1981 for my $version (keys %$hash) {
1982 next unless $version >= 5.010;
1984 my $padded = sprintf "%0.6f", $version;
1986 # If the version in string form isn't the same as the numeric version,
1988 if ($padded ne $version && $version == $padded) {
1989 $hash->{$padded} = $hash->{$version};
2000 Module::CoreList::Utils - what utilities shipped with versions of perl
2004 use Module::CoreList::Utils;
2006 print $Module::CoreList::Utils::utilities{5.009003}{ptar}; # prints 1
2008 print Module::CoreList::Utils->first_release('corelist');
2011 print Module::CoreList::Utils->first_release_by_date('corelist');
2016 Module::CoreList::Utils provides information on which core and dual-life utilities shipped
2017 with each version of L<perl>.
2019 It provides a number of mechanisms for querying this information.
2021 There is a functional programming API available for programmers to query
2024 Programmers may also query the contained hash structure to find relevant
2027 =head1 FUNCTIONS API
2029 These are the functions that are available, they may either be called as functions or class methods:
2031 Module::CoreList::Utils::first_release('corelist'); # as a function
2033 Module::CoreList::Utils->first_release('corelist'); # class method
2039 Requires a perl version as an argument, returns a list of utilities that shipped with
2040 that version of perl, or undef/empty list if that perl doesn't exist.
2042 =item C<first_release( UTILITY )>
2044 Requires a UTILITY name as an argument, returns the perl version when that utility first
2045 appeared in core as ordered by perl version number or undef ( in scalar context )
2046 or an empty list ( in list context ) if that utility is not in core.
2048 =item C<first_release_by_date( UTILITY )>
2050 Requires a UTILITY name as an argument, returns the perl version when that utility first
2051 appeared in core as ordered by release date or undef ( in scalar context )
2052 or an empty list ( in list context ) if that utility is not in core.
2054 =item C<removed_from( UTILITY )>
2056 Takes a UTILITY name as an argument, returns the first perl version where that utility
2057 was removed from core. Returns undef if the given utility was never in core or remains
2060 =item C<removed_from_by_date( UTILITY )>
2062 Takes a UTILITY name as an argument, returns the first perl version by release date where that
2063 utility was removed from core. Returns undef if the given utility was never in core or remains
2068 =head1 DATA STRUCTURES
2070 These are the hash data structures that are available:
2074 =item C<%Module::CoreList::Utils::utilities>
2076 A hash of hashes that is keyed on perl version as indicated
2077 in $]. The second level hash is utility / defined pairs.
2083 Chris C<BinGOs> Williams <chris@bingosnet.co.uk>
2085 Currently maintained by the perl 5 porters E<lt>perl5-porters@perl.orgE<gt>.
2087 This module is the result of archaeology undertaken during QA Hackathon
2088 in Lancaster, April 2013.
2092 Copyright (C) 2013 Chris Williams. All Rights Reserved.
2094 This module is free software; you can redistribute it and/or modify it
2095 under the same terms as Perl itself.
2099 L<corelist>, L<Module::CoreList>, L<perl>, L<http://perlpunks.de/corelist>