summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/Module/CoreList/Utils.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Module/CoreList/Utils.pm')
-rwxr-xr-xMaster/tlpkg/tlperl/lib/Module/CoreList/Utils.pm1021
1 files changed, 1021 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Module/CoreList/Utils.pm b/Master/tlpkg/tlperl/lib/Module/CoreList/Utils.pm
new file mode 100755
index 00000000000..5967e032ad5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Module/CoreList/Utils.pm
@@ -0,0 +1,1021 @@
+package Module::CoreList::Utils;
+
+use strict;
+use warnings;
+use vars qw[$VERSION %utilities];
+use Module::CoreList;
+use Module::CoreList::TieHashDelta;
+
+$VERSION = '3.03';
+
+sub utilities {
+ my $perl = shift;
+ $perl = shift if eval { $perl->isa(__PACKAGE__) };
+ return unless $perl or exists $utilities{$perl};
+ return sort keys %{ $utilities{$perl} };
+}
+
+sub first_release_raw {
+ my $util = shift;
+ $util = shift if eval { $util->isa(__PACKAGE__) };
+ #and scalar @_ and $_[0] =~ m#\A[a-zA-Z_][0-9a-zA-Z_]*(?:(::|')[0-9a-zA-Z_]+)*\z#;
+ my $version = shift;
+
+ my @perls = $version
+ ? grep { exists $utilities{$_}{ $util } &&
+ $utilities{$_}{ $util } ge $version } keys %utilities
+ : grep { exists $utilities{$_}{ $util } } keys %utilities;
+
+ return grep { exists $Module::CoreList::released{$_} } @perls;
+}
+
+sub first_release_by_date {
+ my @perls = &first_release_raw;
+ return unless @perls;
+ return (sort { $Module::CoreList::released{$a} cmp $Module::CoreList::released{$b} } @perls)[0];
+}
+
+sub first_release {
+ my @perls = &first_release_raw;
+ return unless @perls;
+ return (sort { $a cmp $b } @perls)[0];
+}
+
+sub removed_from {
+ my @perls = &removed_raw;
+ return shift @perls;
+}
+
+sub removed_from_by_date {
+ my @perls = sort { $Module::CoreList::released{$a} cmp $Module::CoreList::released{$b} } &removed_raw;
+ return shift @perls;
+}
+
+sub removed_raw {
+ my $util = shift;
+ $util = shift if eval { $util->isa(__PACKAGE__) };
+ return unless my @perls = sort { $a cmp $b } first_release_raw($util);
+ @perls = grep { exists $Module::CoreList::released{$_} } @perls;
+ my $last = pop @perls;
+ my @removed = grep { $_ > $last } sort { $a cmp $b } keys %utilities;
+ return @removed;
+}
+
+my %delta = (
+ 5 => {
+ changed => {
+ 'a2p' => '1',
+ 'c2ph' => '1',
+ 'cppstdin' => '1',
+ 'find2perl' => '1',
+ 'pstruct' => '1',
+ 's2p' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.001 => {
+ delta_from => 5,
+ changed => {
+ 'h2xs' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.002 => {
+ delta_from => 5.001,
+ changed => {
+ 'h2ph' => '1',
+ 'perlbug' => '1',
+ 'perldoc' => '1',
+ 'pod2html' => '1',
+ 'pod2latex' => '1',
+ 'pod2man' => '1',
+ 'pod2text' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.00307 => {
+ delta_from => 5.002,
+ changed => {
+ 'pl2pm' => '1',
+ },
+ removed => {
+ 'cppstdin' => 1,
+ 'pstruct' => 1,
+ }
+ },
+
+ 5.004 => {
+ delta_from => 5.00307,
+ changed => {
+ 'splain' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.005 => {
+ delta_from => 5.00405,
+ changed => {
+ 'perlcc' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.00503 => {
+ delta_from => 5.005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.00405 => {
+ delta_from => 5.004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.006 => {
+ delta_from => 5.00504,
+ changed => {
+ 'dprofpp' => '1',
+ 'pod2usage' => '1',
+ 'podchecker' => '1',
+ 'podselect' => '1',
+ 'pstruct' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.006001 => {
+ delta_from => 5.006,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.007003 => {
+ delta_from => 5.006002,
+ changed => {
+ 'libnetcfg' => '1',
+ 'perlivp' => '1',
+ 'psed' => '1',
+ 'xsubpp' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.008 => {
+ delta_from => 5.007003,
+ changed => {
+ 'enc2xs' => '1',
+ 'piconv' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.008001 => {
+ delta_from => 5.008,
+ changed => {
+ 'cpan' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.009 => {
+ delta_from => 5.008009,
+ changed => {
+ },
+ removed => {
+ 'corelist' => 1,
+ 'instmodsh' => 1,
+ 'prove' => 1,
+ }
+ },
+
+ 5.008002 => {
+ delta_from => 5.008001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.006002 => {
+ delta_from => 5.006001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.008003 => {
+ delta_from => 5.008002,
+ changed => {
+ 'instmodsh' => '1',
+ 'prove' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.00504 => {
+ delta_from => 5.00503,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.009001 => {
+ delta_from => 5.009,
+ changed => {
+ 'instmodsh' => '1',
+ 'prove' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.008004 => {
+ delta_from => 5.008003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.008005 => {
+ delta_from => 5.008004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.008006 => {
+ delta_from => 5.008005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.009002 => {
+ delta_from => 5.009001,
+ changed => {
+ 'corelist' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.008007 => {
+ delta_from => 5.008006,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.009003 => {
+ delta_from => 5.009002,
+ changed => {
+ 'ptar' => '1',
+ 'ptardiff' => '1',
+ 'shasum' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.008008 => {
+ delta_from => 5.008007,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.009004 => {
+ delta_from => 5.009003,
+ changed => {
+ 'config_data' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.009005 => {
+ delta_from => 5.009004,
+ changed => {
+ 'cpan2dist' => '1',
+ 'cpanp' => '1',
+ 'cpanp-run-perl' => '1',
+ },
+ removed => {
+ 'perlcc' => 1,
+ }
+ },
+
+ 5.010000 => {
+ delta_from => 5.009005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.008009 => {
+ delta_from => 5.008008,
+ changed => {
+ 'corelist' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.010001 => {
+ delta_from => 5.010000,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.011 => {
+ delta_from => 5.010001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.011001 => {
+ delta_from => 5.011,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.011002 => {
+ delta_from => 5.011001,
+ changed => {
+ 'perlthanks' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.011003 => {
+ delta_from => 5.011002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.011004 => {
+ delta_from => 5.011003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.011005 => {
+ delta_from => 5.011004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.012 => {
+ delta_from => 5.011005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013 => {
+ delta_from => 5.012005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.012001 => {
+ delta_from => 5.012,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013001 => {
+ delta_from => 5.013,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013002 => {
+ delta_from => 5.013001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013003 => {
+ delta_from => 5.013002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013004 => {
+ delta_from => 5.013003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.012002 => {
+ delta_from => 5.012001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013005 => {
+ delta_from => 5.013004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013006 => {
+ delta_from => 5.013005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013007 => {
+ delta_from => 5.013006,
+ changed => {
+ 'ptargrep' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.013008 => {
+ delta_from => 5.013007,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013009 => {
+ delta_from => 5.013008,
+ changed => {
+ 'json_pp' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.012003 => {
+ delta_from => 5.012002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013010 => {
+ delta_from => 5.013009,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.013011 => {
+ delta_from => 5.013010,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.014 => {
+ delta_from => 5.013011,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.014001 => {
+ delta_from => 5.014,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015 => {
+ delta_from => 5.014004,
+ changed => {
+ },
+ removed => {
+ 'dprofpp' => 1,
+ }
+ },
+
+ 5.012004 => {
+ delta_from => 5.012003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015001 => {
+ delta_from => 5.015,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015002 => {
+ delta_from => 5.015001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015003 => {
+ delta_from => 5.015002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.014002 => {
+ delta_from => 5.014001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015004 => {
+ delta_from => 5.015003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015005 => {
+ delta_from => 5.015004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015006 => {
+ delta_from => 5.015005,
+ changed => {
+ 'zipdetails' => '1',
+ },
+ removed => {
+ }
+ },
+
+ 5.015007 => {
+ delta_from => 5.015006,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015008 => {
+ delta_from => 5.015007,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.015009 => {
+ delta_from => 5.015008,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.016 => {
+ delta_from => 5.015009,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017 => {
+ delta_from => 5.016003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017001 => {
+ delta_from => 5.017,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017002 => {
+ delta_from => 5.017001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.016001 => {
+ delta_from => 5.016,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017003 => {
+ delta_from => 5.017002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017004 => {
+ delta_from => 5.017003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.014003 => {
+ delta_from => 5.014002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017005 => {
+ delta_from => 5.017004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.016002 => {
+ delta_from => 5.016001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.012005 => {
+ delta_from => 5.012004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017006 => {
+ delta_from => 5.017005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017007 => {
+ delta_from => 5.017006,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017008 => {
+ delta_from => 5.017007,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017009 => {
+ delta_from => 5.017008,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.014004 => {
+ delta_from => 5.014003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.016003 => {
+ delta_from => 5.016002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017010 => {
+ delta_from => 5.017009,
+ changed => {
+ },
+ removed => {
+ }
+ },
+
+ 5.017011 => {
+ delta_from => 5.017010,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.018000 => {
+ delta_from => 5.017011,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.018001 => {
+ delta_from => 5.018000,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.018002 => {
+ delta_from => 5.018001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.019000 => {
+ delta_from => 5.018000,
+ changed => {
+ },
+ removed => {
+ 'cpan2dist' => '1',
+ 'cpanp' => '1',
+ 'cpanp-run-perl' => '1',
+ 'pod2latex' => '1',
+ }
+ },
+ 5.019001 => {
+ delta_from => 5.019000,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.019002 => {
+ delta_from => 5.019001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.019003 => {
+ delta_from => 5.019002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.019004 => {
+ delta_from => 5.019003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.019005 => {
+ delta_from => 5.019004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.019006 => {
+ delta_from => 5.019005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.019007 => {
+ delta_from => 5.019006,
+ changed => {
+ },
+ removed => {
+ }
+ },
+);
+
+for my $version (sort { $a <=> $b } keys %delta) {
+ my $data = $delta{$version};
+
+ tie %{$utilities{$version}}, 'Module::CoreList::TieHashDelta',
+ $data->{changed}, $data->{removed},
+ $data->{delta_from} ? $utilities{$data->{delta_from}} : undef;
+}
+
+# Create aliases with trailing zeros for $] use
+
+$utilities{'5.000'} = $utilities{5};
+
+_create_aliases(\%utilities);
+
+sub _create_aliases {
+ my ($hash) = @_;
+
+ for my $version (keys %$hash) {
+ next unless $version >= 5.010;
+
+ my $padded = sprintf "%0.6f", $version;
+
+ # If the version in string form isn't the same as the numeric version,
+ # alias it.
+ if ($padded ne $version && $version == $padded) {
+ $hash->{$padded} = $hash->{$version};
+ }
+ }
+}
+
+'foo';
+
+=pod
+
+=head1 NAME
+
+Module::CoreList::Utils - what utilities shipped with versions of perl
+
+=head1 SYNOPSIS
+
+ use Module::CoreList::Utils;
+
+ print $Module::CoreList::Utils::utilities{5.009003}{ptar}; # prints 1
+
+ print Module::CoreList::Utils->first_release('corelist'); # prints 5.008009
+ print Module::CoreList::Utils->first_release_by_date('corelist'); # prints 5.009002
+
+=head1 DESCRIPTION
+
+Module::CoreList::Utils provides information on which core and dual-life utilities shipped
+with each version of L<perl>.
+
+It provides a number of mechanisms for querying this information.
+
+There is a functional programming API available for programmers to query
+information.
+
+Programmers may also query the contained hash structure to find relevant
+information.
+
+=head1 FUNCTIONS API
+
+These are the functions that are available, they may either be called as functions or class methods:
+
+ Module::CoreList::Utils::first_release('corelist'); # as a function
+
+ Module::CoreList::Utils->first_release('corelist'); # class method
+
+=over
+
+=item C<utilities>
+
+Requires a perl version as an argument, returns a list of utilities that shipped with
+that version of perl, or undef/empty list if that perl doesn't exist.
+
+=item C<first_release( UTILITY )>
+
+Requires a UTILITY name as an argument, returns the perl version when that utility first
+appeared in core as ordered by perl version number or undef ( in scalar context )
+or an empty list ( in list context ) if that utility is not in core.
+
+=item C<first_release_by_date( UTILITY )>
+
+Requires a UTILITY name as an argument, returns the perl version when that utility first
+appeared in core as ordered by release date or undef ( in scalar context )
+or an empty list ( in list context ) if that utility is not in core.
+
+=item C<removed_from( UTILITY )>
+
+Takes a UTILITY name as an argument, returns the first perl version where that utility
+was removed from core. Returns undef if the given utility was never in core or remains
+in core.
+
+=item C<removed_from_by_date( UTILITY )>
+
+Takes a UTILITY name as an argument, returns the first perl version by release date where that
+utility was removed from core. Returns undef if the given utility was never in core or remains
+in core.
+
+=back
+
+=head1 DATA STRUCTURES
+
+These are the hash data structures that are available:
+
+=over
+
+=item C<%Module::CoreList::Utils::utilities>
+
+A hash of hashes that is keyed on perl version as indicated
+in $]. The second level hash is utility / defined pairs.
+
+=back
+
+=head1 AUTHOR
+
+Chris C<BinGOs> Williams <chris@bingosnet.co.uk>
+
+Currently maintained by the perl 5 porters E<lt>perl5-porters@perl.orgE<gt>.
+
+This module is the result of archaeology undertaken during QA Hackathon
+in Lancaster, April 2013.
+
+=head1 LICENSE
+
+Copyright (C) 2013 Chris Williams. All Rights Reserved.
+
+This module is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+L<corelist>, L<Module::CoreList>, L<perl>, L<http://perlpunks.de/corelist>
+
+=cut