xref: /openbsd-src/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm (revision 3d61058aa5c692477b6d18acfbbdb653a9930ff9)
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