diff options
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Module')
32 files changed, 4089 insertions, 1046 deletions
diff --git a/Master/tlpkg/tlperl/lib/Module/Build.pm b/Master/tlpkg/tlperl/lib/Module/Build.pm index e1fc6cabb6f..fd835fc0659 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build.pm @@ -16,7 +16,7 @@ use Module::Build::Base; use vars qw($VERSION @ISA); @ISA = qw(Module::Build::Base); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; @@ -878,7 +878,7 @@ parameter as follows: lib => installprivlib installsitelib installvendorlib arch => installarchlib installsitearch installvendorarch - script => installscript installsitebin installvendorbin + script => installscript installsitescript installvendorscript bin => installbin installsitebin installvendorbin bindoc => installman1dir installsiteman1dir installvendorman1dir libdoc => installman3dir installsiteman3dir installvendorman3dir @@ -967,24 +967,28 @@ platform you're installing on. =item prefix Provided for compatibility with C<ExtUtils::MakeMaker>'s PREFIX argument. -C<prefix> should be used when you wish Module::Build to install your -modules, documentation and scripts in the same place -C<ExtUtils::MakeMaker> does. +C<prefix> should be used when you want Module::Build to install your +modules, documentation, and scripts in the same place as +C<ExtUtils::MakeMaker>'s PREFIX mechanism. The following are equivalent. perl Build.PL --prefix /tmp/foo perl Makefile.PL PREFIX=/tmp/foo -Because of the very complex nature of the prefixification logic, the +Because of the complex nature of the prefixification logic, the behavior of PREFIX in C<MakeMaker> has changed subtly over time. Module::Build's --prefix logic is equivalent to the PREFIX logic found in C<ExtUtils::MakeMaker> 6.30. -If you do not need to retain compatibility with C<ExtUtils::MakeMaker> or +The maintainers of C<MakeMaker> do understand the troubles with the +PREFIX mechanism, and added INSTALL_BASE support in version 6.31 of +C<MakeMaker>, which was released in 2006. + +If you don't need to retain compatibility with old versions (pre-6.31) of C<ExtUtils::MakeMaker> or are starting a fresh Perl installation we recommend you use C<install_base> instead (and C<INSTALL_BASE> in C<ExtUtils::MakeMaker>). -See L<Module::Build::Cookbook/Instaling in the same location as +See L<Module::Build::Cookbook/Installing in the same location as ExtUtils::MakeMaker> for further information. @@ -1046,14 +1050,14 @@ perl. It is risky to make major changes to C<MakeMaker>, since it does so many things, is so important, and generally works. C<Module::Build> is an entirely separate package so that I can work on it all I want, without -worrying about backward compatibility. +worrying about backward compatibility with C<MakeMaker>. =item * Finally, Perl is said to be a language for system administration. Could it really be the case that Perl isn't up to the task of building -and installing software? Even if that software is a bunch of stupid -little C<.pm> files that just need to be copied from one place to +and installing software? Even if that software is a bunch of +C<.pm> files that just need to be copied from one place to another? My sense was that we could design a system to accomplish this in a flexible, extensible, and friendly manner. Or die trying. @@ -1083,7 +1087,7 @@ Bug reports are also welcome at <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Module-Build>. The latest development version is available from the Git -repository at <https://github.com/dagolden/module-build/> +repository at <https://github.com/Perl-Toolchain-Gang/Module-Build> =head1 COPYRIGHT diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Base.pm b/Master/tlpkg/tlperl/lib/Module/Build/Base.pm index a29f500062c..cf42cc0b230 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Base.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Base.pm @@ -4,9 +4,11 @@ package Module::Build::Base; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +use warnings; + +$VERSION = '0.4003'; $VERSION = eval $VERSION; -BEGIN { require 5.00503 } +BEGIN { require 5.006001 } use Carp; use Cwd (); @@ -38,7 +40,9 @@ sub new { $self->check_manifest; $self->auto_require; - if ( $self->check_prereq + $self->check_autofeatures != 2) { + + # All checks must run regardless if one fails, so no short circuiting! + if( grep { !$_ } $self->check_prereq, $self->check_autofeatures ) { $self->log_warn(<<EOF); ERRORS/WARNINGS FOUND IN PREREQUISITES. You may wish to install the versions @@ -142,16 +146,16 @@ sub _construct { my $config = delete $input{config} || {}; my $self = bless { - args => {%$args}, - config => Module::Build::Config->new(values => $config), - properties => { - base_dir => $package->cwd, - mb_version => $Module::Build::VERSION, - %input, - }, - phash => {}, - stash => {}, # temporary caching, not stored in _build - }, $package; + args => {%$args}, + config => Module::Build::Config->new(values => $config), + properties => { + base_dir => $package->cwd, + mb_version => $Module::Build::VERSION, + %input, + }, + phash => {}, + stash => {}, # temporary caching, not stored in _build + }, $package; $self->_set_defaults; my ($p, $ph) = ($self->{properties}, $self->{phash}); @@ -163,7 +167,7 @@ sub _construct { if (exists $p->{$_}) { my $vals = delete $p->{$_}; while (my ($k, $v) = each %$vals) { - $self->$_($k, $v); + $self->$_($k, $v); } } } @@ -250,37 +254,37 @@ sub _default_install_paths { $p->{install_sets} = { core => { - lib => $c->get('installprivlib'), - arch => $c->get('installarchlib'), - bin => $c->get('installbin'), - script => $c->get('installscript'), - bindoc => $bindoc, - libdoc => $libdoc, - binhtml => $binhtml, - libhtml => $libhtml, - }, + lib => $c->get('installprivlib'), + arch => $c->get('installarchlib'), + bin => $c->get('installbin'), + script => $c->get('installscript'), + bindoc => $bindoc, + libdoc => $libdoc, + binhtml => $binhtml, + libhtml => $libhtml, + }, site => { - lib => $c->get('installsitelib'), - arch => $c->get('installsitearch'), - bin => $c->get('installsitebin') || $c->get('installbin'), - script => $c->get('installsitescript') || - $c->get('installsitebin') || $c->get('installscript'), - bindoc => $c->get('installsiteman1dir') || $bindoc, - libdoc => $c->get('installsiteman3dir') || $libdoc, - binhtml => $c->get('installsitehtml1dir') || $binhtml, - libhtml => $c->get('installsitehtml3dir') || $libhtml, - }, + lib => $c->get('installsitelib'), + arch => $c->get('installsitearch'), + bin => $c->get('installsitebin') || $c->get('installbin'), + script => $c->get('installsitescript') || + $c->get('installsitebin') || $c->get('installscript'), + bindoc => $c->get('installsiteman1dir') || $bindoc, + libdoc => $c->get('installsiteman3dir') || $libdoc, + binhtml => $c->get('installsitehtml1dir') || $binhtml, + libhtml => $c->get('installsitehtml3dir') || $libhtml, + }, vendor => { - lib => $c->get('installvendorlib'), - arch => $c->get('installvendorarch'), - bin => $c->get('installvendorbin') || $c->get('installbin'), - script => $c->get('installvendorscript') || - $c->get('installvendorbin') || $c->get('installscript'), - bindoc => $c->get('installvendorman1dir') || $bindoc, - libdoc => $c->get('installvendorman3dir') || $libdoc, - binhtml => $c->get('installvendorhtml1dir') || $binhtml, - libhtml => $c->get('installvendorhtml3dir') || $libhtml, - }, + lib => $c->get('installvendorlib'), + arch => $c->get('installvendorarch'), + bin => $c->get('installvendorbin') || $c->get('installbin'), + script => $c->get('installvendorscript') || + $c->get('installvendorbin') || $c->get('installscript'), + bindoc => $c->get('installvendorman1dir') || $bindoc, + libdoc => $c->get('installvendorman3dir') || $libdoc, + binhtml => $c->get('installvendorhtml1dir') || $binhtml, + libhtml => $c->get('installvendorhtml3dir') || $libhtml, + }, }; $p->{original_prefix} = @@ -311,35 +315,35 @@ sub _default_install_paths { $p->{prefix_relpaths} = { core => { - lib => [@libstyle], - arch => [@libstyle, $version, $arch], - bin => ['bin'], - script => ['bin'], - bindoc => ['man', 'man1'], - libdoc => ['man', 'man3'], - binhtml => ['html'], - libhtml => ['html'], - }, + lib => [@libstyle], + arch => [@libstyle, $version, $arch], + bin => ['bin'], + script => ['bin'], + bindoc => ['man', 'man1'], + libdoc => ['man', 'man3'], + binhtml => ['html'], + libhtml => ['html'], + }, vendor => { - lib => [@libstyle], - arch => [@libstyle, $version, $arch], - bin => ['bin'], - script => ['bin'], - bindoc => ['man', 'man1'], - libdoc => ['man', 'man3'], - binhtml => ['html'], - libhtml => ['html'], - }, + lib => [@libstyle], + arch => [@libstyle, $version, $arch], + bin => ['bin'], + script => ['bin'], + bindoc => ['man', 'man1'], + libdoc => ['man', 'man3'], + binhtml => ['html'], + libhtml => ['html'], + }, site => { - lib => [@libstyle, 'site_perl'], - arch => [@libstyle, 'site_perl', $version, $arch], - bin => ['bin'], - script => ['bin'], - bindoc => ['man', 'man1'], - libdoc => ['man', 'man3'], - binhtml => ['html'], - libhtml => ['html'], - }, + lib => [@libstyle, 'site_perl'], + arch => [@libstyle, 'site_perl', $version, $arch], + bin => ['bin'], + script => ['bin'], + bindoc => ['man', 'man1'], + libdoc => ['man', 'man3'], + binhtml => ['html'], + libhtml => ['html'], + }, }; return $p } @@ -523,24 +527,24 @@ sub _discover_perl_interpreter { # Adapted from IPC::Cmd::can_run() sub find_command { - my ($self, $command) = @_; + my ($self, $command) = @_; - if( File::Spec->file_name_is_absolute($command) ) { - return $self->_maybe_command($command); + if( File::Spec->file_name_is_absolute($command) ) { + return $self->_maybe_command($command); - } else { - for my $dir ( File::Spec->path ) { - my $abs = File::Spec->catfile($dir, $command); - return $abs if $abs = $self->_maybe_command($abs); - } + } else { + for my $dir ( File::Spec->path ) { + my $abs = File::Spec->catfile($dir, $command); + return $abs if $abs = $self->_maybe_command($abs); } + } } # Copied from ExtUtils::MM_Unix::maybe_command sub _maybe_command { - my($self,$file) = @_; - return $file if -x $file && ! -d $file; - return; + my($self,$file) = @_; + return $file if -x $file && ! -d $file; + return; } sub _is_interactive { @@ -657,7 +661,7 @@ sub features { while (my ($name, $info) = each %auto_features) { my $failures = $self->prereq_failures($info); my $disabled = grep( /^(?:\w+_)?(?:requires|conflicts)$/, - keys %$failures ) ? 1 : 0; + keys %$failures ) ? 1 : 0; $features{$name} = $disabled ? 0 : 1; } %features = (%features, $ph->{features}->access()); @@ -705,22 +709,22 @@ sub ACTION_config_data { my $notes_pm = File::Spec->catfile($self->blib, 'lib', split /::/, "$notes_name.pm"); return if $self->up_to_date(['Build.PL', - $self->config_file('config_data'), - $self->config_file('features') - ], $notes_pm); + $self->config_file('config_data'), + $self->config_file('features') + ], $notes_pm); $self->log_verbose("Writing config notes to $notes_pm\n"); File::Path::mkpath(File::Basename::dirname($notes_pm)); Module::Build::Notes->write_config_data - ( - file => $notes_pm, - module => $module_name, - config_module => $notes_name, - config_data => scalar $self->config_data, - feature => scalar $self->{phash}{features}->access(), - auto_features => scalar $self->auto_features, - ); + ( + file => $notes_pm, + module => $module_name, + config_module => $notes_name, + config_data => scalar $self->config_data, + feature => scalar $self->{phash}{features}->access(), + auto_features => scalar $self->auto_features, + ); } ######################################################################## @@ -1173,7 +1177,7 @@ sub dist_version_from { my $p = $self->{properties}; if ($self->module_name) { $p->{dist_version_from} ||= - join( '/', 'lib', split(/::/, $self->module_name) ) . '.pm'; + join( '/', 'lib', split(/::/, $self->module_name) ) . '.pm'; } return $p->{dist_version_from} || undef; } @@ -1557,17 +1561,17 @@ sub prereq_failures { my $status = $self->check_installed_status($modname, $spec); if ($type =~ /^(?:\w+_)?conflicts$/) { - next if !$status->{ok}; - $status->{conflicts} = delete $status->{need}; - $status->{message} = "$modname ($status->{have}) conflicts with this distribution"; + next if !$status->{ok}; + $status->{conflicts} = delete $status->{need}; + $status->{message} = "$modname ($status->{have}) conflicts with this distribution"; } elsif ($type =~ /^(?:\w+_)?recommends$/) { - next if $status->{ok}; - $status->{message} = (!ref($status->{have}) && $status->{have} eq '<none>' - ? "$modname is not installed" - : "$modname ($status->{have}) is installed, but we prefer to have $spec"); + next if $status->{ok}; + $status->{message} = (!ref($status->{have}) && $status->{have} eq '<none>' + ? "$modname is not installed" + : "$modname ($status->{have}) is installed, but we prefer to have $spec"); } else { - next if $status->{ok}; + next if $status->{ok}; } $out->{$type}{$modname} = $status; @@ -1638,6 +1642,7 @@ sub perl_version_to_float { sub _parse_conditions { my ($self, $spec) = @_; + return ">= 0" if not defined $spec; if ($spec =~ /^\s*([\w.]+)\s*$/) { # A plain number, maybe with dots, letters, and underscores return (">= $spec"); } else { @@ -1986,8 +1991,8 @@ sub check_manifest { $self->log_verbose("Checking whether your kit is complete...\n"); if (my @missed = ExtUtils::Manifest::manicheck()) { $self->log_warn("WARNING: the following files are missing in your kit:\n", - "\t", join("\n\t", @missed), "\n", - "Please inform the author.\n\n"); + "\t", join("\n\t", @missed), "\n", + "Please inform the author.\n\n"); } else { $self->log_verbose("Looks good\n\n"); } @@ -2077,8 +2082,8 @@ sub unparse_args { my @out; while (my ($k, $v) = each %$args) { push @out, (UNIVERSAL::isa($v, 'HASH') ? map {+"--$k", "$_=$v->{$_}"} keys %$v : - UNIVERSAL::isa($v, 'ARRAY') ? map {+"--$k", $_} @$v : - ("--$k", $v)); + UNIVERSAL::isa($v, 'ARRAY') ? map {+"--$k", $_} @$v : + ("--$k", $v)); } return @out; } @@ -2119,12 +2124,14 @@ sub _translate_option { return $opt; } +my %singular_argument = map { ($_ => 1) } qw/install_base prefix destdir installdir verbose quiet uninst debug sign/; + sub _read_arg { my ($self, $args, $key, $val) = @_; $key = $self->_translate_option($key); - if ( exists $args->{$key} ) { + if ( exists $args->{$key} and not $singular_argument{$key} ) { $args->{$key} = [ $args->{$key} ] unless ref $args->{$key}; push @{$args->{$key}}, $val; } else { @@ -2215,7 +2222,7 @@ sub read_args { $args{$_} = [ $args{$_} ] unless ref $args{$_}; foreach my $arg ( @{$args{$_}} ) { $arg =~ /($opt_re)=(.*)/ - or die "Malformed '$_' argument: '$arg' should be something like 'foo=bar'"; + or die "Malformed '$_' argument: '$arg' should be something like 'foo=bar'"; $hash{$1} = $2; } $args{$_} = \%hash; @@ -2234,10 +2241,10 @@ sub read_args { next if !defined $args{$key}{$subkey}; my $subkey_ext = $self->_detildefy($args{$key}{$subkey}); if ( $subkey eq 'html' ) { # translate for compatibility - $args{$key}{binhtml} = $subkey_ext; - $args{$key}{libhtml} = $subkey_ext; + $args{$key}{binhtml} = $subkey_ext; + $args{$key}{libhtml} = $subkey_ext; } else { - $args{$key}{$subkey} = $subkey_ext; + $args{$key}{$subkey} = $subkey_ext; } } } @@ -2267,8 +2274,8 @@ sub _merge_arglist { if ( exists( $opts1->{$key} ) ) { if ( ref( $val ) eq 'HASH' ) { while (my ($k, $v) = each %$val) { - $new_opts{$key}{$k} = $v unless exists( $opts1->{$key}{$k} ); - } + $new_opts{$key}{$k} = $v unless exists( $opts1->{$key}{$k} ); + } } } else { $new_opts{$key} = $val @@ -2318,8 +2325,8 @@ sub read_modulebuildrc { $modulebuildrc = $ENV{MODULEBUILDRC}; } elsif ( exists($ENV{MODULEBUILDRC}) ) { $self->log_warn("WARNING: Can't find resource file " . - "'$ENV{MODULEBUILDRC}' defined in environment.\n" . - "No options loaded\n"); + "'$ENV{MODULEBUILDRC}' defined in environment.\n" . + "No options loaded\n"); return (); } else { $modulebuildrc = $self->_find_user_config( '.modulebuildrc' ); @@ -2337,9 +2344,9 @@ sub read_modulebuildrc { if ( $line =~ /^\S/ ) { if ( $buffer ) { - my( $action, $options ) = split( /\s+/, $buffer, 2 ); - $options{$action} .= $options . ' '; - $buffer = ''; + my( $action, $options ) = split( /\s+/, $buffer, 2 ); + $options{$action} .= $options . ' '; + $buffer = ''; } $buffer = $line; } else { @@ -2394,9 +2401,9 @@ sub merge_args { $self->{args} ; if ($additive{$key}) { - $add_to->{$_} = $val->{$_} foreach keys %$val; + $add_to->{$_} = $val->{$_} foreach keys %$val; } else { - $add_to->{$key} = $val; + $add_to->{$key} = $val; } } } @@ -2687,7 +2694,7 @@ sub generic_test { # Make sure we test the module in blib/ unshift @INC, (File::Spec->catdir($p->{base_dir}, $self->blib, 'lib'), - File::Spec->catdir($p->{base_dir}, $self->blib, 'arch')); + File::Spec->catdir($p->{base_dir}, $self->blib, 'arch')); # Filter out nonsensical @INC entries - some versions of # Test::Harness will really explode the number of entries here @@ -2825,7 +2832,7 @@ sub ACTION_testcover { $self->do_system(qw(cover -delete)) unless $self->up_to_date($pm_files, $cover_files) - && $self->up_to_date($self->test_files, $cover_files); + && $self->up_to_date($self->test_files, $cover_files); } local $Test::Harness::switches = @@ -2996,14 +3003,14 @@ sub find_PL_files { if (UNIVERSAL::isa($files, 'ARRAY')) { return { map {$_, [/^(.*)\.PL$/]} - map $self->localize_file_path($_), - @$files }; + map $self->localize_file_path($_), + @$files }; } elsif (UNIVERSAL::isa($files, 'HASH')) { my %out; while (my ($file, $to) = each %$files) { - $out{ $self->localize_file_path($file) } = [ map $self->localize_file_path($_), - ref $to ? @$to : ($to) ]; + $out{ $self->localize_file_path($file) } = [ map $self->localize_file_path($_), + ref $to ? @$to : ($to) ]; } return \%out; @@ -3042,8 +3049,8 @@ sub find_test_files { if (my $files = $p->{test_files}) { $files = [keys %$files] if UNIVERSAL::isa($files, 'HASH'); $files = [map { -d $_ ? $self->expand_test_dir($_) : $_ } - map glob, - $self->split_like_shell($files)]; + map glob, + $self->split_like_shell($files)]; # Always given as a Unix file spec. return [ map $self->localize_file_path($_), @$files ]; @@ -3067,9 +3074,9 @@ sub _find_file_by_type { return {} unless -d $dir; return { map {$_, $_} - map $self->localize_file_path($_), - grep !/\.\#/, - @{ $self->rscan_dir($dir, $self->file_qr("\\.$type\$")) } }; + map $self->localize_file_path($_), + grep !/\.\#/, + @{ $self->rscan_dir($dir, $self->file_qr("\\.$type\$")) } }; } sub localize_file_path { @@ -3192,8 +3199,8 @@ sub _is_default_installable { my $type = shift; return ( $self->install_destination($type) && ( $self->install_path($type) || - $self->install_sets($self->installdirs)->{$type} ) - ) ? 1 : 0; + $self->install_sets($self->installdirs)->{$type} ) + ) ? 1 : 0; } sub _is_ActivePerl { @@ -3248,7 +3255,7 @@ sub manify_bin_pods { # This is expected to change in a future version (Pod::Simple > 3.03). my $parser = Pod::Man->new( section => 1 ); # binaries go in section 1 my $manpage = $self->man1page_name( $file ) . '.' . - $self->config( 'man1ext' ); + $self->config( 'man1ext' ); my $outfile = File::Spec->catfile($mandir, $manpage); next if $self->up_to_date( $file, $outfile ); $self->log_verbose("Manifying $file -> $outfile\n"); @@ -3273,7 +3280,7 @@ sub manify_lib_pods { # This is expected to change in a future version (Pod::Simple > 3.03). my $parser = Pod::Man->new( section => 3 ); # libraries go in section 3 my $manpage = $self->man3page_name( $relfile ) . '.' . - $self->config( 'man3ext' ); + $self->config( 'man3ext' ); my $outfile = File::Spec->catfile( $mandir, $manpage); next if $self->up_to_date( $file, $outfile ); $self->log_verbose("Manifying $file -> $outfile\n"); @@ -3292,7 +3299,7 @@ sub _find_pods { FILE: foreach my $file ( @{ $self->rscan_dir( $dir ) } ) { foreach my $regexp ( @{ $args{exclude} } ) { - next FILE if $file =~ $regexp; + next FILE if $file =~ $regexp; } $files{$file} = File::Spec->abs2rel($file, $dir) if $self->contains_pod( $file ) } @@ -3542,8 +3549,8 @@ sub ACTION_diff { my $installed = Module::Build::ModuleInfo->find_module_by_name( join('::', @parts), \@myINC ); if (not $installed) { - print "Only in lib: $file\n"; - next; + print "Only in lib: $file\n"; + next; } my $status = File::Compare::compare($installed, $file); @@ -3551,9 +3558,9 @@ sub ACTION_diff { die "Can't compare $installed and $file: $!" if $status == -1; if ($file =~ $text_suffix) { - $self->do_system('diff', @flags, $installed, $file); + $self->do_system('diff', @flags, $installed, $file); } else { - print "Binary files $file and $installed differ\n"; + print "Binary files $file and $installed differ\n"; } } } @@ -3742,12 +3749,12 @@ sub ACTION_ppmdist { foreach my $file ( @$files ) { next unless -f $file; my $rel_file = - File::Spec->abs2rel( File::Spec->rel2abs( $file ), - File::Spec->rel2abs( $dir ) ); + File::Spec->abs2rel( File::Spec->rel2abs( $file ), + File::Spec->rel2abs( $dir ) ); my $to_file = - File::Spec->catfile( $ppm, 'blib', - exists( $types{$type} ) ? $types{$type} : $type, - $rel_file ); + File::Spec->catfile( $ppm, 'blib', + exists( $types{$type} ) ? $types{$type} : $type, + $rel_file ); $self->copy_if_modified( from => $file, to => $to_file ); } } @@ -3996,14 +4003,14 @@ EOF my $old_parse_file; $old_parse_file = \&{"Pod::Simple::parse_file"} - and + and local *{"Pod::Simple::parse_file"} = sub { - my $self = shift; - $self->output_fh($_[1]) if $_[1]; - $self->$old_parse_file($_[0]); + my $self = shift; + $self->output_fh($_[1]) if $_[1]; + $self->$old_parse_file($_[0]); } if $Pod::Text::VERSION - == 3.01; # Split line to avoid evil version-finder + == 3.01; # Split line to avoid evil version-finder Pod::Text::pod2text( $docfile, $fh ); @@ -4083,14 +4090,14 @@ sub ACTION_disttest { $self->_do_in_dir ( $self->dist_dir, sub { - # XXX could be different names for scripts - - $self->run_perl_script('Build.PL') # XXX Should this be run w/ --nouse-rcfile - or die "Error executing 'Build.PL' in dist directory: $!"; - $self->run_perl_script('Build') - or die "Error executing 'Build' in dist directory: $!"; - $self->run_perl_script('Build', [], ['test']) - or die "Error executing 'Build test' in dist directory"; + # XXX could be different names for scripts + + $self->run_perl_script('Build.PL') # XXX Should this be run w/ --nouse-rcfile + or die "Error executing 'Build.PL' in dist directory: $!"; + $self->run_perl_script('Build') + or die "Error executing 'Build' in dist directory: $!"; + $self->run_perl_script('Build', [], ['test']) + or die "Error executing 'Build test' in dist directory"; }); } @@ -4729,7 +4736,7 @@ sub prepare_metadata { my $pkgs = eval { $self->find_dist_packages }; if ($@) { $self->log_warn("$@\nWARNING: Possible missing or corrupt 'MANIFEST' file.\n" . - "Nothing to enter for 'provides' field in metafile.\n"); + "Nothing to enter for 'provides' field in metafile.\n"); } else { $node->{provides} = $pkgs if %$pkgs; } @@ -4741,9 +4748,9 @@ sub prepare_metadata { $add_node->('generated_by', "Module::Build version $Module::Build::VERSION"); $add_node->('meta-spec', - {version => '1.4', - url => 'http://module-build.sourceforge.net/META-spec-v1.4.html', - }); + {version => '1.4', + url => 'http://module-build.sourceforge.net/META-spec-v1.4.html', + }); while (my($k, $v) = each %{$self->meta_add}) { $add_node->($k, $v); @@ -4834,42 +4841,42 @@ sub find_packages_in_files { if ( exists( $prime{$package} ) ) { # primary package selected if ( $result->{err} ) { - # Use the selected primary package, but there are conflicting - # errors among multiple alternative packages that need to be - # reported + # Use the selected primary package, but there are conflicting + # errors among multiple alternative packages that need to be + # reported $self->log_warn( - "Found conflicting versions for package '$package'\n" . - " $prime{$package}{file} ($prime{$package}{version})\n" . - $result->{err} + "Found conflicting versions for package '$package'\n" . + " $prime{$package}{file} ($prime{$package}{version})\n" . + $result->{err} ); } elsif ( defined( $result->{version} ) ) { - # There is a primary package selected, and exactly one - # alternative package - - if ( exists( $prime{$package}{version} ) && - defined( $prime{$package}{version} ) ) { - # Unless the version of the primary package agrees with the - # version of the alternative package, report a conflict - if ( $self->compare_versions( $prime{$package}{version}, '!=', - $result->{version} ) ) { + # There is a primary package selected, and exactly one + # alternative package + + if ( exists( $prime{$package}{version} ) && + defined( $prime{$package}{version} ) ) { + # Unless the version of the primary package agrees with the + # version of the alternative package, report a conflict + if ( $self->compare_versions( $prime{$package}{version}, '!=', + $result->{version} ) ) { $self->log_warn( "Found conflicting versions for package '$package'\n" . - " $prime{$package}{file} ($prime{$package}{version})\n" . - " $result->{file} ($result->{version})\n" + " $prime{$package}{file} ($prime{$package}{version})\n" . + " $result->{file} ($result->{version})\n" ); - } + } - } else { - # The prime package selected has no version so, we choose to - # use any alternative package that does have a version - $prime{$package}{file} = $result->{file}; - $prime{$package}{version} = $result->{version}; - } + } else { + # The prime package selected has no version so, we choose to + # use any alternative package that does have a version + $prime{$package}{file} = $result->{file}; + $prime{$package}{version} = $result->{version}; + } } else { - # no alt package found with a version, but we have a prime - # package so we use it whether it has a version or not + # no alt package found with a version, but we have a prime + # package so we use it whether it has a version or not } } else { # No primary package was selected, use the best alternative @@ -4877,7 +4884,7 @@ sub find_packages_in_files { if ( $result->{err} ) { $self->log_warn( "Found conflicting versions for package '$package'\n" . - $result->{err} + $result->{err} ); } @@ -4885,14 +4892,18 @@ sub find_packages_in_files { # something rather than nothing $prime{$package}{file} = $result->{file}; $prime{$package}{version} = $result->{version} - if defined( $result->{version} ); + if defined( $result->{version} ); } } - # Normalize versions. Can't use exists() here because of bug in YAML::Node. - # XXX "bug in YAML::Node" comment seems irrelvant -- dagolden, 2009-05-18 - for (grep defined $_->{version}, values %prime) { - $_->{version} = $self->normalize_version( $_->{version} ); + # Normalize versions or delete them if undef/0 + for my $provides ( values %prime ) { + if ( $provides->{version} ) { + $provides->{version} = $self->normalize_version( $provides->{version} ) + } + else { + delete $provides->{version}; + } } return \%prime; @@ -4910,16 +4921,16 @@ sub _resolve_module_versions { my $err = ''; foreach my $p ( @$packages ) { if ( defined( $p->{version} ) ) { - if ( defined( $version ) ) { - if ( $self->compare_versions( $version, '!=', $p->{version} ) ) { - $err .= " $p->{file} ($p->{version})\n"; - } else { - # same version declared multiple times, ignore - } - } else { - $file = $p->{file}; - $version = $p->{version}; - } + if ( defined( $version ) ) { + if ( $self->compare_versions( $version, '!=', $p->{version} ) ) { + $err .= " $p->{file} ($p->{version})\n"; + } else { + # same version declared multiple times, ignore + } + } else { + $file = $p->{file}; + $version = $p->{version}; + } } $file ||= $p->{file} if defined( $p->{file} ); } @@ -5106,9 +5117,9 @@ sub prefix_relative { my $relpath = $self->install_sets($installdirs)->{$type}; return $self->_prefixify($relpath, - $self->original_prefix($installdirs), - $type, - ); + $self->original_prefix($installdirs), + $type, + ); } # Translated from ExtUtils::MM_Unix::prefixify() @@ -5262,8 +5273,8 @@ sub rscan_dir { local $_; # find() can overwrite $_, so protect ourselves my $subr = !$pattern ? sub {push @result, $File::Find::name} : !ref($pattern) || (ref $pattern eq 'Regexp') ? sub {push @result, $File::Find::name if /$pattern/} : - ref($pattern) eq 'CODE' ? sub {push @result, $File::Find::name if $pattern->()} : - die "Unknown pattern type"; + ref($pattern) eq 'CODE' ? sub {push @result, $File::Find::name if $pattern->()} : + die "Unknown pattern type"; File::Find::find({wanted => $subr, no_chdir => 1}, $dir); return \@result; @@ -5329,11 +5340,11 @@ sub compile_c { return $obj_file if $self->up_to_date($file, $obj_file); $b->compile(source => $file, - defines => $args{defines}, - object_file => $obj_file, - include_dirs => $self->include_dirs, - extra_compiler_flags => $self->extra_compiler_flags, - ); + defines => $args{defines}, + object_file => $obj_file, + include_dirs => $self->include_dirs, + extra_compiler_flags => $self->extra_compiler_flags, + ); return $obj_file; } @@ -5348,7 +5359,7 @@ sub link_c { return $spec->{lib_file} if $self->up_to_date([$spec->{obj_file}, @$objects], - $spec->{lib_file}); + $spec->{lib_file}); my $module_name = $spec->{module_name} || $self->module_name; @@ -5369,10 +5380,10 @@ sub compile_xs { if (eval {require ExtUtils::ParseXS; 1}) { ExtUtils::ParseXS::process_file( - filename => $file, - prototypes => 0, - output => $args{outfile}, - ); + filename => $file, + prototypes => 0, + output => $args{outfile}, + ); } else { # Ok, I give up. Just use backticks. @@ -5393,7 +5404,7 @@ sub compile_xs { my $perl = $self->{properties}{perl}; my @command = ($perl, "-I".$cf->get('installarchlib'), "-I".$cf->get('installprivlib'), $xsubpp, '-noprototypes', - @typemaps, $file); + @typemaps, $file); $self->log_info("@command\n"); my $fh = IO::File->new("> $args{outfile}") or die "Couldn't write $args{outfile}: $!"; @@ -5480,18 +5491,18 @@ sub _infer_xs_spec { $spec{module_name} = join( '::', (@d, $file_base) ); $spec{archdir} = File::Spec->catdir($self->blib, 'arch', 'auto', - @d, $file_base); + @d, $file_base); $spec{bs_file} = File::Spec->catfile($spec{archdir}, "${file_base}.bs"); $spec{lib_file} = File::Spec->catfile($spec{archdir}, - "${file_base}.".$cf->get('dlext')); + "${file_base}.".$cf->get('dlext')); $spec{c_file} = File::Spec->catfile( $spec{src_dir}, - "${file_base}.c" ); + "${file_base}.c" ); $spec{obj_file} = File::Spec->catfile( $spec{src_dir}, - "${file_base}".$cf->get('obj_ext') ); + "${file_base}".$cf->get('obj_ext') ); return \%spec; } @@ -5514,7 +5525,7 @@ sub process_xs { # .c -> .o my $v = $self->dist_version; $self->compile_c($spec->{c_file}, - defines => {VERSION => qq{"$v"}, XS_VERSION => qq{"$v"}}); + defines => {VERSION => qq{"$v"}, XS_VERSION => qq{"$v"}}); # archdir File::Path::mkpath($spec->{archdir}, 0, oct(777)) unless -d $spec->{archdir}; @@ -5559,9 +5570,9 @@ sub do_system { sub copy_if_modified { my $self = shift; my %args = (@_ > 3 - ? ( @_ ) - : ( from => shift, to_dir => shift, flatten => shift ) - ); + ? ( @_ ) + : ( from => shift, to_dir => shift, flatten => shift ) + ); $args{verbose} = !$self->quiet unless exists $args{verbose}; @@ -5578,8 +5589,8 @@ sub copy_if_modified { $to_path = $args{to}; } elsif (defined $args{to_dir} and length $args{to_dir}) { $to_path = File::Spec->catfile( $args{to_dir}, $args{flatten} - ? File::Basename::basename($file) - : $file ); + ? File::Basename::basename($file) + : $file ); } else { die "No 'to' or 'to_dir' parameter given to copy_if_modified"; } @@ -5645,8 +5656,8 @@ sub dir_contains { return 0 if @second_dirs < @first_dirs; my $is_same = ( $self->_case_tolerant - ? sub {lc(shift()) eq lc(shift())} - : sub {shift() eq shift()} ); + ? sub {lc(shift()) eq lc(shift())} + : sub {shift() eq shift()} ); while (@first_dirs) { return 0 unless $is_same->(shift @first_dirs, shift @second_dirs); diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Compat.pm b/Master/tlpkg/tlperl/lib/Module/Build/Compat.pm index 452dfb96ad5..79499a6efd9 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Compat.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Compat.pm @@ -2,7 +2,7 @@ package Module::Build::Compat; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; use File::Basename (); use File::Spec; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Config.pm b/Master/tlpkg/tlperl/lib/Module/Build/Config.pm index 9f3dc6779e5..88a3ff31579 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Config.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Config.pm @@ -2,7 +2,7 @@ package Module::Build::Config; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Config; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Cookbook.pm b/Master/tlpkg/tlperl/lib/Module/Build/Cookbook.pm index 80af7c4c0d9..e66020cf826 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Cookbook.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Cookbook.pm @@ -1,7 +1,7 @@ package Module::Build::Cookbook; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; =head1 NAME diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Dumper.pm b/Master/tlpkg/tlperl/lib/Module/Build/Dumper.pm index 8191410460f..73839c79e4d 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Dumper.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Dumper.pm @@ -1,7 +1,7 @@ package Module::Build::Dumper; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; # This is just a split-out of a wrapper function to do Data::Dumper # stuff "the right way". See: diff --git a/Master/tlpkg/tlperl/lib/Module/Build/ModuleInfo.pm b/Master/tlpkg/tlperl/lib/Module/Build/ModuleInfo.pm index a4c66853e89..b36cc388c3d 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/ModuleInfo.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/ModuleInfo.pm @@ -4,7 +4,7 @@ package Module::Build::ModuleInfo; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; require Module::Metadata; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Notes.pm b/Master/tlpkg/tlperl/lib/Module/Build/Notes.pm index 9a80a594304..04773229932 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Notes.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Notes.pm @@ -4,7 +4,7 @@ package Module::Build::Notes; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Data::Dumper; use IO::File; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/PPMMaker.pm b/Master/tlpkg/tlperl/lib/Module/Build/PPMMaker.pm index 62e8b0408c5..34f549576af 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/PPMMaker.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/PPMMaker.pm @@ -5,7 +5,7 @@ use Config; use vars qw($VERSION); use IO::File; -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; # This code is mostly borrowed from ExtUtils::MM_Unix 6.10_03, with a diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/Amiga.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/Amiga.pm index e088c84833d..0be3dde62ec 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/Amiga.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/Amiga.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::Amiga; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/Default.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/Default.pm index 8669036ab3d..53bffc05940 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/Default.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/Default.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::Default; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/EBCDIC.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/EBCDIC.pm index 0cd526448b1..8c4349b5f6c 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/EBCDIC.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/EBCDIC.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::EBCDIC; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/MPEiX.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/MPEiX.pm index 21c757b3172..5688a99329d 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/MPEiX.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/MPEiX.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::MPEiX; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/MacOS.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/MacOS.pm index 3f49c8288a5..8b567668529 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/MacOS.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/MacOS.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::MacOS; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Base; use vars qw(@ISA); diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/RiscOS.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/RiscOS.pm index 4717481fb86..6ed9d3d1c37 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/RiscOS.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/RiscOS.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::RiscOS; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/Unix.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/Unix.pm index 611c2cf8d3d..e3d7ff5b224 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/Unix.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/Unix.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::Unix; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/VMS.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/VMS.pm index 4842e6cbde9..7ff7e056bdc 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/VMS.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/VMS.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::VMS; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Base; use Config; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/VOS.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/VOS.pm index bec44da6af9..2578e31b3be 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/VOS.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/VOS.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::VOS; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Base; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/Windows.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/Windows.pm index 5094c41629e..e35e28f707f 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/Windows.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/Windows.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::Windows; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Config; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/aix.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/aix.pm index cd4cf24ceb4..3833ceb9761 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/aix.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/aix.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::aix; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Platform::Unix; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/cygwin.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/cygwin.pm index 2ecd9ae5561..15d3e818412 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/cygwin.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/cygwin.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::cygwin; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Platform::Unix; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/darwin.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/darwin.pm index e7d256a839e..45d68fdcd0a 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/darwin.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/darwin.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::darwin; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Platform::Unix; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/Platform/os2.pm b/Master/tlpkg/tlperl/lib/Module/Build/Platform/os2.pm index d9436713ba8..52d6e173d87 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/Platform/os2.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/Platform/os2.pm @@ -2,7 +2,7 @@ package Module::Build::Platform::os2; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use Module::Build::Platform::Unix; diff --git a/Master/tlpkg/tlperl/lib/Module/Build/PodParser.pm b/Master/tlpkg/tlperl/lib/Module/Build/PodParser.pm index 8230192056f..6605fd47272 100644 --- a/Master/tlpkg/tlperl/lib/Module/Build/PodParser.pm +++ b/Master/tlpkg/tlperl/lib/Module/Build/PodParser.pm @@ -2,7 +2,7 @@ package Module::Build::PodParser; use strict; use vars qw($VERSION); -$VERSION = '0.39_01'; +$VERSION = '0.4003'; $VERSION = eval $VERSION; use vars qw(@ISA); @@ -28,7 +28,8 @@ sub parse_from_filehandle { local $_; while (<$fh>) { next unless /^=(?!cut)/ .. /^=cut/; # in POD - last if ($self->{abstract}) = /^ (?: [a-z:]+ \s+ - \s+ ) (.*\S) /ix; + # Accept Name - abstract or C<Name> - abstract + last if ($self->{abstract}) = /^ (?: [a-z0-9:]+ | [BCIF] < [a-z0-9:]+ > ) \s+ - \s+ (.*\S) /ix; } my @author; diff --git a/Master/tlpkg/tlperl/lib/Module/CoreList.pm b/Master/tlpkg/tlperl/lib/Module/CoreList.pm index 6cd5fc76d6d..702cfd69490 100644 --- a/Master/tlpkg/tlperl/lib/Module/CoreList.pm +++ b/Master/tlpkg/tlperl/lib/Module/CoreList.pm @@ -1,9 +1,9 @@ package Module::CoreList; use strict; use vars qw/$VERSION %released %version %families %upstream - %bug_tracker %deprecated/; + %bug_tracker %deprecated %delta/; use Module::CoreList::TieHashDelta; -$VERSION = '2.76'; +$VERSION = '3.03'; my $dumpinc = 0; sub import { @@ -78,6 +78,17 @@ sub is_deprecated { return $deprecated{$perl_version}{$module}; } +sub deprecated_in { + my $module = shift; + $module = shift if eval { $module->isa(__PACKAGE__) } + and scalar @_ and $_[0] =~ m#\A[a-zA-Z_][0-9a-zA-Z_]*(?:(::|')[0-9a-zA-Z_]+)*\z#; + return unless $module; + my @perls = grep { exists $deprecated{$_}{$module} } keys %deprecated; + return unless @perls; + require List::Util; + return List::Util::minstr(@perls); +} + sub removed_from { my @perls = &removed_raw; return shift @perls; @@ -99,7 +110,9 @@ sub removed_raw { } sub changes_between { - my ($left_ver, $right_ver) = @_; + my $left_ver = shift; + $left_ver = shift if eval { $left_ver->isa(__PACKAGE__) }; + my $right_ver = shift; my $left = $version{ $left_ver }; my $right = $version{ $right_ver }; @@ -188,6 +201,7 @@ sub changes_between { 5.013011 => '2011-03-20', 5.014000 => '2011-05-14', 5.012004 => '2011-06-20', + 5.012005 => '2012-11-10', 5.014001 => '2011-06-16', 5.015000 => '2011-06-20', 5.015001 => '2011-07-20', @@ -210,6 +224,25 @@ sub changes_between { 5.017004 => '2012-09-20', 5.014003 => '2012-10-12', 5.017005 => '2012-10-20', + 5.017006 => '2012-11-20', + 5.017007 => '2012-12-18', + 5.017008 => '2013-01-20', + 5.017009 => '2013-02-20', + 5.014004 => '2013-03-10', + 5.016003 => '2013-03-11', + 5.017010 => '2013-03-21', + 5.017011 => '2013-04-20', + 5.018000 => '2013-05-18', + 5.019000 => '2013-05-20', + 5.019001 => '2013-06-21', + 5.019002 => '2013-07-22', + 5.018001 => '2013-08-12', + 5.019003 => '2013-08-20', + 5.019004 => '2013-09-20', + 5.019005 => '2013-10-20', + 5.019006 => '2013-11-20', + 5.019007 => '2013-12-20', + 5.018002 => '2014-01-09', ); for my $version ( sort { $a <=> $b } keys %released ) { @@ -217,7 +250,7 @@ for my $version ( sort { $a <=> $b } keys %released ) { push @{ $families{ $family }} , $version; } -my %delta = ( +%delta = ( 5 => { changed => { 'AnyDBM_File' => undef, @@ -542,6 +575,7 @@ my %delta = ( 'CPAN::FirstTime' => '1.29 ', 'DB_File' => '1.60', 'Data::Dumper' => '2.09', + 'Errno' => '1.09', 'ExtUtils::Installed' => '0.02', 'ExtUtils::MM_Unix' => '1.12601 ', 'ExtUtils::MakeMaker' => '5.4301', @@ -590,6 +624,7 @@ my %delta = ( 'DB_File' => '1.65', 'Data::Dumper' => '2.101', 'Dumpvalue' => undef, + 'Errno' => '1.111', 'ExtUtils::Install' => '1.28', 'ExtUtils::Liblist' => '1.25', 'ExtUtils::MM_Unix' => '1.12602', @@ -615,7 +650,6 @@ my %delta = ( changed => { 'CPAN::FirstTime' => '1.36 ', 'DB_File' => '1.807', - 'Errno' => '1.111', 'ExtUtils::Install' => '1.28 ', 'ExtUtils::Liblist' => '1.25 ', 'ExtUtils::MM_Unix' => '1.12602 ', @@ -1161,7 +1195,6 @@ my %delta = ( 'warnings::register' => '1.00', }, removed => { - 'Errno' => 1, } }, 5.008 => { @@ -4345,6 +4378,19 @@ my %delta = ( removed => { } }, + 5.012005 => { + delta_from => 5.012004, + changed => { + 'B::Concise' => '0.78_01', + 'Encode' => '2.39_01', + 'File::Glob' => '1.07_01', + 'Module::CoreList' => '2.50_02', + 'Unicode::UCD' => '0.29', + 'charnames' => '1.07_01', + }, + removed => { + } + }, 5.013 => { delta_from => 5.012, changed => { @@ -5578,6 +5624,16 @@ my %delta = ( removed => { } }, + 5.014004 => { + delta_from => 5.014003, + changed => { + 'Encode' => '2.42_02', + 'IPC::Open3' => '1.0901', + 'Module::CoreList' => '2.49_06', + }, + removed => { + } + }, 5.015 => { delta_from => 5.014001, changed => { @@ -6727,6 +6783,17 @@ my %delta = ( 5.016002 => { delta_from => 5.016001, changed => { + 'Module::CoreList' => '2.76', + }, + removed => { + } + }, + 5.016003 => { + delta_from => 5.016002, + changed => { + 'Encode' => '2.44_01', + 'Module::CoreList' => '2.76_02', + 'XS::APItest' => '0.39', }, removed => { } @@ -7293,195 +7360,2285 @@ my %delta = ( removed => { } }, -); - -for my $version (sort { $a <=> $b } keys %delta) { - my $data = $delta{$version}; - - tie %{$version{$version}}, 'Module::CoreList::TieHashDelta', - $data->{changed}, $data->{removed}, - $data->{delta_from} ? $version{$data->{delta_from}} : undef; -} - -%deprecated = ( - 5.011 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', - }, - 5.011001 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', - }, - 5.011002 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', - }, - 5.011003 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', - }, - 5.011004 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', - }, - 5.011005 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', - }, - 5.012000 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', - }, - 5.013000 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', - }, - 5.012001 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', - }, - 5.013001 => { - 'Shell' => '1', - }, - 5.013002 => { - 'Shell' => '1', - }, - 5.013003 => { - 'Shell' => '1', - }, - 5.013004 => { - 'Shell' => '1', - }, - 5.012002 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', - }, - 5.013005 => { - 'Shell' => '1', - }, - 5.013006 => { - 'Shell' => '1', - }, - 5.013007 => { - 'Shell' => '1', + 5.017006 => { + delta_from => 5.017005, + changed => { + 'B' => '1.40', + 'B::Concise' => '0.94', + 'B::Deparse' => '1.19', + 'B::Xref' => '1.05', + 'CGI' => '3.63', + 'CGI::Util' => '3.62', + 'CPAN' => '1.99_51', + 'CPANPLUS::Dist::Build' => '0.64', + 'CPANPLUS::Dist::Build::Constants'=> '0.64', + 'Carp' => '1.28', + 'Carp::Heavy' => '1.28', + 'Compress::Raw::Bzip2' => '2.058', + 'Compress::Raw::Zlib' => '2.058', + 'Compress::Zlib' => '2.058', + 'Data::Dumper' => '2.137', + 'Digest::SHA' => '5.73', + 'DynaLoader' => '1.17', + 'Env' => '1.04', + 'Errno' => '1.17', + 'ExtUtils::Manifest' => '1.62', + 'ExtUtils::Typemaps' => '3.18', + 'ExtUtils::Typemaps::Cmd'=> '3.18', + 'ExtUtils::Typemaps::InputMap'=> '3.18', + 'ExtUtils::Typemaps::OutputMap'=> '3.18', + 'ExtUtils::Typemaps::Type'=> '3.18', + 'Fatal' => '2.13', + 'File::Find' => '1.23', + 'Hash::Util' => '0.13', + 'IO::Compress::Adapter::Bzip2'=> '2.058', + 'IO::Compress::Adapter::Deflate'=> '2.058', + 'IO::Compress::Adapter::Identity'=> '2.058', + 'IO::Compress::Base' => '2.058', + 'IO::Compress::Base::Common'=> '2.058', + 'IO::Compress::Bzip2' => '2.058', + 'IO::Compress::Deflate' => '2.058', + 'IO::Compress::Gzip' => '2.058', + 'IO::Compress::Gzip::Constants'=> '2.058', + 'IO::Compress::RawDeflate'=> '2.058', + 'IO::Compress::Zip' => '2.058', + 'IO::Compress::Zip::Constants'=> '2.058', + 'IO::Compress::Zlib::Constants'=> '2.058', + 'IO::Compress::Zlib::Extra'=> '2.058', + 'IO::Uncompress::Adapter::Bunzip2'=> '2.058', + 'IO::Uncompress::Adapter::Identity'=> '2.058', + 'IO::Uncompress::Adapter::Inflate'=> '2.058', + 'IO::Uncompress::AnyInflate'=> '2.058', + 'IO::Uncompress::AnyUncompress'=> '2.058', + 'IO::Uncompress::Base' => '2.058', + 'IO::Uncompress::Bunzip2'=> '2.058', + 'IO::Uncompress::Gunzip'=> '2.058', + 'IO::Uncompress::Inflate'=> '2.058', + 'IO::Uncompress::RawInflate'=> '2.058', + 'IO::Uncompress::Unzip' => '2.058', + 'Module::CoreList' => '2.78', + 'Module::CoreList::TieHashDelta'=> '2.77', + 'Module::Pluggable' => '4.5', + 'Module::Pluggable::Object'=> '4.5', + 'Opcode' => '1.25', + 'Sys::Hostname' => '1.17', + 'Term::UI' => '0.32', + 'Thread::Queue' => '3.01', + 'Tie::Hash::NamedCapture'=> '0.09', + 'Unicode::Collate' => '0.93', + 'Unicode::Collate::CJK::Korean'=> '0.93', + 'Unicode::Collate::Locale'=> '0.93', + 'Unicode::Normalize' => '1.16', + 'Unicode::UCD' => '0.47', + 'XS::APItest' => '0.46', + '_charnames' => '1.33', + 'autodie' => '2.13', + 'autodie::exception' => '2.13', + 'autodie::exception::system'=> '2.13', + 'autodie::hints' => '2.13', + 'charnames' => '1.33', + 're' => '0.23', + }, + removed => { + } }, - 5.013008 => { - 'Shell' => '1', + 5.017007 => { + delta_from => 5.017006, + changed => { + 'B' => '1.41', + 'CPANPLUS::Dist::Build' => '0.68', + 'CPANPLUS::Dist::Build::Constants'=> '0.68', + 'Compress::Raw::Bzip2' => '2.059', + 'Compress::Raw::Zlib' => '2.059', + 'Compress::Zlib' => '2.059', + 'Cwd' => '3.39_03', + 'Data::Dumper' => '2.139', + 'Devel::Peek' => '1.11', + 'Digest::SHA' => '5.80', + 'DynaLoader' => '1.18', + 'English' => '1.06', + 'Errno' => '1.18', + 'ExtUtils::Command::MM' => '6.64', + 'ExtUtils::Liblist' => '6.64', + 'ExtUtils::Liblist::Kid'=> '6.64', + 'ExtUtils::MM' => '6.64', + 'ExtUtils::MM_AIX' => '6.64', + 'ExtUtils::MM_Any' => '6.64', + 'ExtUtils::MM_BeOS' => '6.64', + 'ExtUtils::MM_Cygwin' => '6.64', + 'ExtUtils::MM_DOS' => '6.64', + 'ExtUtils::MM_Darwin' => '6.64', + 'ExtUtils::MM_MacOS' => '6.64', + 'ExtUtils::MM_NW5' => '6.64', + 'ExtUtils::MM_OS2' => '6.64', + 'ExtUtils::MM_QNX' => '6.64', + 'ExtUtils::MM_UWIN' => '6.64', + 'ExtUtils::MM_Unix' => '6.64', + 'ExtUtils::MM_VMS' => '6.64', + 'ExtUtils::MM_VOS' => '6.64', + 'ExtUtils::MM_Win32' => '6.64', + 'ExtUtils::MM_Win95' => '6.64', + 'ExtUtils::MY' => '6.64', + 'ExtUtils::MakeMaker' => '6.64', + 'ExtUtils::MakeMaker::Config'=> '6.64', + 'ExtUtils::Mkbootstrap' => '6.64', + 'ExtUtils::Mksymlists' => '6.64', + 'ExtUtils::testlib' => '6.64', + 'File::DosGlob' => '1.09', + 'File::Glob' => '1.19', + 'GDBM_File' => '1.15', + 'IO::Compress::Adapter::Bzip2'=> '2.059', + 'IO::Compress::Adapter::Deflate'=> '2.059', + 'IO::Compress::Adapter::Identity'=> '2.059', + 'IO::Compress::Base' => '2.059', + 'IO::Compress::Base::Common'=> '2.059', + 'IO::Compress::Bzip2' => '2.059', + 'IO::Compress::Deflate' => '2.059', + 'IO::Compress::Gzip' => '2.059', + 'IO::Compress::Gzip::Constants'=> '2.059', + 'IO::Compress::RawDeflate'=> '2.059', + 'IO::Compress::Zip' => '2.059', + 'IO::Compress::Zip::Constants'=> '2.059', + 'IO::Compress::Zlib::Constants'=> '2.059', + 'IO::Compress::Zlib::Extra'=> '2.059', + 'IO::Uncompress::Adapter::Bunzip2'=> '2.059', + 'IO::Uncompress::Adapter::Identity'=> '2.059', + 'IO::Uncompress::Adapter::Inflate'=> '2.059', + 'IO::Uncompress::AnyInflate'=> '2.059', + 'IO::Uncompress::AnyUncompress'=> '2.059', + 'IO::Uncompress::Base' => '2.059', + 'IO::Uncompress::Bunzip2'=> '2.059', + 'IO::Uncompress::Gunzip'=> '2.059', + 'IO::Uncompress::Inflate'=> '2.059', + 'IO::Uncompress::RawInflate'=> '2.059', + 'IO::Uncompress::Unzip' => '2.059', + 'List::Util' => '1.26', + 'List::Util::XS' => '1.26', + 'Locale::Codes' => '3.24', + 'Locale::Codes::Constants'=> '3.24', + 'Locale::Codes::Country'=> '3.24', + 'Locale::Codes::Country_Codes'=> '3.24', + 'Locale::Codes::Country_Retired'=> '3.24', + 'Locale::Codes::Currency'=> '3.24', + 'Locale::Codes::Currency_Codes'=> '3.24', + 'Locale::Codes::Currency_Retired'=> '3.24', + 'Locale::Codes::LangExt'=> '3.24', + 'Locale::Codes::LangExt_Codes'=> '3.24', + 'Locale::Codes::LangExt_Retired'=> '3.24', + 'Locale::Codes::LangFam'=> '3.24', + 'Locale::Codes::LangFam_Codes'=> '3.24', + 'Locale::Codes::LangFam_Retired'=> '3.24', + 'Locale::Codes::LangVar'=> '3.24', + 'Locale::Codes::LangVar_Codes'=> '3.24', + 'Locale::Codes::LangVar_Retired'=> '3.24', + 'Locale::Codes::Language'=> '3.24', + 'Locale::Codes::Language_Codes'=> '3.24', + 'Locale::Codes::Language_Retired'=> '3.24', + 'Locale::Codes::Script' => '3.24', + 'Locale::Codes::Script_Codes'=> '3.24', + 'Locale::Codes::Script_Retired'=> '3.24', + 'Locale::Country' => '3.24', + 'Locale::Currency' => '3.24', + 'Locale::Language' => '3.24', + 'Locale::Maketext' => '1.23', + 'Locale::Script' => '3.24', + 'Module::CoreList' => '2.79', + 'Module::CoreList::TieHashDelta'=> '2.79', + 'POSIX' => '1.32', + 'Scalar::Util' => '1.26', + 'Socket' => '2.006_001', + 'Storable' => '2.40', + 'Term::ReadLine' => '1.11', + 'Unicode::Collate' => '0.96', + 'Unicode::Collate::CJK::Stroke'=> '0.94', + 'Unicode::Collate::CJK::Zhuyin'=> '0.94', + 'Unicode::Collate::Locale'=> '0.96', + 'XS::APItest' => '0.48', + 'XS::Typemap' => '0.09', + '_charnames' => '1.34', + 'charnames' => '1.34', + 'feature' => '1.32', + 'mro' => '1.10', + 'sigtrap' => '1.07', + 'sort' => '2.02', + }, + removed => { + } }, - 5.012003 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', + 5.017008 => { + delta_from => 5.017007, + changed => { + 'Archive::Extract' => '0.62', + 'B' => '1.42', + 'B::Concise' => '0.95', + 'Compress::Raw::Bzip2' => '2.060', + 'Compress::Raw::Zlib' => '2.060', + 'Compress::Zlib' => '2.060', + 'Cwd' => '3.40', + 'Data::Dumper' => '2.141', + 'Digest::SHA' => '5.81', + 'ExtUtils::Install' => '1.59', + 'File::Fetch' => '0.38', + 'File::Path' => '2.09', + 'File::Spec' => '3.40', + 'File::Spec::Cygwin' => '3.40', + 'File::Spec::Epoc' => '3.40', + 'File::Spec::Functions' => '3.40', + 'File::Spec::Mac' => '3.40', + 'File::Spec::OS2' => '3.40', + 'File::Spec::Unix' => '3.40', + 'File::Spec::VMS' => '3.40', + 'File::Spec::Win32' => '3.40', + 'HTTP::Tiny' => '0.025', + 'Hash::Util' => '0.14', + 'I18N::LangTags' => '0.39', + 'I18N::LangTags::List' => '0.39', + 'I18N::Langinfo' => '0.09', + 'IO' => '1.26', + 'IO::Compress::Adapter::Bzip2'=> '2.060', + 'IO::Compress::Adapter::Deflate'=> '2.060', + 'IO::Compress::Adapter::Identity'=> '2.060', + 'IO::Compress::Base' => '2.060', + 'IO::Compress::Base::Common'=> '2.060', + 'IO::Compress::Bzip2' => '2.060', + 'IO::Compress::Deflate' => '2.060', + 'IO::Compress::Gzip' => '2.060', + 'IO::Compress::Gzip::Constants'=> '2.060', + 'IO::Compress::RawDeflate'=> '2.060', + 'IO::Compress::Zip' => '2.060', + 'IO::Compress::Zip::Constants'=> '2.060', + 'IO::Compress::Zlib::Constants'=> '2.060', + 'IO::Compress::Zlib::Extra'=> '2.060', + 'IO::Uncompress::Adapter::Bunzip2'=> '2.060', + 'IO::Uncompress::Adapter::Identity'=> '2.060', + 'IO::Uncompress::Adapter::Inflate'=> '2.060', + 'IO::Uncompress::AnyInflate'=> '2.060', + 'IO::Uncompress::AnyUncompress'=> '2.060', + 'IO::Uncompress::Base' => '2.060', + 'IO::Uncompress::Bunzip2'=> '2.060', + 'IO::Uncompress::Gunzip'=> '2.060', + 'IO::Uncompress::Inflate'=> '2.060', + 'IO::Uncompress::RawInflate'=> '2.060', + 'IO::Uncompress::Unzip' => '2.060', + 'List::Util' => '1.27', + 'List::Util::XS' => '1.27', + 'Module::CoreList' => '2.80', + 'Module::CoreList::TieHashDelta'=> '2.80', + 'Pod::Html' => '1.17', + 'Pod::LaTeX' => '0.61', + 'Pod::Man' => '2.27', + 'Pod::Text' => '3.17', + 'Pod::Text::Color' => '2.07', + 'Pod::Text::Overstrike' => '2.05', + 'Pod::Text::Termcap' => '2.07', + 'Safe' => '2.34', + 'Scalar::Util' => '1.27', + 'Socket' => '2.009', + 'Term::ANSIColor' => '4.02', + 'Test' => '1.26', + 'Unicode::Collate' => '0.97', + 'XS::APItest' => '0.51', + 'XS::Typemap' => '0.10', + '_charnames' => '1.35', + 'charnames' => '1.35', + 'constant' => '1.25', + 'diagnostics' => '1.31', + 'threads::shared' => '1.43', + 'warnings' => '1.16', + }, + removed => { + } }, - 5.013009 => { - 'Shell' => '1', + 5.017009 => { + delta_from => 5.017008, + changed => { + 'App::Cpan' => '1.60_02', + 'App::Prove' => '3.26', + 'App::Prove::State' => '3.26', + 'App::Prove::State::Result'=> '3.26', + 'App::Prove::State::Result::Test'=> '3.26', + 'Archive::Extract' => '0.68', + 'Attribute::Handlers' => '0.94', + 'B::Lint' => '1.17', + 'B::Lint::Debug' => '1.17', + 'Benchmark' => '1.14', + 'CPAN' => '2.00', + 'CPAN::Distribution' => '2.00', + 'CPAN::FirstTime' => '5.5304', + 'CPAN::Nox' => '5.5001', + 'CPANPLUS' => '0.9135', + 'CPANPLUS::Backend' => '0.9135', + 'CPANPLUS::Backend::RV' => '0.9135', + 'CPANPLUS::Config' => '0.9135', + 'CPANPLUS::Config::HomeEnv'=> '0.9135', + 'CPANPLUS::Configure' => '0.9135', + 'CPANPLUS::Configure::Setup'=> '0.9135', + 'CPANPLUS::Dist' => '0.9135', + 'CPANPLUS::Dist::Autobundle'=> '0.9135', + 'CPANPLUS::Dist::Base' => '0.9135', + 'CPANPLUS::Dist::Build' => '0.70', + 'CPANPLUS::Dist::Build::Constants'=> '0.70', + 'CPANPLUS::Dist::MM' => '0.9135', + 'CPANPLUS::Dist::Sample'=> '0.9135', + 'CPANPLUS::Error' => '0.9135', + 'CPANPLUS::Internals' => '0.9135', + 'CPANPLUS::Internals::Constants'=> '0.9135', + 'CPANPLUS::Internals::Constants::Report'=> '0.9135', + 'CPANPLUS::Internals::Extract'=> '0.9135', + 'CPANPLUS::Internals::Fetch'=> '0.9135', + 'CPANPLUS::Internals::Report'=> '0.9135', + 'CPANPLUS::Internals::Search'=> '0.9135', + 'CPANPLUS::Internals::Source'=> '0.9135', + 'CPANPLUS::Internals::Source::Memory'=> '0.9135', + 'CPANPLUS::Internals::Source::SQLite'=> '0.9135', + 'CPANPLUS::Internals::Source::SQLite::Tie'=> '0.9135', + 'CPANPLUS::Internals::Utils'=> '0.9135', + 'CPANPLUS::Internals::Utils::Autoflush'=> '0.9135', + 'CPANPLUS::Module' => '0.9135', + 'CPANPLUS::Module::Author'=> '0.9135', + 'CPANPLUS::Module::Author::Fake'=> '0.9135', + 'CPANPLUS::Module::Checksums'=> '0.9135', + 'CPANPLUS::Module::Fake'=> '0.9135', + 'CPANPLUS::Module::Signature'=> '0.9135', + 'CPANPLUS::Selfupdate' => '0.9135', + 'CPANPLUS::Shell' => '0.9135', + 'CPANPLUS::Shell::Classic'=> '0.9135', + 'CPANPLUS::Shell::Default'=> '0.9135', + 'CPANPLUS::Shell::Default::Plugins::CustomSource'=> '0.9135', + 'CPANPLUS::Shell::Default::Plugins::Remote'=> '0.9135', + 'CPANPLUS::Shell::Default::Plugins::Source'=> '0.9135', + 'Config' => '5.017009', + 'Config::Perl::V' => '0.17', + 'DBM_Filter' => '0.05', + 'Data::Dumper' => '2.142', + 'Digest::SHA' => '5.82', + 'Encode' => '2.48', + 'ExtUtils::Installed' => '1.999003', + 'ExtUtils::Manifest' => '1.63', + 'ExtUtils::ParseXS::Utilities'=> '3.19', + 'ExtUtils::Typemaps' => '3.19', + 'File::CheckTree' => '4.42', + 'File::DosGlob' => '1.10', + 'File::Temp' => '0.22_90', + 'Filter::Simple' => '0.89', + 'IO' => '1.27', + 'Log::Message' => '0.06', + 'Log::Message::Config' => '0.06', + 'Log::Message::Handlers'=> '0.06', + 'Log::Message::Item' => '0.06', + 'Log::Message::Simple' => '0.10', + 'Math::BigInt' => '1.999', + 'Module::CoreList' => '2.82', + 'Module::CoreList::TieHashDelta'=> '2.82', + 'Module::Load' => '0.24', + 'Module::Pluggable' => '4.6', + 'Module::Pluggable::Object'=> '4.6', + 'Object::Accessor' => '0.46', + 'PerlIO::scalar' => '0.16', + 'Pod::Checker' => '1.60', + 'Pod::Find' => '1.60', + 'Pod::Html' => '1.18', + 'Pod::InputObjects' => '1.60', + 'Pod::ParseUtils' => '1.60', + 'Pod::Parser' => '1.60', + 'Pod::Perldoc' => '3.19', + 'Pod::Perldoc::BaseTo' => '3.19', + 'Pod::Perldoc::GetOptsOO'=> '3.19', + 'Pod::Perldoc::ToANSI' => '3.19', + 'Pod::Perldoc::ToChecker'=> '3.19', + 'Pod::Perldoc::ToMan' => '3.19', + 'Pod::Perldoc::ToNroff' => '3.19', + 'Pod::Perldoc::ToPod' => '3.19', + 'Pod::Perldoc::ToRtf' => '3.19', + 'Pod::Perldoc::ToTerm' => '3.19', + 'Pod::Perldoc::ToText' => '3.19', + 'Pod::Perldoc::ToTk' => '3.19', + 'Pod::Perldoc::ToXml' => '3.19', + 'Pod::PlainText' => '2.06', + 'Pod::Select' => '1.60', + 'Pod::Usage' => '1.61', + 'SelfLoader' => '1.21', + 'TAP::Base' => '3.26', + 'TAP::Formatter::Base' => '3.26', + 'TAP::Formatter::Color' => '3.26', + 'TAP::Formatter::Console'=> '3.26', + 'TAP::Formatter::Console::ParallelSession'=> '3.26', + 'TAP::Formatter::Console::Session'=> '3.26', + 'TAP::Formatter::File' => '3.26', + 'TAP::Formatter::File::Session'=> '3.26', + 'TAP::Formatter::Session'=> '3.26', + 'TAP::Harness' => '3.26', + 'TAP::Object' => '3.26', + 'TAP::Parser' => '3.26', + 'TAP::Parser::Aggregator'=> '3.26', + 'TAP::Parser::Grammar' => '3.26', + 'TAP::Parser::Iterator' => '3.26', + 'TAP::Parser::Iterator::Array'=> '3.26', + 'TAP::Parser::Iterator::Process'=> '3.26', + 'TAP::Parser::Iterator::Stream'=> '3.26', + 'TAP::Parser::IteratorFactory'=> '3.26', + 'TAP::Parser::Multiplexer'=> '3.26', + 'TAP::Parser::Result' => '3.26', + 'TAP::Parser::Result::Bailout'=> '3.26', + 'TAP::Parser::Result::Comment'=> '3.26', + 'TAP::Parser::Result::Plan'=> '3.26', + 'TAP::Parser::Result::Pragma'=> '3.26', + 'TAP::Parser::Result::Test'=> '3.26', + 'TAP::Parser::Result::Unknown'=> '3.26', + 'TAP::Parser::Result::Version'=> '3.26', + 'TAP::Parser::Result::YAML'=> '3.26', + 'TAP::Parser::ResultFactory'=> '3.26', + 'TAP::Parser::Scheduler'=> '3.26', + 'TAP::Parser::Scheduler::Job'=> '3.26', + 'TAP::Parser::Scheduler::Spinner'=> '3.26', + 'TAP::Parser::Source' => '3.26', + 'TAP::Parser::SourceHandler'=> '3.26', + 'TAP::Parser::SourceHandler::Executable'=> '3.26', + 'TAP::Parser::SourceHandler::File'=> '3.26', + 'TAP::Parser::SourceHandler::Handle'=> '3.26', + 'TAP::Parser::SourceHandler::Perl'=> '3.26', + 'TAP::Parser::SourceHandler::RawTAP'=> '3.26', + 'TAP::Parser::Utils' => '3.26', + 'TAP::Parser::YAMLish::Reader'=> '3.26', + 'TAP::Parser::YAMLish::Writer'=> '3.26', + 'Term::UI' => '0.34', + 'Test::Harness' => '3.26', + 'Text::Soundex' => '3.04', + 'Thread::Queue' => '3.02', + 'Unicode::UCD' => '0.50', + 'Win32' => '0.46', + 'Win32API::File' => '0.1201', + '_charnames' => '1.36', + 'arybase' => '0.06', + 'bigint' => '0.32', + 'bignum' => '0.32', + 'charnames' => '1.36', + 'filetest' => '1.03', + 'locale' => '1.02', + 'overload' => '1.21', + 'warnings' => '1.17', + }, + removed => { + } }, - 5.013010 => { - 'Shell' => '1', + 5.017010 => { + delta_from => 5.017009, + changed => { + 'Benchmark' => '1.15', + 'Config' => '5.017009', + 'Data::Dumper' => '2.145', + 'Digest::SHA' => '5.84', + 'Encode' => '2.49', + 'ExtUtils::Command::MM' => '6.65_01', + 'ExtUtils::Liblist' => '6.65_01', + 'ExtUtils::Liblist::Kid'=> '6.65_01', + 'ExtUtils::MM' => '6.65_01', + 'ExtUtils::MM_AIX' => '6.65_01', + 'ExtUtils::MM_Any' => '6.65_01', + 'ExtUtils::MM_BeOS' => '6.65_01', + 'ExtUtils::MM_Cygwin' => '6.65_01', + 'ExtUtils::MM_DOS' => '6.65_01', + 'ExtUtils::MM_Darwin' => '6.65_01', + 'ExtUtils::MM_MacOS' => '6.65_01', + 'ExtUtils::MM_NW5' => '6.65_01', + 'ExtUtils::MM_OS2' => '6.65_01', + 'ExtUtils::MM_QNX' => '6.65_01', + 'ExtUtils::MM_UWIN' => '6.65_01', + 'ExtUtils::MM_Unix' => '6.65_01', + 'ExtUtils::MM_VMS' => '6.65_01', + 'ExtUtils::MM_VOS' => '6.65_01', + 'ExtUtils::MM_Win32' => '6.65_01', + 'ExtUtils::MM_Win95' => '6.65_01', + 'ExtUtils::MY' => '6.65_01', + 'ExtUtils::MakeMaker' => '6.65_01', + 'ExtUtils::MakeMaker::Config'=> '6.65_01', + 'ExtUtils::Mkbootstrap' => '6.65_01', + 'ExtUtils::Mksymlists' => '6.65_01', + 'ExtUtils::testlib' => '6.65_01', + 'File::Copy' => '2.26', + 'File::Temp' => '0.23', + 'Getopt::Long' => '2.39', + 'Hash::Util' => '0.15', + 'I18N::Langinfo' => '0.10', + 'IPC::Cmd' => '0.80', + 'JSON::PP' => '2.27202', + 'Locale::Codes' => '3.25', + 'Locale::Codes::Constants'=> '3.25', + 'Locale::Codes::Country'=> '3.25', + 'Locale::Codes::Country_Codes'=> '3.25', + 'Locale::Codes::Country_Retired'=> '3.25', + 'Locale::Codes::Currency'=> '3.25', + 'Locale::Codes::Currency_Codes'=> '3.25', + 'Locale::Codes::Currency_Retired'=> '3.25', + 'Locale::Codes::LangExt'=> '3.25', + 'Locale::Codes::LangExt_Codes'=> '3.25', + 'Locale::Codes::LangExt_Retired'=> '3.25', + 'Locale::Codes::LangFam'=> '3.25', + 'Locale::Codes::LangFam_Codes'=> '3.25', + 'Locale::Codes::LangFam_Retired'=> '3.25', + 'Locale::Codes::LangVar'=> '3.25', + 'Locale::Codes::LangVar_Codes'=> '3.25', + 'Locale::Codes::LangVar_Retired'=> '3.25', + 'Locale::Codes::Language'=> '3.25', + 'Locale::Codes::Language_Codes'=> '3.25', + 'Locale::Codes::Language_Retired'=> '3.25', + 'Locale::Codes::Script' => '3.25', + 'Locale::Codes::Script_Codes'=> '3.25', + 'Locale::Codes::Script_Retired'=> '3.25', + 'Locale::Country' => '3.25', + 'Locale::Currency' => '3.25', + 'Locale::Language' => '3.25', + 'Locale::Script' => '3.25', + 'Math::BigFloat' => '1.998', + 'Math::BigFloat::Trace' => '0.32', + 'Math::BigInt' => '1.9991', + 'Math::BigInt::CalcEmu' => '1.998', + 'Math::BigInt::Trace' => '0.32', + 'Math::BigRat' => '0.2604', + 'Module::CoreList' => '2.84', + 'Module::CoreList::TieHashDelta'=> '2.84', + 'Module::Pluggable' => '4.7', + 'Net::Ping' => '2.41', + 'Perl::OSType' => '1.003', + 'Pod::Simple' => '3.26', + 'Pod::Simple::BlackBox' => '3.26', + 'Pod::Simple::Checker' => '3.26', + 'Pod::Simple::Debug' => '3.26', + 'Pod::Simple::DumpAsText'=> '3.26', + 'Pod::Simple::DumpAsXML'=> '3.26', + 'Pod::Simple::HTML' => '3.26', + 'Pod::Simple::HTMLBatch'=> '3.26', + 'Pod::Simple::LinkSection'=> '3.26', + 'Pod::Simple::Methody' => '3.26', + 'Pod::Simple::Progress' => '3.26', + 'Pod::Simple::PullParser'=> '3.26', + 'Pod::Simple::PullParserEndToken'=> '3.26', + 'Pod::Simple::PullParserStartToken'=> '3.26', + 'Pod::Simple::PullParserTextToken'=> '3.26', + 'Pod::Simple::PullParserToken'=> '3.26', + 'Pod::Simple::RTF' => '3.26', + 'Pod::Simple::Search' => '3.26', + 'Pod::Simple::SimpleTree'=> '3.26', + 'Pod::Simple::Text' => '3.26', + 'Pod::Simple::TextContent'=> '3.26', + 'Pod::Simple::TiedOutFH'=> '3.26', + 'Pod::Simple::Transcode'=> '3.26', + 'Pod::Simple::TranscodeDumb'=> '3.26', + 'Pod::Simple::TranscodeSmart'=> '3.26', + 'Pod::Simple::XHTML' => '3.26', + 'Pod::Simple::XMLOutStream'=> '3.26', + 'Safe' => '2.35', + 'Term::ReadLine' => '1.12', + 'Text::ParseWords' => '3.28', + 'Tie::File' => '0.99', + 'Unicode::UCD' => '0.51', + 'Win32' => '0.47', + 'bigint' => '0.33', + 'bignum' => '0.33', + 'bigrat' => '0.33', + 'constant' => '1.27', + 'perlfaq' => '5.0150042', + 'version' => '0.9902', + }, + removed => { + } }, - 5.013011 => { - 'Shell' => '1', + 5.017011 => { + delta_from => 5.017010, + changed => { + 'App::Cpan' => '1.61', + 'B::Deparse' => '1.20', + 'Config' => '5.017009', + 'Exporter' => '5.68', + 'Exporter::Heavy' => '5.68', + 'ExtUtils::CBuilder' => '0.280210', + 'ExtUtils::Command::MM' => '6.66', + 'ExtUtils::Liblist' => '6.66', + 'ExtUtils::Liblist::Kid'=> '6.66', + 'ExtUtils::MM' => '6.66', + 'ExtUtils::MM_AIX' => '6.66', + 'ExtUtils::MM_Any' => '6.66', + 'ExtUtils::MM_BeOS' => '6.66', + 'ExtUtils::MM_Cygwin' => '6.66', + 'ExtUtils::MM_DOS' => '6.66', + 'ExtUtils::MM_Darwin' => '6.66', + 'ExtUtils::MM_MacOS' => '6.66', + 'ExtUtils::MM_NW5' => '6.66', + 'ExtUtils::MM_OS2' => '6.66', + 'ExtUtils::MM_QNX' => '6.66', + 'ExtUtils::MM_UWIN' => '6.66', + 'ExtUtils::MM_Unix' => '6.66', + 'ExtUtils::MM_VMS' => '6.66', + 'ExtUtils::MM_VOS' => '6.66', + 'ExtUtils::MM_Win32' => '6.66', + 'ExtUtils::MM_Win95' => '6.66', + 'ExtUtils::MY' => '6.66', + 'ExtUtils::MakeMaker' => '6.66', + 'ExtUtils::MakeMaker::Config'=> '6.66', + 'ExtUtils::Mkbootstrap' => '6.66', + 'ExtUtils::Mksymlists' => '6.66', + 'ExtUtils::testlib' => '6.66', + 'File::Glob' => '1.20', + 'IO' => '1.28', + 'Module::CoreList' => '2.87', + 'Module::CoreList::TieHashDelta'=> '2.87', + 'Storable' => '2.41', + 'bigint' => '0.34', + 'mro' => '1.11', + 'overload' => '1.22', + 'warnings' => '1.18', + }, + removed => { + } }, - 5.014000 => { - 'Shell' => '1', + 5.018000 => { + delta_from => 5.017011, + changed => { + 'Carp' => '1.29', + 'Carp::Heavy' => '1.29', + 'Config' => '5.018000', + 'Hash::Util' => '0.16', + 'IO::Handle' => '1.34', + 'IO::Socket' => '1.36', + 'Module::CoreList' => '2.89', + 'Module::CoreList::TieHashDelta'=> '2.89', + 'Pod::Simple' => '3.28', + 'Pod::Simple::BlackBox' => '3.28', + 'Pod::Simple::Checker' => '3.28', + 'Pod::Simple::Debug' => '3.28', + 'Pod::Simple::DumpAsText'=> '3.28', + 'Pod::Simple::DumpAsXML'=> '3.28', + 'Pod::Simple::HTML' => '3.28', + 'Pod::Simple::HTMLBatch'=> '3.28', + 'Pod::Simple::LinkSection'=> '3.28', + 'Pod::Simple::Methody' => '3.28', + 'Pod::Simple::Progress' => '3.28', + 'Pod::Simple::PullParser'=> '3.28', + 'Pod::Simple::PullParserEndToken'=> '3.28', + 'Pod::Simple::PullParserStartToken'=> '3.28', + 'Pod::Simple::PullParserTextToken'=> '3.28', + 'Pod::Simple::PullParserToken'=> '3.28', + 'Pod::Simple::RTF' => '3.28', + 'Pod::Simple::Search' => '3.28', + 'Pod::Simple::SimpleTree'=> '3.28', + 'Pod::Simple::Text' => '3.28', + 'Pod::Simple::TextContent'=> '3.28', + 'Pod::Simple::TiedOutFH'=> '3.28', + 'Pod::Simple::Transcode'=> '3.28', + 'Pod::Simple::TranscodeDumb'=> '3.28', + 'Pod::Simple::TranscodeSmart'=> '3.28', + 'Pod::Simple::XHTML' => '3.28', + 'Pod::Simple::XMLOutStream'=> '3.28', + }, + removed => { + } }, - 5.012004 => { - 'Class::ISA' => '1', - 'Pod::Plainer' => '1', - 'Shell' => '1', - 'Switch' => '1', + 5.018001 => { + delta_from => 5.018000, + changed => { + 'B' => '1.42_01', + 'Config' => '5.018001', + 'Digest::SHA' => '5.84_01', + 'Module::CoreList' => '2.96', + 'Module::CoreList::TieHashDelta'=> '2.96', + 'Module::CoreList::Utils'=> '2.96', + }, + removed => { + 'VMS::Filespec' => 1, + } }, - 5.014001 => { - 'Shell' => '1', + 5.018002 => { + delta_from => 5.018001, + changed => { + 'B' => '1.42_02', + 'B::Concise' => '0.95_01', + 'Config' => '5.018002', + 'File::Glob' => '1.20_01', + 'Module::CoreList' => '3.03', + 'Module::CoreList::TieHashDelta'=> '3.03', + 'Module::CoreList::Utils'=> '3.03', + }, }, - 5.015000 => { - 'Devel::DProf' => '1', + 5.019000 => { + delta_from => 5.018000, + changed => { + 'Config' => '5.019000', + 'Getopt::Std' => '1.08', + 'Module::CoreList' => '2.91', + 'Module::CoreList::TieHashDelta'=> '2.91', + 'Storable' => '2.42', + 'feature' => '1.33', + 'utf8' => '1.11', + }, + removed => { + 'Archive::Extract' => 1, + 'B::Lint' => 1, + 'B::Lint::Debug' => 1, + 'CPANPLUS' => 1, + 'CPANPLUS::Backend' => 1, + 'CPANPLUS::Backend::RV' => 1, + 'CPANPLUS::Config' => 1, + 'CPANPLUS::Config::HomeEnv'=> 1, + 'CPANPLUS::Configure' => 1, + 'CPANPLUS::Configure::Setup'=> 1, + 'CPANPLUS::Dist' => 1, + 'CPANPLUS::Dist::Autobundle'=> 1, + 'CPANPLUS::Dist::Base' => 1, + 'CPANPLUS::Dist::Build' => 1, + 'CPANPLUS::Dist::Build::Constants'=> 1, + 'CPANPLUS::Dist::MM' => 1, + 'CPANPLUS::Dist::Sample'=> 1, + 'CPANPLUS::Error' => 1, + 'CPANPLUS::Internals' => 1, + 'CPANPLUS::Internals::Constants'=> 1, + 'CPANPLUS::Internals::Constants::Report'=> 1, + 'CPANPLUS::Internals::Extract'=> 1, + 'CPANPLUS::Internals::Fetch'=> 1, + 'CPANPLUS::Internals::Report'=> 1, + 'CPANPLUS::Internals::Search'=> 1, + 'CPANPLUS::Internals::Source'=> 1, + 'CPANPLUS::Internals::Source::Memory'=> 1, + 'CPANPLUS::Internals::Source::SQLite'=> 1, + 'CPANPLUS::Internals::Source::SQLite::Tie'=> 1, + 'CPANPLUS::Internals::Utils'=> 1, + 'CPANPLUS::Internals::Utils::Autoflush'=> 1, + 'CPANPLUS::Module' => 1, + 'CPANPLUS::Module::Author'=> 1, + 'CPANPLUS::Module::Author::Fake'=> 1, + 'CPANPLUS::Module::Checksums'=> 1, + 'CPANPLUS::Module::Fake'=> 1, + 'CPANPLUS::Module::Signature'=> 1, + 'CPANPLUS::Selfupdate' => 1, + 'CPANPLUS::Shell' => 1, + 'CPANPLUS::Shell::Classic'=> 1, + 'CPANPLUS::Shell::Default'=> 1, + 'CPANPLUS::Shell::Default::Plugins::CustomSource'=> 1, + 'CPANPLUS::Shell::Default::Plugins::Remote'=> 1, + 'CPANPLUS::Shell::Default::Plugins::Source'=> 1, + 'Devel::InnerPackage' => 1, + 'File::CheckTree' => 1, + 'Log::Message' => 1, + 'Log::Message::Config' => 1, + 'Log::Message::Handlers'=> 1, + 'Log::Message::Item' => 1, + 'Log::Message::Simple' => 1, + 'Module::Pluggable' => 1, + 'Module::Pluggable::Object'=> 1, + 'Object::Accessor' => 1, + 'Pod::LaTeX' => 1, + 'Term::UI' => 1, + 'Term::UI::History' => 1, + 'Text::Soundex' => 1, + } }, - 5.015000 => { + 5.019001 => { + delta_from => 5.019000, + changed => { + 'App::Prove' => '3.28', + 'App::Prove::State' => '3.28', + 'App::Prove::State::Result'=> '3.28', + 'App::Prove::State::Result::Test'=> '3.28', + 'Archive::Tar' => '1.92', + 'Archive::Tar::Constant'=> '1.92', + 'Archive::Tar::File' => '1.92', + 'Attribute::Handlers' => '0.95', + 'B' => '1.43', + 'B::Concise' => '0.96', + 'B::Deparse' => '1.21', + 'B::Showlex' => '1.04', + 'Benchmark' => '1.16', + 'CPAN::Meta' => '2.131560', + 'CPAN::Meta::Converter' => '2.131560', + 'CPAN::Meta::Feature' => '2.131560', + 'CPAN::Meta::History' => '2.131560', + 'CPAN::Meta::Prereqs' => '2.131560', + 'CPAN::Meta::Spec' => '2.131560', + 'CPAN::Meta::Validator' => '2.131560', + 'Carp' => '1.30', + 'Carp::Heavy' => '1.30', + 'Compress::Raw::Bzip2' => '2.061', + 'Compress::Raw::Zlib' => '2.061', + 'Compress::Zlib' => '2.061', + 'Config' => '5.019001', + 'Config::Perl::V' => '0.18', + 'Cwd' => '3.41', + 'DB' => '1.06', + 'DB_File' => '1.828', + 'Data::Dumper' => '2.146', + 'Encode' => '2.51', + 'Encode::CN::HZ' => '2.06', + 'Encode::GSM0338' => '2.03', + 'Encode::Unicode::UTF7' => '2.07', + 'ExtUtils::CBuilder::Base'=> '0.280210', + 'ExtUtils::CBuilder::Platform::Windows::BCC'=> '0.280210', + 'ExtUtils::Command::MM' => '6.68', + 'ExtUtils::Install' => '1.60', + 'ExtUtils::Liblist' => '6.68', + 'ExtUtils::Liblist::Kid'=> '6.68', + 'ExtUtils::MM' => '6.68', + 'ExtUtils::MM_AIX' => '6.68', + 'ExtUtils::MM_Any' => '6.68', + 'ExtUtils::MM_BeOS' => '6.68', + 'ExtUtils::MM_Cygwin' => '6.68', + 'ExtUtils::MM_DOS' => '6.68', + 'ExtUtils::MM_Darwin' => '6.68', + 'ExtUtils::MM_MacOS' => '6.68', + 'ExtUtils::MM_NW5' => '6.68', + 'ExtUtils::MM_OS2' => '6.68', + 'ExtUtils::MM_QNX' => '6.68', + 'ExtUtils::MM_UWIN' => '6.68', + 'ExtUtils::MM_Unix' => '6.68', + 'ExtUtils::MM_VMS' => '6.68', + 'ExtUtils::MM_VOS' => '6.68', + 'ExtUtils::MM_Win32' => '6.68', + 'ExtUtils::MM_Win95' => '6.68', + 'ExtUtils::MY' => '6.68', + 'ExtUtils::MakeMaker' => '6.68', + 'ExtUtils::MakeMaker::Config'=> '6.68', + 'ExtUtils::Mkbootstrap' => '6.68', + 'ExtUtils::Mksymlists' => '6.68', + 'ExtUtils::ParseXS' => '3.19', + 'ExtUtils::testlib' => '6.68', + 'Fatal' => '2.19', + 'File::Copy' => '2.27', + 'File::DosGlob' => '1.11', + 'File::Fetch' => '0.42', + 'File::Find' => '1.24', + 'File::Spec' => '3.41', + 'File::Spec::Cygwin' => '3.41', + 'File::Spec::Epoc' => '3.41', + 'File::Spec::Mac' => '3.41', + 'File::Spec::OS2' => '3.41', + 'File::Spec::Unix' => '3.41', + 'File::Spec::VMS' => '3.41', + 'File::Spec::Win32' => '3.41', + 'File::Temp' => '0.2301', + 'Filter::Simple' => '0.90', + 'Filter::Util::Call' => '1.49', + 'Getopt::Long' => '2.4', + 'HTTP::Tiny' => '0.031', + 'Hash::Util::FieldHash' => '1.11', + 'IO::Compress::Adapter::Bzip2'=> '2.061', + 'IO::Compress::Adapter::Deflate'=> '2.061', + 'IO::Compress::Adapter::Identity'=> '2.061', + 'IO::Compress::Base' => '2.061', + 'IO::Compress::Base::Common'=> '2.061', + 'IO::Compress::Bzip2' => '2.061', + 'IO::Compress::Deflate' => '2.061', + 'IO::Compress::Gzip' => '2.061', + 'IO::Compress::Gzip::Constants'=> '2.061', + 'IO::Compress::RawDeflate'=> '2.061', + 'IO::Compress::Zip' => '2.061', + 'IO::Compress::Zip::Constants'=> '2.061', + 'IO::Compress::Zlib::Constants'=> '2.061', + 'IO::Compress::Zlib::Extra'=> '2.061', + 'IO::Handle' => '1.35', + 'IO::Uncompress::Adapter::Bunzip2'=> '2.061', + 'IO::Uncompress::Adapter::Identity'=> '2.061', + 'IO::Uncompress::Adapter::Inflate'=> '2.061', + 'IO::Uncompress::AnyInflate'=> '2.061', + 'IO::Uncompress::AnyUncompress'=> '2.061', + 'IO::Uncompress::Base' => '2.061', + 'IO::Uncompress::Bunzip2'=> '2.061', + 'IO::Uncompress::Gunzip'=> '2.061', + 'IO::Uncompress::Inflate'=> '2.061', + 'IO::Uncompress::RawInflate'=> '2.061', + 'IO::Uncompress::Unzip' => '2.061', + 'IPC::Open3' => '1.14', + 'Locale::Codes' => '3.26', + 'Locale::Codes::Constants'=> '3.26', + 'Locale::Codes::Country'=> '3.26', + 'Locale::Codes::Country_Codes'=> '3.26', + 'Locale::Codes::Country_Retired'=> '3.26', + 'Locale::Codes::Currency'=> '3.26', + 'Locale::Codes::Currency_Codes'=> '3.26', + 'Locale::Codes::Currency_Retired'=> '3.26', + 'Locale::Codes::LangExt'=> '3.26', + 'Locale::Codes::LangExt_Codes'=> '3.26', + 'Locale::Codes::LangExt_Retired'=> '3.26', + 'Locale::Codes::LangFam'=> '3.26', + 'Locale::Codes::LangFam_Codes'=> '3.26', + 'Locale::Codes::LangFam_Retired'=> '3.26', + 'Locale::Codes::LangVar'=> '3.26', + 'Locale::Codes::LangVar_Codes'=> '3.26', + 'Locale::Codes::LangVar_Retired'=> '3.26', + 'Locale::Codes::Language'=> '3.26', + 'Locale::Codes::Language_Codes'=> '3.26', + 'Locale::Codes::Language_Retired'=> '3.26', + 'Locale::Codes::Script' => '3.26', + 'Locale::Codes::Script_Codes'=> '3.26', + 'Locale::Codes::Script_Retired'=> '3.26', + 'Locale::Country' => '3.26', + 'Locale::Currency' => '3.26', + 'Locale::Language' => '3.26', + 'Locale::Maketext' => '1.24', + 'Locale::Script' => '3.26', + 'Math::BigFloat' => '1.999', + 'Math::BigInt' => '1.9992', + 'Math::BigInt::Calc' => '1.998', + 'Math::BigInt::CalcEmu' => '1.9991', + 'Math::BigRat' => '0.2606', + 'Module::Build' => '0.4005', + 'Module::Build::Base' => '0.4005', + 'Module::Build::Compat' => '0.4005', + 'Module::Build::Config' => '0.4005', + 'Module::Build::Cookbook'=> '0.4005', + 'Module::Build::Dumper' => '0.4005', + 'Module::Build::ModuleInfo'=> '0.4005', + 'Module::Build::Notes' => '0.4005', + 'Module::Build::PPMMaker'=> '0.4005', + 'Module::Build::Platform::Amiga'=> '0.4005', + 'Module::Build::Platform::Default'=> '0.4005', + 'Module::Build::Platform::EBCDIC'=> '0.4005', + 'Module::Build::Platform::MPEiX'=> '0.4005', + 'Module::Build::Platform::MacOS'=> '0.4005', + 'Module::Build::Platform::RiscOS'=> '0.4005', + 'Module::Build::Platform::Unix'=> '0.4005', + 'Module::Build::Platform::VMS'=> '0.4005', + 'Module::Build::Platform::VOS'=> '0.4005', + 'Module::Build::Platform::Windows'=> '0.4005', + 'Module::Build::Platform::aix'=> '0.4005', + 'Module::Build::Platform::cygwin'=> '0.4005', + 'Module::Build::Platform::darwin'=> '0.4005', + 'Module::Build::Platform::os2'=> '0.4005', + 'Module::Build::PodParser'=> '0.4005', + 'Module::CoreList' => '2.92', + 'Module::CoreList::TieHashDelta'=> '2.92', + 'Module::CoreList::Utils'=> '2.92', + 'Module::Metadata' => '1.000014', + 'Net::Ping' => '2.42', + 'POSIX' => '1.33', + 'Pod::Find' => '1.61', + 'Pod::Html' => '1.19', + 'Pod::InputObjects' => '1.61', + 'Pod::ParseUtils' => '1.61', + 'Pod::Parser' => '1.61', + 'Pod::Perldoc' => '3.20', + 'Pod::Perldoc::BaseTo' => '3.20', + 'Pod::Perldoc::GetOptsOO'=> '3.20', + 'Pod::Perldoc::ToANSI' => '3.20', + 'Pod::Perldoc::ToChecker'=> '3.20', + 'Pod::Perldoc::ToMan' => '3.20', + 'Pod::Perldoc::ToNroff' => '3.20', + 'Pod::Perldoc::ToPod' => '3.20', + 'Pod::Perldoc::ToRtf' => '3.20', + 'Pod::Perldoc::ToTerm' => '3.20', + 'Pod::Perldoc::ToText' => '3.20', + 'Pod::Perldoc::ToTk' => '3.20', + 'Pod::Perldoc::ToXml' => '3.20', + 'Pod::Select' => '1.61', + 'Pod::Usage' => '1.63', + 'Safe' => '2.36', + 'Storable' => '2.43', + 'Sys::Hostname' => '1.18', + 'Sys::Syslog' => '0.33', + 'TAP::Base' => '3.28', + 'TAP::Formatter::Base' => '3.28', + 'TAP::Formatter::Color' => '3.28', + 'TAP::Formatter::Console'=> '3.28', + 'TAP::Formatter::Console::ParallelSession'=> '3.28', + 'TAP::Formatter::Console::Session'=> '3.28', + 'TAP::Formatter::File' => '3.28', + 'TAP::Formatter::File::Session'=> '3.28', + 'TAP::Formatter::Session'=> '3.28', + 'TAP::Harness' => '3.28', + 'TAP::Object' => '3.28', + 'TAP::Parser' => '3.28', + 'TAP::Parser::Aggregator'=> '3.28', + 'TAP::Parser::Grammar' => '3.28', + 'TAP::Parser::Iterator' => '3.28', + 'TAP::Parser::Iterator::Array'=> '3.28', + 'TAP::Parser::Iterator::Process'=> '3.28', + 'TAP::Parser::Iterator::Stream'=> '3.28', + 'TAP::Parser::IteratorFactory'=> '3.28', + 'TAP::Parser::Multiplexer'=> '3.28', + 'TAP::Parser::Result' => '3.28', + 'TAP::Parser::Result::Bailout'=> '3.28', + 'TAP::Parser::Result::Comment'=> '3.28', + 'TAP::Parser::Result::Plan'=> '3.28', + 'TAP::Parser::Result::Pragma'=> '3.28', + 'TAP::Parser::Result::Test'=> '3.28', + 'TAP::Parser::Result::Unknown'=> '3.28', + 'TAP::Parser::Result::Version'=> '3.28', + 'TAP::Parser::Result::YAML'=> '3.28', + 'TAP::Parser::ResultFactory'=> '3.28', + 'TAP::Parser::Scheduler'=> '3.28', + 'TAP::Parser::Scheduler::Job'=> '3.28', + 'TAP::Parser::Scheduler::Spinner'=> '3.28', + 'TAP::Parser::Source' => '3.28', + 'TAP::Parser::SourceHandler'=> '3.28', + 'TAP::Parser::SourceHandler::Executable'=> '3.28', + 'TAP::Parser::SourceHandler::File'=> '3.28', + 'TAP::Parser::SourceHandler::Handle'=> '3.28', + 'TAP::Parser::SourceHandler::Perl'=> '3.28', + 'TAP::Parser::SourceHandler::RawTAP'=> '3.28', + 'TAP::Parser::Utils' => '3.28', + 'TAP::Parser::YAMLish::Reader'=> '3.28', + 'TAP::Parser::YAMLish::Writer'=> '3.28', + 'Term::ReadLine' => '1.13', + 'Test::Harness' => '3.28', + 'Text::Tabs' => '2013.0523', + 'Text::Wrap' => '2013.0523', + 'Thread' => '3.04', + 'Tie::File' => '1.00', + 'Time::Piece' => '1.2002', + 'Unicode::Collate' => '0.98', + 'Unicode::UCD' => '0.53', + 'XS::APItest' => '0.53', + '_charnames' => '1.37', + 'autodie' => '2.19', + 'autodie::exception' => '2.19', + 'autodie::exception::system'=> '2.19', + 'autodie::hints' => '2.19', + 'autodie::skip' => '2.19', + 'bigint' => '0.35', + 'charnames' => '1.38', + 'encoding' => '2.12', + 'inc::latest' => '0.4005', + 'mro' => '1.12', + 'perlfaq' => '5.0150043', + 're' => '0.25', + 'threads' => '1.87', + 'threads::shared' => '1.44', + 'utf8' => '1.12', + }, + removed => { + } }, - 5.015001 => { + 5.019002 => { + delta_from => 5.019001, + changed => { + 'B' => '1.44', + 'B::Concise' => '0.98', + 'B::Deparse' => '1.22', + 'Benchmark' => '1.17', + 'Class::Struct' => '0.65', + 'Config' => '5.019002', + 'DB' => '1.07', + 'DBM_Filter' => '0.06', + 'DBM_Filter::compress' => '0.03', + 'DBM_Filter::encode' => '0.03', + 'DBM_Filter::int32' => '0.03', + 'DBM_Filter::null' => '0.03', + 'DBM_Filter::utf8' => '0.03', + 'DB_File' => '1.829', + 'Data::Dumper' => '2.147', + 'Devel::Peek' => '1.12', + 'Digest::MD5' => '2.53', + 'Digest::SHA' => '5.85', + 'English' => '1.07', + 'Errno' => '1.19', + 'ExtUtils::Embed' => '1.31', + 'ExtUtils::Miniperl' => '1', + 'ExtUtils::ParseXS' => '3.21', + 'ExtUtils::ParseXS::Constants'=> '3.21', + 'ExtUtils::ParseXS::CountLines'=> '3.21', + 'ExtUtils::ParseXS::Eval'=> '3.19', + 'ExtUtils::ParseXS::Utilities'=> '3.21', + 'ExtUtils::Typemaps' => '3.21', + 'ExtUtils::Typemaps::Cmd'=> '3.21', + 'ExtUtils::Typemaps::InputMap'=> '3.21', + 'ExtUtils::Typemaps::OutputMap'=> '3.21', + 'ExtUtils::Typemaps::Type'=> '3.21', + 'ExtUtils::XSSymSet' => '1.3', + 'Fatal' => '2.20', + 'File::Basename' => '2.85', + 'File::Spec::VMS' => '3.43', + 'File::Spec::Win32' => '3.42', + 'Getopt::Long' => '2.41', + 'Getopt::Std' => '1.09', + 'HTTP::Tiny' => '0.034', + 'Hash::Util::FieldHash' => '1.12', + 'I18N::Langinfo' => '0.11', + 'IO::Socket::INET' => '1.34', + 'IO::Socket::UNIX' => '1.25', + 'IPC::Cmd' => '0.82', + 'MIME::Base64' => '3.14', + 'Module::CoreList' => '2.94', + 'Module::CoreList::TieHashDelta'=> '2.94', + 'Module::CoreList::Utils'=> '2.94', + 'POSIX' => '1.34', + 'Params::Check' => '0.38', + 'Parse::CPAN::Meta' => '1.4405', + 'Pod::Functions' => '1.07', + 'Pod::Functions::Functions'=> '1.07', + 'Pod::Html' => '1.2', + 'Safe' => '2.37', + 'Socket' => '2.010', + 'Storable' => '2.45', + 'Text::ParseWords' => '3.29', + 'Tie::Array' => '1.06', + 'Tie::Hash' => '1.05', + 'Tie::Scalar' => '1.03', + 'Time::Piece' => '1.21', + 'Time::Seconds' => '1.21', + 'XS::APItest' => '0.54', + 'autodie' => '2.20', + 'autodie::exception' => '2.20', + 'autodie::exception::system'=> '2.20', + 'autodie::hints' => '2.20', + 'autodie::skip' => '2.20', + 'base' => '2.19', + 'deprecate' => '0.03', + 'if' => '0.0603', + 'integer' => '1.01', + 'strict' => '1.08', + 'subs' => '1.02', + 'vmsish' => '1.04', + }, + removed => { + } }, - 5.015002 => { + 5.019003 => { + delta_from => 5.019002, + changed => { + 'B' => '1.45', + 'CPAN::Meta' => '2.132140', + 'CPAN::Meta::Converter' => '2.132140', + 'CPAN::Meta::Feature' => '2.132140', + 'CPAN::Meta::History' => '2.132140', + 'CPAN::Meta::Prereqs' => '2.132140', + 'CPAN::Meta::Spec' => '2.132140', + 'CPAN::Meta::Validator' => '2.132140', + 'Carp' => '1.31', + 'Carp::Heavy' => '1.31', + 'Compress::Raw::Bzip2' => '2.062', + 'Compress::Raw::Zlib' => '2.062', + 'Compress::Zlib' => '2.062', + 'Config' => '5.019003', + 'Config::Perl::V' => '0.19', + 'Cwd' => '3.44', + 'Data::Dumper' => '2.148', + 'Devel::PPPort' => '3.21', + 'Devel::Peek' => '1.13', + 'DynaLoader' => '1.19', + 'Encode' => '2.52', + 'Encode::Alias' => '2.17', + 'Encode::Encoding' => '2.06', + 'Encode::GSM0338' => '2.04', + 'Encode::MIME::Header' => '2.14', + 'Encode::Unicode' => '2.08', + 'English' => '1.08', + 'Exporter' => '5.69', + 'Exporter::Heavy' => '5.69', + 'ExtUtils::Command::MM' => '6.72', + 'ExtUtils::Liblist' => '6.72', + 'ExtUtils::Liblist::Kid'=> '6.72', + 'ExtUtils::MM' => '6.72', + 'ExtUtils::MM_AIX' => '6.72', + 'ExtUtils::MM_Any' => '6.72', + 'ExtUtils::MM_BeOS' => '6.72', + 'ExtUtils::MM_Cygwin' => '6.72', + 'ExtUtils::MM_DOS' => '6.72', + 'ExtUtils::MM_Darwin' => '6.72', + 'ExtUtils::MM_MacOS' => '6.72', + 'ExtUtils::MM_NW5' => '6.72', + 'ExtUtils::MM_OS2' => '6.72', + 'ExtUtils::MM_QNX' => '6.72', + 'ExtUtils::MM_UWIN' => '6.72', + 'ExtUtils::MM_Unix' => '6.72', + 'ExtUtils::MM_VMS' => '6.72', + 'ExtUtils::MM_VOS' => '6.72', + 'ExtUtils::MM_Win32' => '6.72', + 'ExtUtils::MM_Win95' => '6.72', + 'ExtUtils::MY' => '6.72', + 'ExtUtils::MakeMaker' => '6.72', + 'ExtUtils::MakeMaker::Config'=> '6.72', + 'ExtUtils::Mkbootstrap' => '6.72', + 'ExtUtils::Mksymlists' => '6.72', + 'ExtUtils::ParseXS::Eval'=> '3.21', + 'ExtUtils::testlib' => '6.72', + 'File::Spec' => '3.44', + 'File::Spec::Cygwin' => '3.44', + 'File::Spec::Epoc' => '3.44', + 'File::Spec::Functions' => '3.44', + 'File::Spec::Mac' => '3.44', + 'File::Spec::OS2' => '3.44', + 'File::Spec::Unix' => '3.44', + 'File::Spec::VMS' => '3.44', + 'File::Spec::Win32' => '3.44', + 'Getopt::Std' => '1.10', + 'IO::Compress::Adapter::Bzip2'=> '2.062', + 'IO::Compress::Adapter::Deflate'=> '2.062', + 'IO::Compress::Adapter::Identity'=> '2.062', + 'IO::Compress::Base' => '2.062', + 'IO::Compress::Base::Common'=> '2.062', + 'IO::Compress::Bzip2' => '2.062', + 'IO::Compress::Deflate' => '2.062', + 'IO::Compress::Gzip' => '2.062', + 'IO::Compress::Gzip::Constants'=> '2.062', + 'IO::Compress::RawDeflate'=> '2.062', + 'IO::Compress::Zip' => '2.062', + 'IO::Compress::Zip::Constants'=> '2.062', + 'IO::Compress::Zlib::Constants'=> '2.062', + 'IO::Compress::Zlib::Extra'=> '2.062', + 'IO::Uncompress::Adapter::Bunzip2'=> '2.062', + 'IO::Uncompress::Adapter::Identity'=> '2.062', + 'IO::Uncompress::Adapter::Inflate'=> '2.062', + 'IO::Uncompress::AnyInflate'=> '2.062', + 'IO::Uncompress::AnyUncompress'=> '2.062', + 'IO::Uncompress::Base' => '2.062', + 'IO::Uncompress::Bunzip2'=> '2.062', + 'IO::Uncompress::Gunzip'=> '2.062', + 'IO::Uncompress::Inflate'=> '2.062', + 'IO::Uncompress::RawInflate'=> '2.062', + 'IO::Uncompress::Unzip' => '2.062', + 'IPC::Cmd' => '0.84', + 'IPC::Msg' => '2.04', + 'IPC::Open3' => '1.15', + 'IPC::Semaphore' => '2.04', + 'IPC::SharedMem' => '2.04', + 'IPC::SysV' => '2.04', + 'List::Util' => '1.31', + 'List::Util::XS' => '1.31', + 'Math::BigFloat::Trace' => '0.36', + 'Math::BigInt::Trace' => '0.36', + 'Module::Build' => '0.4007', + 'Module::Build::Base' => '0.4007', + 'Module::Build::Compat' => '0.4007', + 'Module::Build::Config' => '0.4007', + 'Module::Build::Cookbook'=> '0.4007', + 'Module::Build::Dumper' => '0.4007', + 'Module::Build::ModuleInfo'=> '0.4007', + 'Module::Build::Notes' => '0.4007', + 'Module::Build::PPMMaker'=> '0.4007', + 'Module::Build::Platform::Default'=> '0.4007', + 'Module::Build::Platform::MacOS'=> '0.4007', + 'Module::Build::Platform::Unix'=> '0.4007', + 'Module::Build::Platform::VMS'=> '0.4007', + 'Module::Build::Platform::VOS'=> '0.4007', + 'Module::Build::Platform::Windows'=> '0.4007', + 'Module::Build::Platform::aix'=> '0.4007', + 'Module::Build::Platform::cygwin'=> '0.4007', + 'Module::Build::Platform::darwin'=> '0.4007', + 'Module::Build::Platform::os2'=> '0.4007', + 'Module::Build::PodParser'=> '0.4007', + 'Module::CoreList' => '2.97', + 'Module::CoreList::TieHashDelta'=> '2.97', + 'Module::CoreList::Utils'=> '2.97', + 'Net::Cmd' => '2.30', + 'Net::Config' => '1.12', + 'Net::Domain' => '2.22', + 'Net::FTP' => '2.78', + 'Net::FTP::dataconn' => '0.12', + 'Net::NNTP' => '2.25', + 'Net::Netrc' => '2.14', + 'Net::POP3' => '2.30', + 'Net::SMTP' => '2.32', + 'PerlIO' => '1.08', + 'Pod::Functions' => '1.08', + 'Pod::Functions::Functions'=> '1.08', + 'Scalar::Util' => '1.31', + 'Socket' => '2.011', + 'Storable' => '2.46', + 'Time::HiRes' => '1.9726', + 'Time::Piece' => '1.22', + 'Time::Seconds' => '1.22', + 'XS::APItest' => '0.55', + 'bigint' => '0.36', + 'bignum' => '0.36', + 'bigrat' => '0.36', + 'constant' => '1.28', + 'diagnostics' => '1.32', + 'inc::latest' => '0.4007', + 'mro' => '1.13', + 'parent' => '0.226', + 'utf8' => '1.13', + 'version' => '0.9903', + }, + removed => { + 'Module::Build::Platform::Amiga'=> 1, + 'Module::Build::Platform::EBCDIC'=> 1, + 'Module::Build::Platform::MPEiX'=> 1, + 'Module::Build::Platform::RiscOS'=> 1, + } }, - 5.014002 => { - 'Shell' => '1', + 5.019004 => { + delta_from => 5.019003, + changed => { + 'B' => '1.46', + 'B::Concise' => '0.99', + 'B::Deparse' => '1.23', + 'CPAN' => '2.03', + 'CPAN::Meta' => '2.132620', + 'CPAN::Meta::Converter' => '2.132620', + 'CPAN::Meta::Feature' => '2.132620', + 'CPAN::Meta::History' => '2.132620', + 'CPAN::Meta::Prereqs' => '2.132620', + 'CPAN::Meta::Requirements'=> '2.123', + 'CPAN::Meta::Spec' => '2.132620', + 'CPAN::Meta::Validator' => '2.132620', + 'Carp' => '1.32', + 'Carp::Heavy' => '1.32', + 'Config' => '5.019004', + 'Data::Dumper' => '2.149', + 'Devel::Peek' => '1.14', + 'DynaLoader' => '1.20', + 'Encode' => '2.55', + 'Encode::Alias' => '2.18', + 'Encode::CN::HZ' => '2.07', + 'Encode::Encoder' => '2.03', + 'Encode::Encoding' => '2.07', + 'Encode::GSM0338' => '2.05', + 'Encode::Guess' => '2.06', + 'Encode::JP::JIS7' => '2.05', + 'Encode::KR::2022_KR' => '2.03', + 'Encode::MIME::Header' => '2.15', + 'Encode::MIME::Header::ISO_2022_JP'=> '1.04', + 'Encode::Unicode' => '2.09', + 'Encode::Unicode::UTF7' => '2.08', + 'Errno' => '1.20', + 'Exporter' => '5.70', + 'Exporter::Heavy' => '5.70', + 'ExtUtils::CBuilder' => '0.280212', + 'ExtUtils::CBuilder::Base'=> '0.280212', + 'ExtUtils::CBuilder::Platform::Unix'=> '0.280212', + 'ExtUtils::CBuilder::Platform::VMS'=> '0.280212', + 'ExtUtils::CBuilder::Platform::Windows'=> '0.280212', + 'ExtUtils::CBuilder::Platform::Windows::BCC'=> '0.280212', + 'ExtUtils::CBuilder::Platform::Windows::GCC'=> '0.280212', + 'ExtUtils::CBuilder::Platform::Windows::MSVC'=> '0.280212', + 'ExtUtils::CBuilder::Platform::aix'=> '0.280212', + 'ExtUtils::CBuilder::Platform::cygwin'=> '0.280212', + 'ExtUtils::CBuilder::Platform::darwin'=> '0.280212', + 'ExtUtils::CBuilder::Platform::dec_osf'=> '0.280212', + 'ExtUtils::CBuilder::Platform::os2'=> '0.280212', + 'ExtUtils::Command' => '1.18', + 'ExtUtils::Command::MM' => '6.76', + 'ExtUtils::Liblist' => '6.76', + 'ExtUtils::Liblist::Kid'=> '6.76', + 'ExtUtils::MM' => '6.76', + 'ExtUtils::MM_AIX' => '6.76', + 'ExtUtils::MM_Any' => '6.76', + 'ExtUtils::MM_BeOS' => '6.76', + 'ExtUtils::MM_Cygwin' => '6.76', + 'ExtUtils::MM_DOS' => '6.76', + 'ExtUtils::MM_Darwin' => '6.76', + 'ExtUtils::MM_MacOS' => '6.76', + 'ExtUtils::MM_NW5' => '6.76', + 'ExtUtils::MM_OS2' => '6.76', + 'ExtUtils::MM_QNX' => '6.76', + 'ExtUtils::MM_UWIN' => '6.76', + 'ExtUtils::MM_Unix' => '6.76', + 'ExtUtils::MM_VMS' => '6.76', + 'ExtUtils::MM_VOS' => '6.76', + 'ExtUtils::MM_Win32' => '6.76', + 'ExtUtils::MM_Win95' => '6.76', + 'ExtUtils::MY' => '6.76', + 'ExtUtils::MakeMaker' => '6.76', + 'ExtUtils::MakeMaker::Config'=> '6.76', + 'ExtUtils::Mkbootstrap' => '6.76', + 'ExtUtils::Mksymlists' => '6.76', + 'ExtUtils::ParseXS' => '3.23', + 'ExtUtils::ParseXS::Constants'=> '3.23', + 'ExtUtils::ParseXS::CountLines'=> '3.23', + 'ExtUtils::ParseXS::Eval'=> '3.23', + 'ExtUtils::ParseXS::Utilities'=> '3.23', + 'ExtUtils::Typemaps' => '3.23', + 'ExtUtils::Typemaps::Cmd'=> '3.23', + 'ExtUtils::Typemaps::InputMap'=> '3.23', + 'ExtUtils::Typemaps::OutputMap'=> '3.23', + 'ExtUtils::Typemaps::Type'=> '3.23', + 'ExtUtils::testlib' => '6.76', + 'Fatal' => '2.21', + 'File::Copy' => '2.28', + 'File::Find' => '1.25', + 'File::Glob' => '1.21', + 'FileCache' => '1.09', + 'HTTP::Tiny' => '0.035', + 'Hash::Util::FieldHash' => '1.13', + 'I18N::LangTags' => '0.40', + 'IO' => '1.29', + 'IO::Socket' => '1.37', + 'IPC::Open3' => '1.16', + 'JSON::PP' => '2.27202_01', + 'List::Util' => '1.32', + 'List::Util::XS' => '1.32', + 'Locale::Codes' => '3.27', + 'Locale::Codes::Constants'=> '3.27', + 'Locale::Codes::Country'=> '3.27', + 'Locale::Codes::Country_Codes'=> '3.27', + 'Locale::Codes::Country_Retired'=> '3.27', + 'Locale::Codes::Currency'=> '3.27', + 'Locale::Codes::Currency_Codes'=> '3.27', + 'Locale::Codes::Currency_Retired'=> '3.27', + 'Locale::Codes::LangExt'=> '3.27', + 'Locale::Codes::LangExt_Codes'=> '3.27', + 'Locale::Codes::LangExt_Retired'=> '3.27', + 'Locale::Codes::LangFam'=> '3.27', + 'Locale::Codes::LangFam_Codes'=> '3.27', + 'Locale::Codes::LangFam_Retired'=> '3.27', + 'Locale::Codes::LangVar'=> '3.27', + 'Locale::Codes::LangVar_Codes'=> '3.27', + 'Locale::Codes::LangVar_Retired'=> '3.27', + 'Locale::Codes::Language'=> '3.27', + 'Locale::Codes::Language_Codes'=> '3.27', + 'Locale::Codes::Language_Retired'=> '3.27', + 'Locale::Codes::Script' => '3.27', + 'Locale::Codes::Script_Codes'=> '3.27', + 'Locale::Codes::Script_Retired'=> '3.27', + 'Locale::Country' => '3.27', + 'Locale::Currency' => '3.27', + 'Locale::Language' => '3.27', + 'Locale::Script' => '3.27', + 'Math::BigFloat' => '1.9991', + 'Math::BigInt' => '1.9993', + 'Math::BigInt::FastCalc'=> '0.31', + 'Module::CoreList' => '2.99', + 'Module::CoreList::TieHashDelta'=> '2.99', + 'Module::CoreList::Utils'=> '2.99', + 'Module::Load::Conditional'=> '0.58', + 'Module::Metadata' => '1.000018', + 'Opcode' => '1.26', + 'POSIX' => '1.35', + 'Parse::CPAN::Meta' => '1.4407', + 'Perl::OSType' => '1.005', + 'Pod::Html' => '1.21', + 'Scalar::Util' => '1.32', + 'Socket' => '2.012', + 'Storable' => '2.47', + 'Term::ReadLine' => '1.14', + 'Test::Builder' => '0.98_06', + 'Test::Builder::Module' => '0.98_06', + 'Test::More' => '0.98_06', + 'Test::Simple' => '0.98_06', + 'Time::Piece' => '1.23', + 'Time::Seconds' => '1.23', + 'Unicode::Collate' => '0.99', + 'Unicode::UCD' => '0.54', + 'XS::APItest' => '0.56', + 'XS::Typemap' => '0.11', + '_charnames' => '1.39', + 'autodie' => '2.21', + 'autodie::exception' => '2.21', + 'autodie::exception::system'=> '2.21', + 'autodie::hints' => '2.21', + 'autodie::skip' => '2.21', + 'charnames' => '1.39', + 'diagnostics' => '1.33', + 'mro' => '1.14', + 'parent' => '0.228', + 'perlfaq' => '5.0150044', + 're' => '0.26', + 'version' => '0.9904', + 'warnings' => '1.19', + }, + removed => { + } }, - 5.015003 => { + 5.019005 => { + delta_from => 5.019004, + changed => { + 'App::Prove' => '3.29', + 'App::Prove::State' => '3.29', + 'App::Prove::State::Result'=> '3.29', + 'App::Prove::State::Result::Test'=> '3.29', + 'CPAN::Meta' => '2.132830', + 'CPAN::Meta::Converter' => '2.132830', + 'CPAN::Meta::Feature' => '2.132830', + 'CPAN::Meta::History' => '2.132830', + 'CPAN::Meta::Prereqs' => '2.132830', + 'CPAN::Meta::Requirements'=> '2.125', + 'CPAN::Meta::Spec' => '2.132830', + 'CPAN::Meta::Validator' => '2.132830', + 'CPAN::Meta::YAML' => '0.010', + 'Config' => '5.019005', + 'Cwd' => '3.45', + 'ExtUtils::Command::MM' => '6.80', + 'ExtUtils::Install' => '1.61', + 'ExtUtils::Liblist' => '6.80', + 'ExtUtils::Liblist::Kid'=> '6.80', + 'ExtUtils::MM' => '6.80', + 'ExtUtils::MM_AIX' => '6.80', + 'ExtUtils::MM_Any' => '6.80', + 'ExtUtils::MM_BeOS' => '6.80', + 'ExtUtils::MM_Cygwin' => '6.80', + 'ExtUtils::MM_DOS' => '6.80', + 'ExtUtils::MM_Darwin' => '6.80', + 'ExtUtils::MM_MacOS' => '6.80', + 'ExtUtils::MM_NW5' => '6.80', + 'ExtUtils::MM_OS2' => '6.80', + 'ExtUtils::MM_QNX' => '6.80', + 'ExtUtils::MM_UWIN' => '6.80', + 'ExtUtils::MM_Unix' => '6.80', + 'ExtUtils::MM_VMS' => '6.80', + 'ExtUtils::MM_VOS' => '6.80', + 'ExtUtils::MM_Win32' => '6.80', + 'ExtUtils::MM_Win95' => '6.80', + 'ExtUtils::MY' => '6.80', + 'ExtUtils::MakeMaker' => '6.80', + 'ExtUtils::MakeMaker::Config'=> '6.80', + 'ExtUtils::Mkbootstrap' => '6.80', + 'ExtUtils::Mksymlists' => '6.80', + 'ExtUtils::testlib' => '6.80', + 'Fatal' => '2.22', + 'File::Fetch' => '0.44', + 'File::Glob' => '1.22', + 'File::Spec' => '3.45', + 'File::Spec::Cygwin' => '3.45', + 'File::Spec::Epoc' => '3.45', + 'File::Spec::Functions' => '3.45', + 'File::Spec::Mac' => '3.45', + 'File::Spec::OS2' => '3.45', + 'File::Spec::Unix' => '3.45', + 'File::Spec::VMS' => '3.45', + 'File::Spec::Win32' => '3.45', + 'File::Temp' => '0.2304', + 'Getopt::Long' => '2.42', + 'HTTP::Tiny' => '0.036', + 'IPC::Cmd' => '0.84_01', + 'JSON::PP' => '2.27203', + 'List::Util' => '1.35', + 'List::Util::XS' => '1.35', + 'Module::CoreList' => '3.00', + 'Module::CoreList::TieHashDelta'=> '3.00', + 'Module::CoreList::Utils'=> '3.00', + 'Module::Metadata' => '1.000019', + 'Parse::CPAN::Meta' => '1.4409', + 'Perl::OSType' => '1.006', + 'PerlIO::scalar' => '0.17', + 'Pod::Man' => '2.28', + 'Pod::Text' => '3.18', + 'Pod::Text::Termcap' => '2.08', + 'Scalar::Util' => '1.35', + 'TAP::Base' => '3.29', + 'TAP::Formatter::Base' => '3.29', + 'TAP::Formatter::Color' => '3.29', + 'TAP::Formatter::Console'=> '3.29', + 'TAP::Formatter::Console::ParallelSession'=> '3.29', + 'TAP::Formatter::Console::Session'=> '3.29', + 'TAP::Formatter::File' => '3.29', + 'TAP::Formatter::File::Session'=> '3.29', + 'TAP::Formatter::Session'=> '3.29', + 'TAP::Harness' => '3.29', + 'TAP::Harness::Env' => '3.29', + 'TAP::Object' => '3.29', + 'TAP::Parser' => '3.29', + 'TAP::Parser::Aggregator'=> '3.29', + 'TAP::Parser::Grammar' => '3.29', + 'TAP::Parser::Iterator' => '3.29', + 'TAP::Parser::Iterator::Array'=> '3.29', + 'TAP::Parser::Iterator::Process'=> '3.29', + 'TAP::Parser::Iterator::Stream'=> '3.29', + 'TAP::Parser::IteratorFactory'=> '3.29', + 'TAP::Parser::Multiplexer'=> '3.29', + 'TAP::Parser::Result' => '3.29', + 'TAP::Parser::Result::Bailout'=> '3.29', + 'TAP::Parser::Result::Comment'=> '3.29', + 'TAP::Parser::Result::Plan'=> '3.29', + 'TAP::Parser::Result::Pragma'=> '3.29', + 'TAP::Parser::Result::Test'=> '3.29', + 'TAP::Parser::Result::Unknown'=> '3.29', + 'TAP::Parser::Result::Version'=> '3.29', + 'TAP::Parser::Result::YAML'=> '3.29', + 'TAP::Parser::ResultFactory'=> '3.29', + 'TAP::Parser::Scheduler'=> '3.29', + 'TAP::Parser::Scheduler::Job'=> '3.29', + 'TAP::Parser::Scheduler::Spinner'=> '3.29', + 'TAP::Parser::Source' => '3.29', + 'TAP::Parser::SourceHandler'=> '3.29', + 'TAP::Parser::SourceHandler::Executable'=> '3.29', + 'TAP::Parser::SourceHandler::File'=> '3.29', + 'TAP::Parser::SourceHandler::Handle'=> '3.29', + 'TAP::Parser::SourceHandler::Perl'=> '3.29', + 'TAP::Parser::SourceHandler::RawTAP'=> '3.29', + 'TAP::Parser::YAMLish::Reader'=> '3.29', + 'TAP::Parser::YAMLish::Writer'=> '3.29', + 'Test::Builder' => '0.99', + 'Test::Builder::Module' => '0.99', + 'Test::Builder::Tester' => '1.23_002', + 'Test::Builder::Tester::Color'=> '1.23_002', + 'Test::Harness' => '3.29', + 'Test::More' => '0.99', + 'Test::Simple' => '0.99', + 'Unicode' => '6.3.0', + 'Unicode::Normalize' => '1.17', + 'Unicode::UCD' => '0.55', + 'attributes' => '0.22', + 'autodie' => '2.22', + 'autodie::exception' => '2.22', + 'autodie::exception::system'=> '2.22', + 'autodie::hints' => '2.22', + 'autodie::skip' => '2.22', + 'feature' => '1.34', + 'threads' => '1.89', + 'warnings' => '1.20', + }, + removed => { + 'TAP::Parser::Utils' => 1, + } }, - 5.015004 => { + 5.019006 => { + delta_from => 5.019005, + changed => { + 'App::Prove' => '3.30', + 'App::Prove::State' => '3.30', + 'App::Prove::State::Result'=> '3.30', + 'App::Prove::State::Result::Test'=> '3.30', + 'Archive::Tar' => '1.96', + 'Archive::Tar::Constant'=> '1.96', + 'Archive::Tar::File' => '1.96', + 'AutoLoader' => '5.74', + 'B' => '1.47', + 'B::Concise' => '0.991', + 'B::Debug' => '1.19', + 'B::Deparse' => '1.24', + 'Benchmark' => '1.18', + 'Compress::Raw::Bzip2' => '2.063', + 'Compress::Raw::Zlib' => '2.063', + 'Compress::Zlib' => '2.063', + 'Config' => '5.019006', + 'DB_File' => '1.831', + 'Devel::Peek' => '1.15', + 'DynaLoader' => '1.21', + 'Errno' => '1.20_01', + 'ExtUtils::Command::MM' => '6.82', + 'ExtUtils::Liblist' => '6.82', + 'ExtUtils::Liblist::Kid'=> '6.82', + 'ExtUtils::MM' => '6.82', + 'ExtUtils::MM_AIX' => '6.82', + 'ExtUtils::MM_Any' => '6.82', + 'ExtUtils::MM_BeOS' => '6.82', + 'ExtUtils::MM_Cygwin' => '6.82', + 'ExtUtils::MM_DOS' => '6.82', + 'ExtUtils::MM_Darwin' => '6.82', + 'ExtUtils::MM_MacOS' => '6.82', + 'ExtUtils::MM_NW5' => '6.82', + 'ExtUtils::MM_OS2' => '6.82', + 'ExtUtils::MM_QNX' => '6.82', + 'ExtUtils::MM_UWIN' => '6.82', + 'ExtUtils::MM_Unix' => '6.82', + 'ExtUtils::MM_VMS' => '6.82', + 'ExtUtils::MM_VOS' => '6.82', + 'ExtUtils::MM_Win32' => '6.82', + 'ExtUtils::MM_Win95' => '6.82', + 'ExtUtils::MY' => '6.82', + 'ExtUtils::MakeMaker' => '6.82', + 'ExtUtils::MakeMaker::Config'=> '6.82', + 'ExtUtils::Mkbootstrap' => '6.82', + 'ExtUtils::Mksymlists' => '6.82', + 'ExtUtils::testlib' => '6.82', + 'File::DosGlob' => '1.12', + 'File::Find' => '1.26', + 'File::Glob' => '1.23', + 'HTTP::Tiny' => '0.038', + 'IO' => '1.30', + 'IO::Compress::Adapter::Bzip2'=> '2.063', + 'IO::Compress::Adapter::Deflate'=> '2.063', + 'IO::Compress::Adapter::Identity'=> '2.063', + 'IO::Compress::Base' => '2.063', + 'IO::Compress::Base::Common'=> '2.063', + 'IO::Compress::Bzip2' => '2.063', + 'IO::Compress::Deflate' => '2.063', + 'IO::Compress::Gzip' => '2.063', + 'IO::Compress::Gzip::Constants'=> '2.063', + 'IO::Compress::RawDeflate'=> '2.063', + 'IO::Compress::Zip' => '2.063', + 'IO::Compress::Zip::Constants'=> '2.063', + 'IO::Compress::Zlib::Constants'=> '2.063', + 'IO::Compress::Zlib::Extra'=> '2.063', + 'IO::Select' => '1.22', + 'IO::Uncompress::Adapter::Bunzip2'=> '2.063', + 'IO::Uncompress::Adapter::Identity'=> '2.063', + 'IO::Uncompress::Adapter::Inflate'=> '2.063', + 'IO::Uncompress::AnyInflate'=> '2.063', + 'IO::Uncompress::AnyUncompress'=> '2.063', + 'IO::Uncompress::Base' => '2.063', + 'IO::Uncompress::Bunzip2'=> '2.063', + 'IO::Uncompress::Gunzip'=> '2.063', + 'IO::Uncompress::Inflate'=> '2.063', + 'IO::Uncompress::RawInflate'=> '2.063', + 'IO::Uncompress::Unzip' => '2.063', + 'IPC::Cmd' => '0.90', + 'Locale::Maketext' => '1.25', + 'Module::Build' => '0.4202', + 'Module::Build::Base' => '0.4202', + 'Module::Build::Compat' => '0.4202', + 'Module::Build::Config' => '0.4202', + 'Module::Build::Cookbook'=> '0.4202', + 'Module::Build::Dumper' => '0.4202', + 'Module::Build::ModuleInfo'=> '0.4202', + 'Module::Build::Notes' => '0.4202', + 'Module::Build::PPMMaker'=> '0.4202', + 'Module::Build::Platform::Default'=> '0.4202', + 'Module::Build::Platform::MacOS'=> '0.4202', + 'Module::Build::Platform::Unix'=> '0.4202', + 'Module::Build::Platform::VMS'=> '0.4202', + 'Module::Build::Platform::VOS'=> '0.4202', + 'Module::Build::Platform::Windows'=> '0.4202', + 'Module::Build::Platform::aix'=> '0.4202', + 'Module::Build::Platform::cygwin'=> '0.4202', + 'Module::Build::Platform::darwin'=> '0.4202', + 'Module::Build::Platform::os2'=> '0.4202', + 'Module::Build::PodParser'=> '0.4202', + 'Module::CoreList' => '3.01', + 'Module::CoreList::TieHashDelta'=> '3.01', + 'Module::CoreList::Utils'=> '3.01', + 'Opcode' => '1.27', + 'POSIX' => '1.36', + 'Package::Constants' => '0.04', + 'PerlIO::scalar' => '0.18', + 'PerlIO::via' => '0.13', + 'SDBM_File' => '1.10', + 'Socket' => '2.013', + 'TAP::Base' => '3.30', + 'TAP::Formatter::Base' => '3.30', + 'TAP::Formatter::Color' => '3.30', + 'TAP::Formatter::Console'=> '3.30', + 'TAP::Formatter::Console::ParallelSession'=> '3.30', + 'TAP::Formatter::Console::Session'=> '3.30', + 'TAP::Formatter::File' => '3.30', + 'TAP::Formatter::File::Session'=> '3.30', + 'TAP::Formatter::Session'=> '3.30', + 'TAP::Harness' => '3.30', + 'TAP::Harness::Env' => '3.30', + 'TAP::Object' => '3.30', + 'TAP::Parser' => '3.30', + 'TAP::Parser::Aggregator'=> '3.30', + 'TAP::Parser::Grammar' => '3.30', + 'TAP::Parser::Iterator' => '3.30', + 'TAP::Parser::Iterator::Array'=> '3.30', + 'TAP::Parser::Iterator::Process'=> '3.30', + 'TAP::Parser::Iterator::Stream'=> '3.30', + 'TAP::Parser::IteratorFactory'=> '3.30', + 'TAP::Parser::Multiplexer'=> '3.30', + 'TAP::Parser::Result' => '3.30', + 'TAP::Parser::Result::Bailout'=> '3.30', + 'TAP::Parser::Result::Comment'=> '3.30', + 'TAP::Parser::Result::Plan'=> '3.30', + 'TAP::Parser::Result::Pragma'=> '3.30', + 'TAP::Parser::Result::Test'=> '3.30', + 'TAP::Parser::Result::Unknown'=> '3.30', + 'TAP::Parser::Result::Version'=> '3.30', + 'TAP::Parser::Result::YAML'=> '3.30', + 'TAP::Parser::ResultFactory'=> '3.30', + 'TAP::Parser::Scheduler'=> '3.30', + 'TAP::Parser::Scheduler::Job'=> '3.30', + 'TAP::Parser::Scheduler::Spinner'=> '3.30', + 'TAP::Parser::Source' => '3.30', + 'TAP::Parser::SourceHandler'=> '3.30', + 'TAP::Parser::SourceHandler::Executable'=> '3.30', + 'TAP::Parser::SourceHandler::File'=> '3.30', + 'TAP::Parser::SourceHandler::Handle'=> '3.30', + 'TAP::Parser::SourceHandler::Perl'=> '3.30', + 'TAP::Parser::SourceHandler::RawTAP'=> '3.30', + 'TAP::Parser::YAMLish::Reader'=> '3.30', + 'TAP::Parser::YAMLish::Writer'=> '3.30', + 'Term::Cap' => '1.15', + 'Test::Builder' => '1.001002', + 'Test::Builder::Module' => '1.001002', + 'Test::Harness' => '3.30', + 'Test::More' => '1.001002', + 'Test::Simple' => '1.001002', + 'Tie::StdHandle' => '4.4', + 'Unicode::Collate' => '1.02', + 'Unicode::Collate::CJK::Korean'=> '1.02', + 'Unicode::Collate::Locale'=> '1.02', + 'XS::APItest' => '0.57', + 'XS::Typemap' => '0.12', + 'arybase' => '0.07', + 'bignum' => '0.37', + 'constant' => '1.29', + 'fields' => '2.17', + 'inc::latest' => '0.4202', + 'threads' => '1.90', + 'threads::shared' => '1.45', + }, + removed => { + } }, - 5.015005 => { + 5.019007 => { + delta_from => 5.019006, + changed => { + 'CGI' => '3.64', + 'CGI::Apache' => '1.02', + 'CGI::Carp' => '3.64', + 'CGI::Cookie' => '1.31', + 'CGI::Fast' => '1.10', + 'CGI::Pretty' => '3.64', + 'CGI::Push' => '1.06', + 'CGI::Switch' => '1.02', + 'CGI::Util' => '3.64', + 'CPAN::Meta' => '2.133380', + 'CPAN::Meta::Converter' => '2.133380', + 'CPAN::Meta::Feature' => '2.133380', + 'CPAN::Meta::History' => '2.133380', + 'CPAN::Meta::Prereqs' => '2.133380', + 'CPAN::Meta::Spec' => '2.133380', + 'CPAN::Meta::Validator' => '2.133380', + 'Config' => '5.019007', + 'Data::Dumper' => '2.150', + 'DynaLoader' => '1.22', + 'ExtUtils::Command::MM' => '6.84', + 'ExtUtils::Liblist' => '6.84', + 'ExtUtils::Liblist::Kid'=> '6.84', + 'ExtUtils::MM' => '6.84', + 'ExtUtils::MM_AIX' => '6.84', + 'ExtUtils::MM_Any' => '6.84', + 'ExtUtils::MM_BeOS' => '6.84', + 'ExtUtils::MM_Cygwin' => '6.84', + 'ExtUtils::MM_DOS' => '6.84', + 'ExtUtils::MM_Darwin' => '6.84', + 'ExtUtils::MM_MacOS' => '6.84', + 'ExtUtils::MM_NW5' => '6.84', + 'ExtUtils::MM_OS2' => '6.84', + 'ExtUtils::MM_QNX' => '6.84', + 'ExtUtils::MM_UWIN' => '6.84', + 'ExtUtils::MM_Unix' => '6.84', + 'ExtUtils::MM_VMS' => '6.84', + 'ExtUtils::MM_VOS' => '6.84', + 'ExtUtils::MM_Win32' => '6.84', + 'ExtUtils::MM_Win95' => '6.84', + 'ExtUtils::MY' => '6.84', + 'ExtUtils::MakeMaker' => '6.84', + 'ExtUtils::MakeMaker::Config'=> '6.84', + 'ExtUtils::Mkbootstrap' => '6.84', + 'ExtUtils::Mksymlists' => '6.84', + 'ExtUtils::testlib' => '6.84', + 'File::Fetch' => '0.46', + 'HTTP::Tiny' => '0.039', + 'Locale::Codes' => '3.28', + 'Locale::Codes::Constants'=> '3.28', + 'Locale::Codes::Country'=> '3.28', + 'Locale::Codes::Country_Codes'=> '3.28', + 'Locale::Codes::Country_Retired'=> '3.28', + 'Locale::Codes::Currency'=> '3.28', + 'Locale::Codes::Currency_Codes'=> '3.28', + 'Locale::Codes::Currency_Retired'=> '3.28', + 'Locale::Codes::LangExt'=> '3.28', + 'Locale::Codes::LangExt_Codes'=> '3.28', + 'Locale::Codes::LangExt_Retired'=> '3.28', + 'Locale::Codes::LangFam'=> '3.28', + 'Locale::Codes::LangFam_Codes'=> '3.28', + 'Locale::Codes::LangFam_Retired'=> '3.28', + 'Locale::Codes::LangVar'=> '3.28', + 'Locale::Codes::LangVar_Codes'=> '3.28', + 'Locale::Codes::LangVar_Retired'=> '3.28', + 'Locale::Codes::Language'=> '3.28', + 'Locale::Codes::Language_Codes'=> '3.28', + 'Locale::Codes::Language_Retired'=> '3.28', + 'Locale::Codes::Script' => '3.28', + 'Locale::Codes::Script_Codes'=> '3.28', + 'Locale::Codes::Script_Retired'=> '3.28', + 'Locale::Country' => '3.28', + 'Locale::Currency' => '3.28', + 'Locale::Language' => '3.28', + 'Locale::Script' => '3.28', + 'Module::Build' => '0.4203', + 'Module::Build::Base' => '0.4203', + 'Module::Build::Compat' => '0.4203', + 'Module::Build::Config' => '0.4203', + 'Module::Build::Cookbook'=> '0.4203', + 'Module::Build::Dumper' => '0.4203', + 'Module::Build::ModuleInfo'=> '0.4203', + 'Module::Build::Notes' => '0.4203', + 'Module::Build::PPMMaker'=> '0.4203', + 'Module::Build::Platform::Default'=> '0.4203', + 'Module::Build::Platform::MacOS'=> '0.4203', + 'Module::Build::Platform::Unix'=> '0.4203', + 'Module::Build::Platform::VMS'=> '0.4203', + 'Module::Build::Platform::VOS'=> '0.4203', + 'Module::Build::Platform::Windows'=> '0.4203', + 'Module::Build::Platform::aix'=> '0.4203', + 'Module::Build::Platform::cygwin'=> '0.4203', + 'Module::Build::Platform::darwin'=> '0.4203', + 'Module::Build::Platform::os2'=> '0.4203', + 'Module::Build::PodParser'=> '0.4203', + 'Module::CoreList' => '3.02', + 'Module::CoreList::TieHashDelta'=> '3.02', + 'Module::CoreList::Utils'=> '3.02', + 'POSIX' => '1.37', + 'PathTools::Cwd' => '3.45', + 'PerlIO::encoding' => '0.17', + 'PerlIO::via' => '0.14', + 'SDBM_File' => '1.11', + 'Storable' => '2.48', + 'Time::Piece' => '1.24', + 'Time::Seconds' => '1.24', + 'Unicode::Collate' => '1.04', + 'Win32' => '0.48', + 'XS::APItest' => '0.58', + 'base' => '2.20', + 'constant' => '1.30', + 'inc::latest' => '0.4203', + 'threads' => '1.91', + }, + removed => { + } }, - 5.015006 => { +); + +sub is_core +{ + my $module = shift; + $module = shift if eval { $module->isa(__PACKAGE__) } && @_ > 0 && defined($_[0]) && $_[0] =~ /^\w/; + my ($module_version, $perl_version); + + $module_version = shift if @_ > 0; + $perl_version = @_ > 0 ? shift : $^V; + + my $first_release = first_release($module); + + return 0 if !defined($first_release) || $first_release > $perl_version; + + my $final_release = removed_from($module); + + return 0 if defined($final_release) && $perl_version > $final_release; + + # If a minimum version of the module was specified: + # Step through all perl releases ($prn) + # so we can find what version of the module + # was included in the specified version of perl. + # On the way if we pass the required module version, we can + # short-circuit and return true + if (defined($module_version)) { + # The Perl releases aren't a linear sequence, but a tree. We need to build the path + # of releases from 5 to the specified release, and follow the module's version(s) + # along that path. + my @releases = ($perl_version); + my $rel = $perl_version; + while (defined($rel)) { + $rel = $delta{$rel}->{delta_from}; + unshift(@releases, $rel) if defined($rel); + } + RELEASE: + foreach my $prn (@releases) { + next RELEASE if $prn <= $first_release; + last RELEASE if $prn > $perl_version; + next unless defined(my $next_module_version + = $delta{$prn}->{changed}->{$module}); + return 1 if $next_module_version >= $module_version; + } + return 0; + } + + return 1 if !defined($final_release); + + return $perl_version <= $final_release; +} + +for my $version (sort { $a <=> $b } keys %delta) { + my $data = $delta{$version}; + + tie %{$version{$version}}, 'Module::CoreList::TieHashDelta', + $data->{changed}, $data->{removed}, + $data->{delta_from} ? $version{$data->{delta_from}} : undef; +} + +%deprecated = ( + 5.011 => { + changed => { map { $_ => 1 } qw/ + Class::ISA + Pod::Plainer + Shell + Switch + /}, }, - 5.015007 => { + 5.011001 => { delta_from => 5.011 }, + 5.011002 => { delta_from => 5.011001 }, + 5.011003 => { delta_from => 5.011002 }, + 5.011004 => { delta_from => 5.011003 }, + 5.011005 => { delta_from => 5.011004 }, + + 5.012 => { delta_from => 5.011005 }, + 5.012001 => { delta_from => 5.012 }, + 5.012002 => { delta_from => 5.012001 }, + 5.012003 => { delta_from => 5.012002 }, + 5.012004 => { delta_from => 5.012003 }, + 5.012005 => { delta_from => 5.012004 }, + + 5.013 => { delta_from => 5.012005 }, + 5.013001 => { + delta_from => 5.013, + removed => { map { $_ => 1 } qw/ + Class::ISA + Pod::Plainer + Switch + /}, }, - 5.015008 => { + 5.013002 => { delta_from => 5.013001 }, + 5.013003 => { delta_from => 5.013002 }, + 5.013004 => { delta_from => 5.013003 }, + 5.013005 => { delta_from => 5.013004 }, + 5.013006 => { delta_from => 5.013005 }, + 5.013007 => { delta_from => 5.013006 }, + 5.013008 => { delta_from => 5.013007 }, + 5.013009 => { delta_from => 5.013008 }, + 5.01301 => { delta_from => 5.013009 }, + 5.013011 => { delta_from => 5.01301 }, + + 5.014 => { delta_from => 5.013011 }, + 5.014001 => { delta_from => 5.014 }, + 5.014002 => { delta_from => 5.014001 }, + 5.014003 => { delta_from => 5.014002 }, + 5.014004 => { delta_from => 5.014003 }, + + 5.015 => { + delta_from => 5.014004, + removed => { Shell => 1 }, }, - 5.015009 => { + 5.015001 => { delta_from => 5.015 }, + 5.015002 => { delta_from => 5.015001 }, + 5.015003 => { delta_from => 5.015002 }, + 5.015004 => { delta_from => 5.015003 }, + 5.015005 => { delta_from => 5.015004 }, + 5.015006 => { delta_from => 5.015005 }, + 5.015007 => { delta_from => 5.015006 }, + 5.015008 => { delta_from => 5.015007 }, + 5.015009 => { delta_from => 5.015008 }, + + 5.016 => { delta_from => 5.015009 }, + 5.016001 => { delta_from => 5.016 }, + 5.016002 => { delta_from => 5.016001 }, + 5.016003 => { delta_from => 5.016002 }, + + 5.017 => { delta_from => 5.016003 }, + 5.017001 => { delta_from => 5.017 }, + 5.017002 => { delta_from => 5.017001 }, + 5.017003 => { delta_from => 5.017002 }, + 5.017004 => { delta_from => 5.017003 }, + 5.017005 => { delta_from => 5.017004 }, + 5.017006 => { delta_from => 5.017005 }, + 5.017007 => { delta_from => 5.017006 }, + 5.017008 => { + delta_from => 5.017007, + changed => { 'Pod::LaTeX' => 1 }, }, - 5.016000 => { + 5.017009 => { + delta_from => 5.017008, + changed => { map { $_ => 1 } qw/ + Archive::Extract + B::Lint + B::Lint::Debug + CPANPLUS + CPANPLUS::Backend + CPANPLUS::Backend::RV + CPANPLUS::Config + CPANPLUS::Config::HomeEnv + CPANPLUS::Configure + CPANPLUS::Configure::Setup + CPANPLUS::Dist + CPANPLUS::Dist::Autobundle + CPANPLUS::Dist::Base + CPANPLUS::Dist::Build + CPANPLUS::Dist::Build::Constants + CPANPLUS::Dist::MM + CPANPLUS::Dist::Sample + CPANPLUS::Error + CPANPLUS::Internals + CPANPLUS::Internals::Constants + CPANPLUS::Internals::Constants::Report + CPANPLUS::Internals::Extract + CPANPLUS::Internals::Fetch + CPANPLUS::Internals::Report + CPANPLUS::Internals::Search + CPANPLUS::Internals::Source + CPANPLUS::Internals::Source::Memory + CPANPLUS::Internals::Source::SQLite + CPANPLUS::Internals::Source::SQLite::Tie + CPANPLUS::Internals::Utils + CPANPLUS::Internals::Utils::Autoflush + CPANPLUS::Module + CPANPLUS::Module::Author + CPANPLUS::Module::Author::Fake + CPANPLUS::Module::Checksums + CPANPLUS::Module::Fake + CPANPLUS::Module::Signature + CPANPLUS::Selfupdate + CPANPLUS::Shell + CPANPLUS::Shell::Classic + CPANPLUS::Shell::Default + CPANPLUS::Shell::Default::Plugins::CustomSource + CPANPLUS::Shell::Default::Plugins::Remote + CPANPLUS::Shell::Default::Plugins::Source + Devel::InnerPackage + File::CheckTree + Log::Message + Log::Message::Config + Log::Message::Handlers + Log::Message::Item + Log::Message::Simple + Module::Pluggable + Module::Pluggable::Object + Object::Accessor + Term::UI + Term::UI::History + Text::Soundex + /}, }, - 5.016001 => { + 5.01701 => { delta_from => 5.017009 }, + 5.017011 => { delta_from => 5.01701 }, + 5.017012 => { delta_from => 5.017011 }, + + 5.018 => { delta_from => 5.017012 }, + 5.018001 => { + delta_from => 5.018, + changed => { + }, + removed => { + } }, - 5.016002 => { + 5.018002 => { + delta_from => 5.018001, + changed => { + }, + removed => { + } }, - 5.017000 => { + + + 5.019 => { + delta_from => 5.018, + changed => { 'Module::Build' => 1 }, + removed => { map { $_ => 1 } qw/ + Archive::Extract + B::Lint + B::Lint::Debug + CPANPLUS + CPANPLUS::Backend + CPANPLUS::Backend::RV + CPANPLUS::Config + CPANPLUS::Config::HomeEnv + CPANPLUS::Configure + CPANPLUS::Configure::Setup + CPANPLUS::Dist + CPANPLUS::Dist::Autobundle + CPANPLUS::Dist::Base + CPANPLUS::Dist::Build + CPANPLUS::Dist::Build::Constants + CPANPLUS::Dist::MM + CPANPLUS::Dist::Sample + CPANPLUS::Error + CPANPLUS::Internals + CPANPLUS::Internals::Constants + CPANPLUS::Internals::Constants::Report + CPANPLUS::Internals::Extract + CPANPLUS::Internals::Fetch + CPANPLUS::Internals::Report + CPANPLUS::Internals::Search + CPANPLUS::Internals::Source + CPANPLUS::Internals::Source::Memory + CPANPLUS::Internals::Source::SQLite + CPANPLUS::Internals::Source::SQLite::Tie + CPANPLUS::Internals::Utils + CPANPLUS::Internals::Utils::Autoflush + CPANPLUS::Module + CPANPLUS::Module::Author + CPANPLUS::Module::Author::Fake + CPANPLUS::Module::Checksums + CPANPLUS::Module::Fake + CPANPLUS::Module::Signature + CPANPLUS::Selfupdate + CPANPLUS::Shell + CPANPLUS::Shell::Classic + CPANPLUS::Shell::Default + CPANPLUS::Shell::Default::Plugins::CustomSource + CPANPLUS::Shell::Default::Plugins::Remote + CPANPLUS::Shell::Default::Plugins::Source + Devel::InnerPackage + File::CheckTree + Log::Message + Log::Message::Config + Log::Message::Handlers + Log::Message::Item + Log::Message::Simple + Module::Pluggable + Module::Pluggable::Object + Object::Accessor + Pod::LaTeX + Term::UI + Term::UI::History + Text::Soundex + /} }, - 5.017001 => { + 5.019001 => { + delta_from => 5.019, + changed => { + }, + removed => { + } }, - 5.017002 => { + 5.019002 => { + delta_from => 5.019001, + changed => { + }, + removed => { + } }, - 5.017003 => { + 5.019003 => { + delta_from => 5.019002, + changed => { + }, + removed => { + } }, - 5.017004 => { + 5.019004 => { + delta_from => 5.019003, + changed => { + 'Module::Build::Base' => '1', + 'Module::Build::Compat' => '1', + 'Module::Build::Config' => '1', + 'Module::Build::ConfigData'=> '1', + 'Module::Build::Cookbook'=> '1', + 'Module::Build::Dumper' => '1', + 'Module::Build::ModuleInfo'=> '1', + 'Module::Build::Notes' => '1', + 'Module::Build::PPMMaker'=> '1', + 'Module::Build::Platform::Default'=> '1', + 'Module::Build::Platform::MacOS'=> '1', + 'Module::Build::Platform::Unix'=> '1', + 'Module::Build::Platform::VMS'=> '1', + 'Module::Build::Platform::VOS'=> '1', + 'Module::Build::Platform::Windows'=> '1', + 'Module::Build::Platform::aix'=> '1', + 'Module::Build::Platform::cygwin'=> '1', + 'Module::Build::Platform::darwin'=> '1', + 'Module::Build::Platform::os2'=> '1', + 'Module::Build::PodParser'=> '1', + 'Module::Build::Version'=> '1', + 'Module::Build::YAML' => '1', + 'inc::latest' => '1', + }, + removed => { + } }, - 5.014003 => { - 'Shell' => '1', + 5.019005 => { + delta_from => 5.019004, + changed => { + }, + removed => { + } }, - 5.017005 => { + 5.019006 => { + delta_from => 5.019005, + changed => { + 'Package::Constants' => '1', + }, + removed => { + } }, ); +for my $version (sort { $a <=> $b } keys %deprecated) { + my $data = $deprecated{$version}; + + tie %{ $deprecated{$version} }, 'Module::CoreList::TieHashDelta', + $data->{changed}, $data->{removed}, + $data->{delta_from} ? $deprecated{ $data->{delta_from} } : undef; +} + %upstream = ( 'App::Cpan' => 'cpan', 'App::Prove' => 'cpan', 'App::Prove::State' => 'cpan', 'App::Prove::State::Result'=> 'cpan', 'App::Prove::State::Result::Test'=> 'cpan', - 'Archive::Extract' => 'cpan', 'Archive::Tar' => 'cpan', 'Archive::Tar::Constant'=> 'cpan', 'Archive::Tar::File' => 'cpan', - 'Attribute::Handlers' => 'blead', 'AutoLoader' => 'cpan', 'AutoSplit' => 'cpan', - 'B::Concise' => 'blead', 'B::Debug' => 'cpan', - 'B::Deparse' => 'blead', - 'B::Lint' => 'blead', - 'B::Lint::Debug' => 'blead', 'CGI' => 'cpan', 'CGI::Apache' => 'cpan', 'CGI::Carp' => 'cpan', @@ -7533,55 +9690,11 @@ for my $version (sort { $a <=> $b } keys %delta) { 'CPAN::Tarzip' => 'cpan', 'CPAN::URL' => 'cpan', 'CPAN::Version' => 'cpan', - 'CPANPLUS' => 'cpan', - 'CPANPLUS::Backend' => 'cpan', - 'CPANPLUS::Backend::RV' => 'cpan', - 'CPANPLUS::Config' => 'cpan', - 'CPANPLUS::Config::HomeEnv'=> 'cpan', - 'CPANPLUS::Configure' => 'cpan', - 'CPANPLUS::Configure::Setup'=> 'cpan', - 'CPANPLUS::Dist' => 'cpan', - 'CPANPLUS::Dist::Autobundle'=> 'cpan', - 'CPANPLUS::Dist::Base' => 'cpan', - 'CPANPLUS::Dist::Build' => 'cpan', - 'CPANPLUS::Dist::Build::Constants'=> 'cpan', - 'CPANPLUS::Dist::MM' => 'cpan', - 'CPANPLUS::Dist::Sample'=> 'cpan', - 'CPANPLUS::Error' => 'cpan', - 'CPANPLUS::Internals' => 'cpan', - 'CPANPLUS::Internals::Constants'=> 'cpan', - 'CPANPLUS::Internals::Constants::Report'=> 'cpan', - 'CPANPLUS::Internals::Extract'=> 'cpan', - 'CPANPLUS::Internals::Fetch'=> 'cpan', - 'CPANPLUS::Internals::Report'=> 'cpan', - 'CPANPLUS::Internals::Search'=> 'cpan', - 'CPANPLUS::Internals::Source'=> 'cpan', - 'CPANPLUS::Internals::Source::Memory'=> 'cpan', - 'CPANPLUS::Internals::Source::SQLite'=> 'cpan', - 'CPANPLUS::Internals::Source::SQLite::Tie'=> 'cpan', - 'CPANPLUS::Internals::Utils'=> 'cpan', - 'CPANPLUS::Internals::Utils::Autoflush'=> 'cpan', - 'CPANPLUS::Module' => 'cpan', - 'CPANPLUS::Module::Author'=> 'cpan', - 'CPANPLUS::Module::Author::Fake'=> 'cpan', - 'CPANPLUS::Module::Checksums'=> 'cpan', - 'CPANPLUS::Module::Fake'=> 'cpan', - 'CPANPLUS::Module::Signature'=> 'cpan', - 'CPANPLUS::Selfupdate' => 'cpan', - 'CPANPLUS::Shell' => 'cpan', - 'CPANPLUS::Shell::Classic'=> 'cpan', - 'CPANPLUS::Shell::Default'=> 'cpan', - 'CPANPLUS::Shell::Default::Plugins::CustomSource'=> 'cpan', - 'CPANPLUS::Shell::Default::Plugins::Remote'=> 'cpan', - 'CPANPLUS::Shell::Default::Plugins::Source'=> 'cpan', - 'Carp' => 'blead', - 'Carp::Heavy' => 'blead', 'Compress::Raw::Bzip2' => 'cpan', 'Compress::Raw::Zlib' => 'cpan', 'Compress::Zlib' => 'cpan', - 'Cwd' => 'blead', + 'Config::Perl::V' => 'cpan', 'DB_File' => 'cpan', - 'Devel::InnerPackage' => 'cpan', 'Devel::PPPort' => 'cpan', 'Digest' => 'cpan', 'Digest::MD5' => 'cpan', @@ -7612,79 +9725,42 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Encode::TW' => 'cpan', 'Encode::Unicode' => 'cpan', 'Encode::Unicode::UTF7' => 'cpan', - 'Exporter' => 'blead', - 'Exporter::Heavy' => 'blead', - 'ExtUtils::CBuilder' => 'blead', - 'ExtUtils::CBuilder::Base'=> 'blead', - 'ExtUtils::CBuilder::Platform::Unix'=> 'blead', - 'ExtUtils::CBuilder::Platform::VMS'=> 'blead', - 'ExtUtils::CBuilder::Platform::Windows'=> 'blead', - 'ExtUtils::CBuilder::Platform::Windows::BCC'=> 'blead', - 'ExtUtils::CBuilder::Platform::Windows::GCC'=> 'blead', - 'ExtUtils::CBuilder::Platform::Windows::MSVC'=> 'blead', - 'ExtUtils::CBuilder::Platform::aix'=> 'blead', - 'ExtUtils::CBuilder::Platform::cygwin'=> 'blead', - 'ExtUtils::CBuilder::Platform::darwin'=> 'blead', - 'ExtUtils::CBuilder::Platform::dec_osf'=> 'blead', - 'ExtUtils::CBuilder::Platform::os2'=> 'blead', - 'ExtUtils::Command::MM' => 'first-come', - 'ExtUtils::Constant' => undef, - 'ExtUtils::Constant::Base'=> undef, - 'ExtUtils::Constant::ProxySubs'=> undef, - 'ExtUtils::Constant::Utils'=> undef, - 'ExtUtils::Constant::XS'=> undef, - 'ExtUtils::Install' => 'blead', - 'ExtUtils::Installed' => 'blead', - 'ExtUtils::Liblist' => 'first-come', - 'ExtUtils::Liblist::Kid'=> 'first-come', - 'ExtUtils::MM' => 'first-come', - 'ExtUtils::MM_AIX' => 'first-come', - 'ExtUtils::MM_Any' => 'first-come', - 'ExtUtils::MM_BeOS' => 'first-come', - 'ExtUtils::MM_Cygwin' => 'first-come', - 'ExtUtils::MM_DOS' => 'first-come', - 'ExtUtils::MM_Darwin' => 'first-come', - 'ExtUtils::MM_MacOS' => 'first-come', - 'ExtUtils::MM_NW5' => 'first-come', - 'ExtUtils::MM_OS2' => 'first-come', - 'ExtUtils::MM_QNX' => 'first-come', - 'ExtUtils::MM_UWIN' => 'first-come', - 'ExtUtils::MM_Unix' => 'first-come', - 'ExtUtils::MM_VMS' => 'first-come', - 'ExtUtils::MM_VOS' => 'first-come', - 'ExtUtils::MM_Win32' => 'first-come', - 'ExtUtils::MM_Win95' => 'first-come', - 'ExtUtils::MY' => 'first-come', - 'ExtUtils::MakeMaker' => 'first-come', - 'ExtUtils::MakeMaker::Config'=> 'first-come', - 'ExtUtils::Mkbootstrap' => 'first-come', - 'ExtUtils::Mksymlists' => 'first-come', - 'ExtUtils::Packlist' => 'blead', - 'ExtUtils::ParseXS' => 'blead', - 'ExtUtils::ParseXS::Constants'=> 'blead', - 'ExtUtils::ParseXS::CountLines'=> 'blead', - 'ExtUtils::ParseXS::Utilities'=> 'blead', - 'ExtUtils::Typemaps' => 'blead', - 'ExtUtils::Typemaps::Cmd'=> 'blead', - 'ExtUtils::Typemaps::InputMap'=> 'blead', - 'ExtUtils::Typemaps::OutputMap'=> 'blead', - 'ExtUtils::Typemaps::Type'=> 'blead', - 'ExtUtils::testlib' => 'first-come', + 'ExtUtils::Command::MM' => 'cpan', + 'ExtUtils::Constant' => 'cpan', + 'ExtUtils::Constant::Base'=> 'cpan', + 'ExtUtils::Constant::ProxySubs'=> 'cpan', + 'ExtUtils::Constant::Utils'=> 'cpan', + 'ExtUtils::Constant::XS'=> 'cpan', + 'ExtUtils::Liblist' => 'cpan', + 'ExtUtils::Liblist::Kid'=> 'cpan', + 'ExtUtils::MM' => 'cpan', + 'ExtUtils::MM_AIX' => 'cpan', + 'ExtUtils::MM_Any' => 'cpan', + 'ExtUtils::MM_BeOS' => 'cpan', + 'ExtUtils::MM_Cygwin' => 'cpan', + 'ExtUtils::MM_DOS' => 'cpan', + 'ExtUtils::MM_Darwin' => 'cpan', + 'ExtUtils::MM_MacOS' => 'cpan', + 'ExtUtils::MM_NW5' => 'cpan', + 'ExtUtils::MM_OS2' => 'cpan', + 'ExtUtils::MM_QNX' => 'cpan', + 'ExtUtils::MM_UWIN' => 'cpan', + 'ExtUtils::MM_Unix' => 'cpan', + 'ExtUtils::MM_VMS' => 'cpan', + 'ExtUtils::MM_VOS' => 'cpan', + 'ExtUtils::MM_Win32' => 'cpan', + 'ExtUtils::MM_Win95' => 'cpan', + 'ExtUtils::MY' => 'cpan', + 'ExtUtils::MakeMaker' => 'cpan', + 'ExtUtils::MakeMaker::Config'=> 'cpan', + 'ExtUtils::Mkbootstrap' => 'cpan', + 'ExtUtils::Mksymlists' => 'cpan', + 'ExtUtils::testlib' => 'cpan', 'Fatal' => 'cpan', 'File::Fetch' => 'cpan', 'File::GlobMapper' => 'cpan', - 'File::Path' => undef, - 'File::Spec' => 'blead', - 'File::Spec::Cygwin' => 'blead', - 'File::Spec::Epoc' => 'blead', - 'File::Spec::Functions' => 'blead', - 'File::Spec::Mac' => 'blead', - 'File::Spec::OS2' => 'blead', - 'File::Spec::Unix' => 'blead', - 'File::Spec::VMS' => 'blead', - 'File::Spec::Win32' => 'blead', + 'File::Path' => 'cpan', 'File::Temp' => 'cpan', - 'Filter::Simple' => 'blead', 'Filter::Util::Call' => 'cpan', 'Getopt::Long' => 'cpan', 'HTTP::Tiny' => 'cpan', @@ -7713,7 +9789,7 @@ for my $version (sort { $a <=> $b } keys %delta) { 'IO::Uncompress::Inflate'=> 'cpan', 'IO::Uncompress::RawInflate'=> 'cpan', 'IO::Uncompress::Unzip' => 'cpan', - 'IO::Zlib' => undef, + 'IO::Zlib' => 'cpan', 'IPC::Cmd' => 'cpan', 'IPC::Msg' => 'cpan', 'IPC::Semaphore' => 'cpan', @@ -7749,26 +9825,10 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Locale::Country' => 'cpan', 'Locale::Currency' => 'cpan', 'Locale::Language' => 'cpan', - 'Locale::Maketext' => 'blead', - 'Locale::Maketext::Guts'=> 'blead', - 'Locale::Maketext::GutsLoader'=> 'blead', 'Locale::Maketext::Simple'=> 'cpan', 'Locale::Script' => 'cpan', - 'Log::Message' => 'cpan', - 'Log::Message::Config' => 'cpan', - 'Log::Message::Handlers'=> 'cpan', - 'Log::Message::Item' => 'cpan', - 'Log::Message::Simple' => 'cpan', 'MIME::Base64' => 'cpan', 'MIME::QuotedPrint' => 'cpan', - 'Math::BigFloat' => 'blead', - 'Math::BigFloat::Trace' => 'blead', - 'Math::BigInt' => 'blead', - 'Math::BigInt::Calc' => 'blead', - 'Math::BigInt::CalcEmu' => 'blead', - 'Math::BigInt::FastCalc'=> 'blead', - 'Math::BigInt::Trace' => 'blead', - 'Math::BigRat' => 'blead', 'Math::Complex' => 'cpan', 'Math::Trig' => 'cpan', 'Memoize' => 'cpan', @@ -7789,12 +9849,8 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Module::Build::ModuleInfo'=> 'cpan', 'Module::Build::Notes' => 'cpan', 'Module::Build::PPMMaker'=> 'cpan', - 'Module::Build::Platform::Amiga'=> 'cpan', 'Module::Build::Platform::Default'=> 'cpan', - 'Module::Build::Platform::EBCDIC'=> 'cpan', - 'Module::Build::Platform::MPEiX'=> 'cpan', 'Module::Build::Platform::MacOS'=> 'cpan', - 'Module::Build::Platform::RiscOS'=> 'cpan', 'Module::Build::Platform::Unix'=> 'cpan', 'Module::Build::Platform::VMS'=> 'cpan', 'Module::Build::Platform::VOS'=> 'cpan', @@ -7806,41 +9862,34 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Module::Build::PodParser'=> 'cpan', 'Module::Build::Version'=> 'cpan', 'Module::Build::YAML' => 'cpan', - 'Module::CoreList' => 'blead', - 'Module::CoreList::TieHashDelta'=> 'blead', 'Module::Load' => 'cpan', 'Module::Load::Conditional'=> 'cpan', 'Module::Loaded' => 'cpan', 'Module::Metadata' => 'cpan', - 'Module::Pluggable' => 'cpan', - 'Module::Pluggable::Object'=> 'cpan', 'NEXT' => 'cpan', - 'Net::Cmd' => undef, - 'Net::Config' => undef, - 'Net::Domain' => undef, - 'Net::FTP' => undef, - 'Net::FTP::A' => undef, - 'Net::FTP::E' => undef, - 'Net::FTP::I' => undef, - 'Net::FTP::L' => undef, - 'Net::FTP::dataconn' => undef, - 'Net::NNTP' => undef, - 'Net::Netrc' => undef, - 'Net::POP3' => undef, - 'Net::Ping' => 'blead', - 'Net::SMTP' => undef, - 'Net::Time' => undef, - 'Object::Accessor' => 'cpan', + 'Net::Cmd' => 'cpan', + 'Net::Config' => 'cpan', + 'Net::Domain' => 'cpan', + 'Net::FTP' => 'cpan', + 'Net::FTP::A' => 'cpan', + 'Net::FTP::E' => 'cpan', + 'Net::FTP::I' => 'cpan', + 'Net::FTP::L' => 'cpan', + 'Net::FTP::dataconn' => 'cpan', + 'Net::NNTP' => 'cpan', + 'Net::Netrc' => 'cpan', + 'Net::POP3' => 'cpan', + 'Net::SMTP' => 'cpan', + 'Net::Time' => 'cpan', 'Package::Constants' => 'cpan', 'Params::Check' => 'cpan', 'Parse::CPAN::Meta' => 'cpan', 'Perl::OSType' => 'cpan', - 'PerlIO::via::QuotedPrint'=> undef, + 'PerlIO::via::QuotedPrint'=> 'cpan', 'Pod::Checker' => 'cpan', - 'Pod::Escapes' => undef, + 'Pod::Escapes' => 'cpan', 'Pod::Find' => 'cpan', 'Pod::InputObjects' => 'cpan', - 'Pod::LaTeX' => undef, 'Pod::Man' => 'cpan', 'Pod::ParseLink' => 'cpan', 'Pod::ParseUtils' => 'cpan', @@ -7893,11 +9942,8 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Pod::Text::Overstrike' => 'cpan', 'Pod::Text::Termcap' => 'cpan', 'Pod::Usage' => 'cpan', - 'Safe' => 'blead', 'Scalar::Util' => 'cpan', - 'SelfLoader' => 'blead', 'Socket' => 'cpan', - 'Storable' => 'blead', 'Sys::Syslog' => 'cpan', 'Sys::Syslog::Win32' => 'cpan', 'TAP::Base' => 'cpan', @@ -7910,6 +9956,7 @@ for my $version (sort { $a <=> $b } keys %delta) { 'TAP::Formatter::File::Session'=> 'cpan', 'TAP::Formatter::Session'=> 'cpan', 'TAP::Harness' => 'cpan', + 'TAP::Harness::Env' => 'cpan', 'TAP::Object' => 'cpan', 'TAP::Parser' => 'cpan', 'TAP::Parser::Aggregator'=> 'cpan', @@ -7940,13 +9987,10 @@ for my $version (sort { $a <=> $b } keys %delta) { 'TAP::Parser::SourceHandler::Handle'=> 'cpan', 'TAP::Parser::SourceHandler::Perl'=> 'cpan', 'TAP::Parser::SourceHandler::RawTAP'=> 'cpan', - 'TAP::Parser::Utils' => 'cpan', 'TAP::Parser::YAMLish::Reader'=> 'cpan', 'TAP::Parser::YAMLish::Writer'=> 'cpan', 'Term::ANSIColor' => 'cpan', - 'Term::Cap' => undef, - 'Term::UI' => 'cpan', - 'Term::UI::History' => 'cpan', + 'Term::Cap' => 'cpan', 'Test' => 'cpan', 'Test::Builder' => 'cpan', 'Test::Builder::Module' => 'cpan', @@ -7956,58 +10000,37 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Test::More' => 'cpan', 'Test::Simple' => 'cpan', 'Text::Balanced' => 'cpan', - 'Text::ParseWords' => undef, - 'Text::Soundex' => undef, + 'Text::ParseWords' => 'cpan', 'Text::Tabs' => 'cpan', 'Text::Wrap' => 'cpan', - 'Thread::Queue' => 'blead', - 'Thread::Semaphore' => 'blead', - 'Tie::File' => 'blead', 'Tie::RefHash' => 'cpan', 'Time::HiRes' => 'cpan', 'Time::Local' => 'cpan', - 'Time::Piece' => undef, - 'Time::Seconds' => undef, - 'Unicode::Collate' => 'first-come', - 'Unicode::Collate::CJK::Big5'=> 'first-come', - 'Unicode::Collate::CJK::GB2312'=> 'first-come', - 'Unicode::Collate::CJK::JISX0208'=> 'first-come', - 'Unicode::Collate::CJK::Korean'=> 'first-come', - 'Unicode::Collate::CJK::Pinyin'=> 'first-come', - 'Unicode::Collate::CJK::Stroke'=> 'first-come', - 'Unicode::Collate::Locale'=> 'first-come', - 'Unicode::Normalize' => 'first-come', - 'Unicode::UCD' => 'blead', - 'VMS::DCLsym' => undef, - 'VMS::Filespec' => undef, - 'VMS::Stdio' => undef, + 'Time::Piece' => 'cpan', + 'Time::Seconds' => 'cpan', + 'Unicode::Collate' => 'cpan', + 'Unicode::Collate::CJK::Big5'=> 'cpan', + 'Unicode::Collate::CJK::GB2312'=> 'cpan', + 'Unicode::Collate::CJK::JISX0208'=> 'cpan', + 'Unicode::Collate::CJK::Korean'=> 'cpan', + 'Unicode::Collate::CJK::Pinyin'=> 'cpan', + 'Unicode::Collate::CJK::Stroke'=> 'cpan', + 'Unicode::Collate::CJK::Zhuyin'=> 'cpan', + 'Unicode::Collate::Locale'=> 'cpan', + 'Unicode::Normalize' => 'cpan', 'Win32' => 'cpan', 'Win32API::File' => 'cpan', 'Win32API::File::ExtUtils::Myconst2perl'=> 'cpan', - 'Win32CORE' => undef, - 'XSLoader' => undef, 'autodie' => 'cpan', 'autodie::exception' => 'cpan', 'autodie::exception::system'=> 'cpan', 'autodie::hints' => 'cpan', - 'base' => 'blead', - 'bigint' => 'blead', - 'bignum' => 'blead', - 'bigrat' => 'blead', - 'constant' => 'blead', + 'autodie::skip' => 'cpan', 'encoding' => 'cpan', - 'encoding::warnings' => undef, - 'fields' => 'blead', - 'if' => 'blead', + 'encoding::warnings' => 'cpan', 'inc::latest' => 'cpan', - 'lib' => 'blead', - 'parent' => undef, + 'parent' => 'cpan', 'perlfaq' => 'cpan', - 'threads' => 'blead', - 'threads::shared' => 'blead', - 'version' => undef, - 'warnings' => 'blead', - 'warnings::register' => 'blead', ); %bug_tracker = ( @@ -8016,16 +10039,10 @@ for my $version (sort { $a <=> $b } keys %delta) { 'App::Prove::State' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'App::Prove::State::Result'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'App::Prove::State::Result::Test'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', - 'Archive::Extract' => undef, 'Archive::Tar' => undef, 'Archive::Tar::Constant'=> undef, 'Archive::Tar::File' => undef, - 'Attribute::Handlers' => undef, - 'B::Concise' => undef, 'B::Debug' => undef, - 'B::Deparse' => undef, - 'B::Lint' => undef, - 'B::Lint::Debug' => undef, 'CGI' => undef, 'CGI::Apache' => undef, 'CGI::Carp' => undef, @@ -8059,15 +10076,15 @@ for my $version (sort { $a <=> $b } keys %delta) { 'CPAN::InfoObj' => undef, 'CPAN::Kwalify' => undef, 'CPAN::LWP::UserAgent' => undef, - 'CPAN::Meta' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta', - 'CPAN::Meta::Converter' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta', - 'CPAN::Meta::Feature' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta', - 'CPAN::Meta::History' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta', - 'CPAN::Meta::Prereqs' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta', - 'CPAN::Meta::Requirements'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta-Requirements', - 'CPAN::Meta::Spec' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta', - 'CPAN::Meta::Validator' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta', - 'CPAN::Meta::YAML' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta-YAML', + 'CPAN::Meta' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues', + 'CPAN::Meta::Converter' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues', + 'CPAN::Meta::Feature' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues', + 'CPAN::Meta::History' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues', + 'CPAN::Meta::Prereqs' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues', + 'CPAN::Meta::Requirements'=> 'https://github.com/dagolden/CPAN-Meta-Requirements/issues', + 'CPAN::Meta::Spec' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues', + 'CPAN::Meta::Validator' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues', + 'CPAN::Meta::YAML' => 'https://github.com/dagolden/CPAN-Meta-YAML/issues', 'CPAN::Mirrors' => undef, 'CPAN::Module' => undef, 'CPAN::Nox' => undef, @@ -8077,55 +10094,11 @@ for my $version (sort { $a <=> $b } keys %delta) { 'CPAN::Tarzip' => undef, 'CPAN::URL' => undef, 'CPAN::Version' => undef, - 'CPANPLUS' => undef, - 'CPANPLUS::Backend' => undef, - 'CPANPLUS::Backend::RV' => undef, - 'CPANPLUS::Config' => undef, - 'CPANPLUS::Config::HomeEnv'=> undef, - 'CPANPLUS::Configure' => undef, - 'CPANPLUS::Configure::Setup'=> undef, - 'CPANPLUS::Dist' => undef, - 'CPANPLUS::Dist::Autobundle'=> undef, - 'CPANPLUS::Dist::Base' => undef, - 'CPANPLUS::Dist::Build' => undef, - 'CPANPLUS::Dist::Build::Constants'=> undef, - 'CPANPLUS::Dist::MM' => undef, - 'CPANPLUS::Dist::Sample'=> undef, - 'CPANPLUS::Error' => undef, - 'CPANPLUS::Internals' => undef, - 'CPANPLUS::Internals::Constants'=> undef, - 'CPANPLUS::Internals::Constants::Report'=> undef, - 'CPANPLUS::Internals::Extract'=> undef, - 'CPANPLUS::Internals::Fetch'=> undef, - 'CPANPLUS::Internals::Report'=> undef, - 'CPANPLUS::Internals::Search'=> undef, - 'CPANPLUS::Internals::Source'=> undef, - 'CPANPLUS::Internals::Source::Memory'=> undef, - 'CPANPLUS::Internals::Source::SQLite'=> undef, - 'CPANPLUS::Internals::Source::SQLite::Tie'=> undef, - 'CPANPLUS::Internals::Utils'=> undef, - 'CPANPLUS::Internals::Utils::Autoflush'=> undef, - 'CPANPLUS::Module' => undef, - 'CPANPLUS::Module::Author'=> undef, - 'CPANPLUS::Module::Author::Fake'=> undef, - 'CPANPLUS::Module::Checksums'=> undef, - 'CPANPLUS::Module::Fake'=> undef, - 'CPANPLUS::Module::Signature'=> undef, - 'CPANPLUS::Selfupdate' => undef, - 'CPANPLUS::Shell' => undef, - 'CPANPLUS::Shell::Classic'=> undef, - 'CPANPLUS::Shell::Default'=> undef, - 'CPANPLUS::Shell::Default::Plugins::CustomSource'=> undef, - 'CPANPLUS::Shell::Default::Plugins::Remote'=> undef, - 'CPANPLUS::Shell::Default::Plugins::Source'=> undef, - 'Carp' => undef, - 'Carp::Heavy' => undef, 'Compress::Raw::Bzip2' => undef, 'Compress::Raw::Zlib' => undef, 'Compress::Zlib' => undef, - 'Cwd' => undef, + 'Config::Perl::V' => undef, 'DB_File' => undef, - 'Devel::InnerPackage' => undef, 'Devel::PPPort' => undef, 'Digest' => undef, 'Digest::MD5' => undef, @@ -8156,82 +10129,45 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Encode::TW' => undef, 'Encode::Unicode' => undef, 'Encode::Unicode::UTF7' => undef, - 'Exporter' => undef, - 'Exporter::Heavy' => undef, - 'ExtUtils::CBuilder' => undef, - 'ExtUtils::CBuilder::Base'=> undef, - 'ExtUtils::CBuilder::Platform::Unix'=> undef, - 'ExtUtils::CBuilder::Platform::VMS'=> undef, - 'ExtUtils::CBuilder::Platform::Windows'=> undef, - 'ExtUtils::CBuilder::Platform::Windows::BCC'=> undef, - 'ExtUtils::CBuilder::Platform::Windows::GCC'=> undef, - 'ExtUtils::CBuilder::Platform::Windows::MSVC'=> undef, - 'ExtUtils::CBuilder::Platform::aix'=> undef, - 'ExtUtils::CBuilder::Platform::cygwin'=> undef, - 'ExtUtils::CBuilder::Platform::darwin'=> undef, - 'ExtUtils::CBuilder::Platform::dec_osf'=> undef, - 'ExtUtils::CBuilder::Platform::os2'=> undef, - 'ExtUtils::Command::MM' => undef, + 'ExtUtils::Command::MM' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', 'ExtUtils::Constant' => undef, 'ExtUtils::Constant::Base'=> undef, 'ExtUtils::Constant::ProxySubs'=> undef, 'ExtUtils::Constant::Utils'=> undef, 'ExtUtils::Constant::XS'=> undef, - 'ExtUtils::Install' => undef, - 'ExtUtils::Installed' => undef, - 'ExtUtils::Liblist' => undef, - 'ExtUtils::Liblist::Kid'=> undef, - 'ExtUtils::MM' => undef, - 'ExtUtils::MM_AIX' => undef, - 'ExtUtils::MM_Any' => undef, - 'ExtUtils::MM_BeOS' => undef, - 'ExtUtils::MM_Cygwin' => undef, - 'ExtUtils::MM_DOS' => undef, - 'ExtUtils::MM_Darwin' => undef, - 'ExtUtils::MM_MacOS' => undef, - 'ExtUtils::MM_NW5' => undef, - 'ExtUtils::MM_OS2' => undef, - 'ExtUtils::MM_QNX' => undef, - 'ExtUtils::MM_UWIN' => undef, - 'ExtUtils::MM_Unix' => undef, - 'ExtUtils::MM_VMS' => undef, - 'ExtUtils::MM_VOS' => undef, - 'ExtUtils::MM_Win32' => undef, - 'ExtUtils::MM_Win95' => undef, - 'ExtUtils::MY' => undef, - 'ExtUtils::MakeMaker' => undef, - 'ExtUtils::MakeMaker::Config'=> undef, - 'ExtUtils::Mkbootstrap' => undef, - 'ExtUtils::Mksymlists' => undef, - 'ExtUtils::Packlist' => undef, - 'ExtUtils::ParseXS' => undef, - 'ExtUtils::ParseXS::Constants'=> undef, - 'ExtUtils::ParseXS::CountLines'=> undef, - 'ExtUtils::ParseXS::Utilities'=> undef, - 'ExtUtils::Typemaps' => undef, - 'ExtUtils::Typemaps::Cmd'=> undef, - 'ExtUtils::Typemaps::InputMap'=> undef, - 'ExtUtils::Typemaps::OutputMap'=> undef, - 'ExtUtils::Typemaps::Type'=> undef, - 'ExtUtils::testlib' => undef, + 'ExtUtils::Liblist' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::Liblist::Kid'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_AIX' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_Any' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_BeOS' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_Cygwin' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_DOS' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_Darwin' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_MacOS' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_NW5' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_OS2' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_QNX' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_UWIN' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_Unix' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_VMS' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_VOS' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_Win32' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MM_Win95' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MY' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MakeMaker' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::MakeMaker::Config'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::Mkbootstrap' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::Mksymlists' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', + 'ExtUtils::testlib' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker', 'Fatal' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie', 'File::Fetch' => undef, 'File::GlobMapper' => undef, 'File::Path' => undef, - 'File::Spec' => undef, - 'File::Spec::Cygwin' => undef, - 'File::Spec::Epoc' => undef, - 'File::Spec::Functions' => undef, - 'File::Spec::Mac' => undef, - 'File::Spec::OS2' => undef, - 'File::Spec::Unix' => undef, - 'File::Spec::VMS' => undef, - 'File::Spec::Win32' => undef, - 'File::Temp' => undef, - 'Filter::Simple' => undef, + 'File::Temp' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=File-Temp', 'Filter::Util::Call' => undef, 'Getopt::Long' => undef, - 'HTTP::Tiny' => 'https://rt.cpan.org/Public/Dist/Display.html?Name=HTTP-Tiny', + 'HTTP::Tiny' => 'https://github.com/chansen/p5-http-tiny/issues', 'IO::Compress::Adapter::Bzip2'=> undef, 'IO::Compress::Adapter::Deflate'=> undef, 'IO::Compress::Adapter::Identity'=> undef, @@ -8293,26 +10229,10 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Locale::Country' => undef, 'Locale::Currency' => undef, 'Locale::Language' => undef, - 'Locale::Maketext' => undef, - 'Locale::Maketext::Guts'=> undef, - 'Locale::Maketext::GutsLoader'=> undef, 'Locale::Maketext::Simple'=> undef, 'Locale::Script' => undef, - 'Log::Message' => undef, - 'Log::Message::Config' => undef, - 'Log::Message::Handlers'=> undef, - 'Log::Message::Item' => undef, - 'Log::Message::Simple' => undef, 'MIME::Base64' => undef, 'MIME::QuotedPrint' => undef, - 'Math::BigFloat' => undef, - 'Math::BigFloat::Trace' => undef, - 'Math::BigInt' => undef, - 'Math::BigInt::Calc' => undef, - 'Math::BigInt::CalcEmu' => undef, - 'Math::BigInt::FastCalc'=> undef, - 'Math::BigInt::Trace' => undef, - 'Math::BigRat' => undef, 'Math::Complex' => undef, 'Math::Trig' => undef, 'Memoize' => undef, @@ -8327,17 +10247,14 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Module::Build::Base' => undef, 'Module::Build::Compat' => undef, 'Module::Build::Config' => undef, + 'Module::Build::ConfigData'=> undef, 'Module::Build::Cookbook'=> undef, 'Module::Build::Dumper' => undef, 'Module::Build::ModuleInfo'=> undef, 'Module::Build::Notes' => undef, 'Module::Build::PPMMaker'=> undef, - 'Module::Build::Platform::Amiga'=> undef, 'Module::Build::Platform::Default'=> undef, - 'Module::Build::Platform::EBCDIC'=> undef, - 'Module::Build::Platform::MPEiX'=> undef, 'Module::Build::Platform::MacOS'=> undef, - 'Module::Build::Platform::RiscOS'=> undef, 'Module::Build::Platform::Unix'=> undef, 'Module::Build::Platform::VMS'=> undef, 'Module::Build::Platform::VOS'=> undef, @@ -8349,14 +10266,10 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Module::Build::PodParser'=> undef, 'Module::Build::Version'=> undef, 'Module::Build::YAML' => undef, - 'Module::CoreList' => undef, - 'Module::CoreList::TieHashDelta'=> undef, 'Module::Load' => undef, 'Module::Load::Conditional'=> undef, 'Module::Loaded' => undef, - 'Module::Metadata' => undef, - 'Module::Pluggable' => undef, - 'Module::Pluggable::Object'=> undef, + 'Module::Metadata' => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Module-Metadata', 'NEXT' => undef, 'Net::Cmd' => undef, 'Net::Config' => undef, @@ -8370,20 +10283,17 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Net::NNTP' => undef, 'Net::Netrc' => undef, 'Net::POP3' => undef, - 'Net::Ping' => undef, 'Net::SMTP' => undef, 'Net::Time' => undef, - 'Object::Accessor' => undef, 'Package::Constants' => undef, 'Params::Check' => undef, - 'Parse::CPAN::Meta' => undef, - 'Perl::OSType' => undef, + 'Parse::CPAN::Meta' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Parse-CPAN-Meta', + 'Perl::OSType' => 'https://github.com/dagolden/Perl-OSType/issues', 'PerlIO::via::QuotedPrint'=> undef, 'Pod::Checker' => undef, 'Pod::Escapes' => undef, 'Pod::Find' => undef, 'Pod::InputObjects' => undef, - 'Pod::LaTeX' => undef, 'Pod::Man' => undef, 'Pod::ParseLink' => undef, 'Pod::ParseUtils' => undef, @@ -8436,11 +10346,8 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Pod::Text::Overstrike' => undef, 'Pod::Text::Termcap' => undef, 'Pod::Usage' => undef, - 'Safe' => undef, 'Scalar::Util' => undef, - 'SelfLoader' => undef, 'Socket' => undef, - 'Storable' => undef, 'Sys::Syslog' => undef, 'Sys::Syslog::Win32' => undef, 'TAP::Base' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', @@ -8453,6 +10360,7 @@ for my $version (sort { $a <=> $b } keys %delta) { 'TAP::Formatter::File::Session'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'TAP::Formatter::Session'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'TAP::Harness' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', + 'TAP::Harness::Env' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'TAP::Object' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'TAP::Parser' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'TAP::Parser::Aggregator'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', @@ -8483,29 +10391,22 @@ for my $version (sort { $a <=> $b } keys %delta) { 'TAP::Parser::SourceHandler::Handle'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'TAP::Parser::SourceHandler::Perl'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'TAP::Parser::SourceHandler::RawTAP'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', - 'TAP::Parser::Utils' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'TAP::Parser::YAMLish::Reader'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'TAP::Parser::YAMLish::Writer'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', 'Term::ANSIColor' => undef, 'Term::Cap' => undef, - 'Term::UI' => undef, - 'Term::UI::History' => undef, 'Test' => undef, - 'Test::Builder' => 'http://github.com/schwern/test-more/issues', - 'Test::Builder::Module' => 'http://github.com/schwern/test-more/issues', + 'Test::Builder' => 'http://github.com/schwern/test-more/issues/', + 'Test::Builder::Module' => 'http://github.com/schwern/test-more/issues/', 'Test::Builder::Tester' => 'http://github.com/schwern/test-more/issues', 'Test::Builder::Tester::Color'=> 'http://github.com/schwern/test-more/issues', 'Test::Harness' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness', - 'Test::More' => 'http://github.com/schwern/test-more/issues', - 'Test::Simple' => 'http://github.com/schwern/test-more/issues', + 'Test::More' => 'http://github.com/schwern/test-more/issues/', + 'Test::Simple' => 'http://github.com/schwern/test-more/issues/', 'Text::Balanced' => undef, 'Text::ParseWords' => undef, - 'Text::Soundex' => undef, 'Text::Tabs' => undef, 'Text::Wrap' => undef, - 'Thread::Queue' => undef, - 'Thread::Semaphore' => undef, - 'Tie::File' => undef, 'Tie::RefHash' => undef, 'Time::HiRes' => undef, 'Time::Local' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=Time-Local', @@ -8518,39 +10419,22 @@ for my $version (sort { $a <=> $b } keys %delta) { 'Unicode::Collate::CJK::Korean'=> undef, 'Unicode::Collate::CJK::Pinyin'=> undef, 'Unicode::Collate::CJK::Stroke'=> undef, + 'Unicode::Collate::CJK::Zhuyin'=> undef, 'Unicode::Collate::Locale'=> undef, 'Unicode::Normalize' => undef, - 'Unicode::UCD' => undef, - 'VMS::DCLsym' => undef, - 'VMS::Filespec' => undef, - 'VMS::Stdio' => undef, 'Win32' => undef, 'Win32API::File' => undef, 'Win32API::File::ExtUtils::Myconst2perl'=> undef, - 'Win32CORE' => undef, - 'XSLoader' => 'https://rt.perl.org/rt3/Search/Results.html?Query=Queue=\'perl5\' AND Content LIKE \'module=XSLoader\' AND (Status=\'open\' OR Status=\'new\' OR Status=\'stalled\')', 'autodie' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie', 'autodie::exception' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie', 'autodie::exception::system'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie', 'autodie::hints' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie', - 'base' => undef, - 'bigint' => undef, - 'bignum' => undef, - 'bigrat' => undef, - 'constant' => undef, + 'autodie::skip' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie', 'encoding' => undef, 'encoding::warnings' => undef, - 'fields' => undef, - 'if' => undef, 'inc::latest' => undef, - 'lib' => undef, 'parent' => undef, 'perlfaq' => 'https://github.com/perl-doc-cats/perlfaq/issues', - 'threads' => undef, - 'threads::shared' => undef, - 'version' => undef, - 'warnings' => undef, - 'warnings::register' => undef, ); # Create aliases with trailing zeros for $] use diff --git a/Master/tlpkg/tlperl/lib/Module/CoreList/TieHashDelta.pm b/Master/tlpkg/tlperl/lib/Module/CoreList/TieHashDelta.pm index 19e38aaf9c3..b0c133950b2 100644 --- a/Master/tlpkg/tlperl/lib/Module/CoreList/TieHashDelta.pm +++ b/Master/tlpkg/tlperl/lib/Module/CoreList/TieHashDelta.pm @@ -3,7 +3,7 @@ package Module::CoreList::TieHashDelta; use strict; use vars qw($VERSION); -$VERSION = "2.76"; +$VERSION = "3.03"; sub TIEHASH { my ($class, $changed, $removed, $parent) = @_; 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 diff --git a/Master/tlpkg/tlperl/lib/Module/Load.pm b/Master/tlpkg/tlperl/lib/Module/Load.pm index 3a83c386a27..60464847449 100644 --- a/Master/tlpkg/tlperl/lib/Module/Load.pm +++ b/Master/tlpkg/tlperl/lib/Module/Load.pm @@ -1,6 +1,6 @@ package Module::Load; -$VERSION = '0.22'; +$VERSION = '0.24'; use strict; use File::Spec (); @@ -48,7 +48,7 @@ sub _to_file{ my $pm = shift || ''; ## trailing blanks ignored by default. [rt #69886] - my @parts = split /::/, $_, -1; + my @parts = split /::|'/, $_, -1; ## make sure that we can't hop out of @INC shift @parts if @parts && !$parts[0]; diff --git a/Master/tlpkg/tlperl/lib/Module/Load/Conditional.pm b/Master/tlpkg/tlperl/lib/Module/Load/Conditional.pm index 39dccf1ce2b..342371f8794 100644 --- a/Master/tlpkg/tlperl/lib/Module/Load/Conditional.pm +++ b/Master/tlpkg/tlperl/lib/Module/Load/Conditional.pm @@ -11,6 +11,8 @@ use File::Spec (); use FileHandle (); use version; +use Module::Metadata (); + use constant ON_VMS => $^O eq 'VMS'; BEGIN { @@ -18,7 +20,7 @@ BEGIN { $FIND_VERSION $ERROR $CHECK_INC_HASH]; use Exporter; @ISA = qw[Exporter]; - $VERSION = '0.46'; + $VERSION = '0.54'; $VERBOSE = 0; $DEPRECATED = 0; $FIND_VERSION = 1; @@ -137,7 +139,7 @@ uptodate will always be true if the module was found. If no parsable version was found in the module, uptodate will also be true, since C<check_install> had no way to verify clearly. -See also C<$Module::Load::Conditional::DEPRECATED>, which affects +See also C<$Module::Load::Conditional::DEPRECATED>, which affects the outcome of this value. =back @@ -168,8 +170,8 @@ sub check_install { } my $file = File::Spec->catfile( split /::/, $args->{module} ) . '.pm'; - my $file_inc = File::Spec::Unix->catfile( - split /::/, $args->{module} + my $file_inc = File::Spec::Unix->catfile( + split /::/, $args->{module} ) . '.pm'; ### where we store the return value ### @@ -178,59 +180,59 @@ sub check_install { version => undef, uptodate => undef, }; - + my $filename; ### check the inc hash if we're allowed to if( $CHECK_INC_HASH ) { - $filename = $href->{'file'} = + $filename = $href->{'file'} = $INC{ $file_inc } if defined $INC{ $file_inc }; ### find the version by inspecting the package if( defined $filename && $FIND_VERSION ) { no strict 'refs'; - $href->{version} = ${ "$args->{module}"."::VERSION" }; + $href->{version} = ${ "$args->{module}"."::VERSION" }; } - } + } ### we didnt find the filename yet by looking in %INC, ### so scan the dirs unless( $filename ) { DIR: for my $dir ( @INC ) { - + my $fh; - + if ( ref $dir ) { ### @INC hook -- we invoke it and get the filehandle back ### this is actually documented behaviour as of 5.8 ;) my $existed_in_inc = $INC{$file_inc}; - + if (UNIVERSAL::isa($dir, 'CODE')) { ($fh) = $dir->($dir, $file); - + } elsif (UNIVERSAL::isa($dir, 'ARRAY')) { ($fh) = $dir->[0]->($dir, $file, @{$dir}{1..$#{$dir}}) - + } elsif (UNIVERSAL::can($dir, 'INC')) { ($fh) = $dir->INC($file); } - + if (!UNIVERSAL::isa($fh, 'GLOB')) { warn loc(q[Cannot open file '%1': %2], $file, $!) if $args->{verbose}; next; } - + $filename = $INC{$file_inc} || $file; delete $INC{$file_inc} if not $existed_in_inc; - + } else { $filename = File::Spec->catfile($dir, $file); next unless -e $filename; - + $fh = new FileHandle; if (!$fh->open($filename)) { warn loc(q[Cannot open file '%1': %2], $file, $!) @@ -238,45 +240,31 @@ sub check_install { next; } } - + ### store the directory we found the file in $href->{dir} = $dir; - + ### files need to be in unix format under vms, ### or they might be loaded twice $href->{file} = ON_VMS ? VMS::Filespec::unixify( $filename ) : $filename; - - ### user wants us to find the version from files - if( $FIND_VERSION ) { - - my $in_pod = 0; - while ( my $line = <$fh> ) { - - ### stolen from EU::MM_Unix->parse_version to address - ### #24062: "Problem with CPANPLUS 0.076 misidentifying - ### versions after installing Text::NSP 1.03" where a - ### VERSION mentioned in the POD was found before - ### the real $VERSION declaration. - $in_pod = $line =~ /^=(?!cut)/ ? 1 : - $line =~ /^=cut/ ? 0 : - $in_pod; - next if $in_pod; - - ### try to find a version declaration in this string. - my $ver = __PACKAGE__->_parse_version( $line ); - - if( defined $ver ) { - $href->{version} = $ver; - - last DIR; - } - } + + ### if we don't need the version, we're done + last DIR unless $FIND_VERSION; + + ### otherwise, the user wants us to find the version from files + my $mod_info = Module::Metadata->new_from_handle( $fh, $filename ); + my $ver = $mod_info->version( $args->{module} ); + + if( defined $ver ) { + $href->{version} = $ver; + + last DIR; } } } - + ### if we couldn't find the file, return undef ### return unless defined $href->{file}; @@ -294,7 +282,7 @@ sub check_install { } else { ### don't warn about the 'not numeric' stuff ### local $^W; - + ### use qv(), as it will deal with developer release number ### ie ones containing _ as well. This addresses bug report ### #29348: Version compare logic doesn't handle alphas? @@ -308,19 +296,19 @@ sub check_install { eval { - $href->{uptodate} = + $href->{uptodate} = version->new( $args->{version} ) <= version->new( $href->{version} ) - ? 1 + ? 1 : 0; }; } - if ( $DEPRECATED and version->new($]) >= version->new('5.011') ) { + if ( $DEPRECATED and "$]" >= 5.011 ) { require Module::CoreList; require Config; - $href->{uptodate} = 0 if + $href->{uptodate} = 0 if exists $Module::CoreList::version{ 0+$] }{ $args->{module} } and Module::CoreList::is_deprecated( $args->{module} ) and $Config::Config{privlibexp} eq $href->{dir}; @@ -329,67 +317,6 @@ sub check_install { return $href; } -sub _parse_version { - my $self = shift; - my $str = shift or return; - my $verbose = shift || 0; - - ### skip lines which doesn't contain VERSION - return unless $str =~ /VERSION/; - - ### skip commented out lines, they won't eval to anything. - return if $str =~ /^\s*#/; - - ### the following regexp & eval statement comes from the - ### ExtUtils::MakeMaker source (EU::MM_Unix->parse_version) - ### Following #18892, which tells us the original - ### regex breaks under -T, we must modify it so - ### it captures the entire expression, and eval /that/ - ### rather than $_, which is insecure. - my $taint_safe_str = do { $str =~ /(^.*$)/sm; $1 }; - - if( $str =~ /(?<!\\)([\$*])(([\w\:\']*)\bVERSION)\b.*\=/ ) { - - print "Evaluating: $str\n" if $verbose; - - ### this creates a string to be eval'd, like: - # package Module::Load::Conditional::_version; - # no strict; - # - # local $VERSION; - # $VERSION=undef; do { - # use version; $VERSION = qv('0.0.3'); - # }; $VERSION - - my $eval = qq{ - package Module::Load::Conditional::_version; - no strict; - - local $1$2; - \$$2=undef; do { - $taint_safe_str - }; \$$2 - }; - - print "Evaltext: $eval\n" if $verbose; - - my $result = do { - local $^W = 0; - eval($eval); - }; - - - my $rv = defined $result ? $result : '0.0'; - - print( $@ ? "Error: $@\n" : "Result: $rv\n" ) if $verbose; - - return $rv; - } - - ### unable to find a version in this string - return; -} - =head2 $bool = can_load( modules => { NAME => VERSION [,NAME => VERSION] }, [verbose => BOOL, nocache => BOOL] ) C<can_load> will take a list of modules, optionally with version @@ -475,10 +402,10 @@ sub can_load { ### ### Update from JPeacock: apparently qv() and version->new ### are different things, and we *must* use version->new - ### here, or things like #30056 might start happening + ### here, or things like #30056 might start happening if ( !$args->{nocache} && defined $CACHE->{$mod}->{usable} - && (version->new( $CACHE->{$mod}->{version}||0 ) + && (version->new( $CACHE->{$mod}->{version}||0 ) >= version->new( $href->{$mod} ) ) ) { $error = loc( q[Already tried to use '%1', which was unsuccessful], $mod); @@ -568,7 +495,7 @@ sub requires { } my $lib = join " ", map { qq["-I$_"] } @INC; - my $cmd = qq[$^X $lib -M$who -e"print(join(qq[\\n],keys(%INC)))"]; + my $cmd = qq["$^X" $lib -M$who -e"print(join(qq[\\n],keys(%INC)))"]; return sort grep { !/^$who$/ } @@ -596,12 +523,12 @@ The default is 0; =head2 $Module::Load::Conditional::FIND_VERSION This controls whether Module::Load::Conditional will try to parse -(and eval) the version from the module you're trying to load. +(and eval) the version from the module you're trying to load. If you don't wish to do this, set this variable to C<false>. Understand then that version comparisons are not possible, and Module::Load::Conditional can not tell you what module version you have installed. -This may be desirable from a security or performance point of view. +This may be desirable from a security or performance point of view. Note that C<$FIND_VERSION> code runs safely under C<taint mode>. The default is 1; @@ -631,9 +558,9 @@ C<undef>. =head2 $Module::Load::Conditional::DEPRECATED -This controls whether C<Module::Load::Conditional> checks if +This controls whether C<Module::Load::Conditional> checks if a dual-life core module has been deprecated. If this is set to -true C<check_install> will return false to C<uptodate>, if +true C<check_install> will return false to C<uptodate>, if a dual-life module is found to be loaded from C<$Config{privlibexp}> The default is 0; @@ -652,7 +579,7 @@ This module by Jos Boumans E<lt>kane@cpan.orgE<gt>. =head1 COPYRIGHT -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =cut diff --git a/Master/tlpkg/tlperl/lib/Module/Metadata.pm b/Master/tlpkg/tlperl/lib/Module/Metadata.pm index e52a0e24968..e3c25049460 100644 --- a/Master/tlpkg/tlperl/lib/Module/Metadata.pm +++ b/Master/tlpkg/tlperl/lib/Module/Metadata.pm @@ -11,7 +11,7 @@ package Module::Metadata; use strict; use vars qw($VERSION); -$VERSION = '1.000009'; +$VERSION = '1.000011'; $VERSION = eval $VERSION; use Carp qw/croak/; @@ -61,7 +61,6 @@ my $VERS_REGEXP = qr{ # match a VERSION definition =[^=~] # = but not ==, nor =~ }x; - sub new_from_file { my $class = shift; my $filename = File::Spec->rel2abs( shift ); @@ -219,7 +218,7 @@ sub new_from_module { # separating into primary & alternative candidates my( %prime, %alt ); foreach my $file (@files) { - my $mapped_filename = File::Spec->abs2rel( $file, $dir ); + my $mapped_filename = File::Spec::Unix->abs2rel( $file, $dir ); my @path = split( /\//, $mapped_filename ); (my $prime_package = join( '::', @path )) =~ s/\.pm$//; @@ -232,10 +231,12 @@ sub new_from_module { my $version = $pm_info->version( $package ); + $prime_package = $package if lc($prime_package) eq lc($package); if ( $package eq $prime_package ) { if ( exists( $prime{$package} ) ) { croak "Unexpected conflict in '$package'; multiple versions found.\n"; } else { + $mapped_filename = "$package.pm" if lc("$package.pm") eq lc($mapped_filename); $prime{$package}{file} = $mapped_filename; $prime{$package}{version} = $version if defined( $version ); } @@ -420,7 +421,7 @@ sub _parse_version_expression { my $line = shift; my( $sig, $var, $pkg ); - if ( $line =~ $VERS_REGEXP ) { + if ( $line =~ /$VERS_REGEXP/o ) { ( $sig, $var, $pkg ) = $2 ? ( $1, $2, $3 ) : ( $4, $5, $6 ); if ( $pkg ) { $pkg = ($pkg eq '::') ? 'main' : $pkg; @@ -438,9 +439,49 @@ sub _parse_file { my $fh = IO::File->new( $filename ) or croak( "Can't open '$filename': $!" ); + $self->_handle_bom($fh, $filename); + $self->_parse_fh($fh); } +# Look for a UTF-8/UTF-16BE/UTF-16LE BOM at the beginning of the stream. +# If there's one, then skip it and set the :encoding layer appropriately. +sub _handle_bom { + my ($self, $fh, $filename) = @_; + + my $pos = $fh->getpos; + return unless defined $pos; + + my $buf = ' ' x 2; + my $count = $fh->read( $buf, length $buf ); + return unless defined $count and $count >= 2; + + my $encoding; + if ( $buf eq "\x{FE}\x{FF}" ) { + $encoding = 'UTF-16BE'; + } elsif ( $buf eq "\x{FF}\x{FE}" ) { + $encoding = 'UTF-16LE'; + } elsif ( $buf eq "\x{EF}\x{BB}" ) { + $buf = ' '; + $count = $fh->read( $buf, length $buf ); + if ( defined $count and $count >= 1 and $buf eq "\x{BF}" ) { + $encoding = 'UTF-8'; + } + } + + if ( defined $encoding ) { + if ( "$]" >= 5.008 ) { + # $fh->binmode requires perl 5.10 + binmode( $fh, ":encoding($encoding)" ); + } + } else { + $fh->setpos($pos) + or croak( sprintf "Can't reset position to the top of '$filename'" ); + } + + return $encoding; +} + sub _parse_fh { my ($self, $fh) = @_; @@ -454,16 +495,21 @@ sub _parse_fh { my $line_num = $.; chomp( $line ); - next if $line =~ /^\s*#/; - $in_pod = ($line =~ /^=(?!cut)/) ? 1 : ($line =~ /^=cut/) ? 0 : $in_pod; - - # Would be nice if we could also check $in_string or something too - last if !$in_pod && $line =~ /^__(?:DATA|END)__$/; + # From toke.c : any line that begins by "=X", where X is an alphabetic + # character, introduces a POD segment. + my $is_cut; + if ( $line =~ /^=([a-zA-Z].*)/ ) { + my $cmd = $1; + # Then it goes back to Perl code for "=cutX" where X is a non-alphabetic + # character (which includes the newline, but here we chomped it away). + $is_cut = $cmd =~ /^cut(?:[^a-zA-Z]|$)/; + $in_pod = !$is_cut; + } - if ( $in_pod || $line =~ /^=cut/ ) { + if ( $in_pod ) { - if ( $line =~ /^=head\d\s+(.+)\s*$/ ) { + if ( $line =~ /^=head[1-4]\s+(.+)\s*$/ ) { push( @pod, $1 ); if ( $self->{collect_pod} && length( $pod_data ) ) { $pod{$pod_sect} = $pod_data; @@ -471,25 +517,37 @@ sub _parse_fh { } $pod_sect = $1; - } elsif ( $self->{collect_pod} ) { $pod_data .= "$line\n"; } - } else { + } elsif ( $is_cut ) { + if ( $self->{collect_pod} && length( $pod_data ) ) { + $pod{$pod_sect} = $pod_data; + $pod_data = ''; + } $pod_sect = ''; - $pod_data = ''; + + } else { + + # Skip comments in code + next if $line =~ /^\s*#/; + + # Would be nice if we could also check $in_string or something too + last if $line =~ /^__(?:DATA|END)__$/; # parse $line to see if it's a $VERSION declaration my( $vers_sig, $vers_fullname, $vers_pkg ) = - $self->_parse_version_expression( $line ); + ($line =~ /VERSION/) + ? $self->_parse_version_expression( $line ) + : (); - if ( $line =~ $PKG_REGEXP ) { + if ( $line =~ /$PKG_REGEXP/o ) { $pkg = $1; push( @pkgs, $pkg ) unless grep( $pkg eq $_, @pkgs ); - $vers{$pkg} = (defined $2 ? $2 : undef) unless exists( $vers{$pkg} ); + $vers{$pkg} = $2 unless exists( $vers{$pkg} ); $need_vers = defined $2 ? 0 : 1; # VERSION defined with full package spec, i.e. $Module::VERSION @@ -500,14 +558,6 @@ sub _parse_fh { unless ( defined $vers{$vers_pkg} && length $vers{$vers_pkg} ) { $vers{$vers_pkg} = $self->_evaluate_version_line( $vers_sig, $vers_fullname, $line ); - } else { - # Warn unless the user is using the "$VERSION = eval - # $VERSION" idiom (though there are probably other idioms - # that we should watch out for...) - warn <<"EOM" unless $line =~ /=\s*eval/; -Package '$vers_pkg' already declared with version '$vers{$vers_pkg}', -ignoring subsequent declaration on line $line_num. -EOM } # first non-comment line in undeclared package main is VERSION @@ -533,12 +583,7 @@ EOM unless ( defined $vers{$pkg} && length $vers{$pkg} ) { $vers{$pkg} = $v; - } else { - warn <<"EOM"; -Package '$pkg' already declared with version '$vers{$pkg}' -ignoring new version '$v' on line $line_num. -EOM - } + } } @@ -730,27 +775,43 @@ without executing unsafe code. =item C<< new_from_file($filename, collect_pod => 1) >> -Construct a C<Module::Metadata> object given the path to a file. Takes an -optional argument C<collect_pod> which is a boolean that determines whether POD -data is collected and stored for reference. POD data is not collected by -default. POD headings are always collected. Returns undef if the filename -does not exist. +Constructs a C<Module::Metadata> object given the path to a file. Returns +undef if the filename does not exist. + +C<collect_pod> is a optional boolean argument that determines whether POD +data is collected and stored for reference. POD data is not collected by +default. POD headings are always collected. + +If the file begins by an UTF-8, UTF-16BE or UTF-16LE byte-order mark, then +it is skipped before processing, and the content of the file is also decoded +appropriately starting from perl 5.8. =item C<< new_from_handle($handle, $filename, collect_pod => 1) >> This works just like C<new_from_file>, except that a handle can be provided -as the first argument. Note that there is no validation to confirm that the -handle is a handle or something that can act like one. Passing something that -isn't a handle will cause a exception when trying to read from it. The -C<filename> argument is mandatory or undef will be returned. +as the first argument. + +Note that there is no validation to confirm that the handle is a handle or +something that can act like one. Passing something that isn't a handle will +cause a exception when trying to read from it. The C<filename> argument is +mandatory or undef will be returned. + +You are responsible for setting the decoding layers on C<$handle> if +required. =item C<< new_from_module($module, collect_pod => 1, inc => \@dirs) >> -Construct a C<Module::Metadata> object given a module or package name. In addition -to accepting the C<collect_pod> argument as described above, this -method accepts a C<inc> argument which is a reference to an array of -of directories to search for the module. If none are given, the -default is @INC. Returns undef if the module cannot be found. +Constructs a C<Module::Metadata> object given a module or package name. +Returns undef if the module cannot be found. + +In addition to accepting the C<collect_pod> argument as described above, +this method accepts a C<inc> argument which is a reference to an array of +directories to search for the module. If none are given, the default is +@INC. + +If the file that contains the module begins by an UTF-8, UTF-16BE or +UTF-16LE byte-order mark, then it is skipped before processing, and the +content of the file is also decoded appropriately starting from perl 5.8. =item C<< find_module_by_name($module, \@dirs) >> @@ -897,7 +958,7 @@ Original code from Module::Build::ModuleInfo by Ken Williams Released as Module::Metadata by Matt S Trout (mst) <mst@shadowcat.co.uk> with assistance from David Golden (xdg) <dagolden@cpan.org>. -=head1 COPYRIGHT +=head1 COPYRIGHT & LICENSE Original code Copyright (c) 2001-2011 Ken Williams. Additional code Copyright (c) 2010-2011 Matt Trout and David Golden. diff --git a/Master/tlpkg/tlperl/lib/Module/Pluggable.pm b/Master/tlpkg/tlperl/lib/Module/Pluggable.pm index 55cf7269e70..9e7962efab7 100644 --- a/Master/tlpkg/tlperl/lib/Module/Pluggable.pm +++ b/Master/tlpkg/tlperl/lib/Module/Pluggable.pm @@ -1,15 +1,18 @@ package Module::Pluggable; use strict; -use vars qw($VERSION); +use vars qw($VERSION $FORCE_SEARCH_ALL_PATHS); use Module::Pluggable::Object; +use if $] > 5.017, 'deprecate'; + # ObQuote: # Bob Porter: Looks like you've been missing a lot of work lately. # Peter Gibbons: I wouldn't say I've been missing it, Bob! -$VERSION = '4.0'; +$VERSION = '4.7'; +$FORCE_SEARCH_ALL_PATHS = 0; sub import { my $class = shift; @@ -22,6 +25,7 @@ sub import { my ($package) = $opts{'package'} || $pkg; $opts{filename} = $file; $opts{package} = $package; + $opts{force_search_all_paths} = $FORCE_SEARCH_ALL_PATHS unless exists $opts{force_search_all_paths}; my $finder = Module::Pluggable::Object->new(%opts); @@ -152,9 +156,8 @@ Optionally it instantiates those classes for you. =head1 ADVANCED USAGE - Alternatively, if you don't want to use 'plugins' as the method ... - + package MyClass; use Module::Pluggable sub_name => 'foo'; @@ -227,6 +230,21 @@ and then later ... my @filters = $self->filters; my @plugins = $self->plugins; + +=head1 PLUGIN SEARCHING + +Every time you call 'plugins' the whole search path is walked again. This allows +for dynamically loading plugins even at run time. However this can get expensive +and so if you don't expect to want to add new plugins at run time you could do + + + package Foo; + use strict; + use Module::Pluggable sub_name => '_plugins'; + + our @PLUGINS; + sub plugins { @PLUGINS ||= shift->_plugins } + 1; =head1 INNER PACKAGES @@ -307,6 +325,62 @@ the extensions F<.swp> or F<.swo>, or files beginning with F<.#>. Setting C<include_editor_junk> changes C<Module::Pluggable> so it does not ignore any files it finds. +=head2 follow_symlinks + +Whether, when searching directories, to follow symlinks. + +Defaults to 1 i.e do follow symlinks. + +=head2 min_depth, max_depth + +This will allow you to set what 'depth' of plugin will be allowed. + +So, for example, C<MyClass::Plugin::Foo> will have a depth of 3 and +C<MyClass::Plugin::Foo::Bar> will have a depth of 4 so to only get the former +(i.e C<MyClass::Plugin::Foo>) do + + package MyClass; + use Module::Pluggable max_depth => 3; + +and to only get the latter (i.e C<MyClass::Plugin::Foo::Bar>) + + package MyClass; + use Module::Pluggable min_depth => 4; + + +=head1 TRIGGERS + +Various triggers can also be passed in to the options. + +If any of these triggers return 0 then the plugin will not be returned. + +=head2 before_require <plugin> + +Gets passed the plugin name. + +If 0 is returned then this plugin will not be required either. + +=head2 on_require_error <plugin> <err> + +Gets called when there's an error on requiring the plugin. + +Gets passed the plugin name and the error. + +The default on_require_error handler is to C<carp> the error and return 0. + +=head2 on_instantiate_error <plugin> <err> + +Gets called when there's an error on instantiating the plugin. + +Gets passed the plugin name and the error. + +The default on_instantiate_error handler is to C<carp> the error and return 0. + +=head2 after_require <plugin> + +Gets passed the plugin name. + +If 0 is returned then this plugin will be required but not returned as a plugin. =head1 METHODs @@ -319,7 +393,29 @@ search_path. $self->search_path( add => "New::Path" ); # add $self->search_path( new => "New::Path" ); # replace +=head1 BEHAVIOUR UNDER TEST ENVIRONMENT +In order to make testing reliable we exclude anything not from blib if blib.pm is +in %INC. + +However if the module being tested used another module that itself used C<Module::Pluggable> +then the second module would fail. This was fixed by checking to see if the caller +had (^|/)blib/ in their filename. + +There's an argument that this is the wrong behaviour and that modules should explicitly +trigger this behaviour but that particular code has been around for 7 years now and I'm +reluctant to change the default behaviour. + +You can now (as of version 4.1) force Module::Pluggable to look outside blib in a test environment by doing either + + require Module::Pluggable; + $Module::Pluggable::FORCE_SEARCH_ALL_PATHS = 1; + import Module::Pluggable; + +or + + use Module::Pluggable force_search_all_paths => 1; + =head1 FUTURE PLANS @@ -332,6 +428,12 @@ Recently tried fixed to find inner packages and to make it However suggestions (and patches) are welcome. +=head1 DEVELOPMENT + +The master repo for this module is at + +https://github.com/simonwistow/Module-Pluggable + =head1 AUTHOR Simon Wistow <simon@thegestalt.org> diff --git a/Master/tlpkg/tlperl/lib/Module/Pluggable/Object.pm b/Master/tlpkg/tlperl/lib/Module/Pluggable/Object.pm index e0ee993075d..6b1d265456c 100644 --- a/Master/tlpkg/tlperl/lib/Module/Pluggable/Object.pm +++ b/Master/tlpkg/tlperl/lib/Module/Pluggable/Object.pm @@ -4,11 +4,13 @@ use strict; use File::Find (); use File::Basename; use File::Spec::Functions qw(splitdir catdir curdir catfile abs2rel); -use Carp qw(croak carp); +use Carp qw(croak carp confess); use Devel::InnerPackage; use vars qw($VERSION); -$VERSION = '3.9'; +use if $] > 5.017, 'deprecate'; + +$VERSION = '4.6'; sub new { @@ -25,64 +27,74 @@ sub new { sub plugins { - my $self = shift; - - # override 'require' - $self->{'require'} = 1 if $self->{'inner'}; - - my $filename = $self->{'filename'}; - my $pkg = $self->{'package'}; - - # Get the exception params instantiated - $self->_setup_exceptions; - - # automatically turn a scalar search path or namespace into a arrayref - for (qw(search_path search_dirs)) { - $self->{$_} = [ $self->{$_} ] if exists $self->{$_} && !ref($self->{$_}); - } - - # default search path is '<Module>::<Name>::Plugin' - $self->{'search_path'} = ["${pkg}::Plugin"] unless $self->{'search_path'}; + my $self = shift; + my @args = @_; + # override 'require' + $self->{'require'} = 1 if $self->{'inner'}; - #my %opts = %$self; + my $filename = $self->{'filename'}; + my $pkg = $self->{'package'}; + # Get the exception params instantiated + $self->_setup_exceptions; - # check to see if we're running under test - my @SEARCHDIR = exists $INC{"blib.pm"} && defined $filename && $filename =~ m!(^|/)blib/! ? grep {/blib/} @INC : @INC; + # automatically turn a scalar search path or namespace into a arrayref + for (qw(search_path search_dirs)) { + $self->{$_} = [ $self->{$_} ] if exists $self->{$_} && !ref($self->{$_}); + } - # add any search_dir params - unshift @SEARCHDIR, @{$self->{'search_dirs'}} if defined $self->{'search_dirs'}; + # default search path is '<Module>::<Name>::Plugin' + $self->{'search_path'} ||= ["${pkg}::Plugin"]; + # default error handler + $self->{'on_require_error'} ||= sub { my ($plugin, $err) = @_; carp "Couldn't require $plugin : $err"; return 0 }; + $self->{'on_instantiate_error'} ||= sub { my ($plugin, $err) = @_; carp "Couldn't instantiate $plugin: $err"; return 0 }; - my @plugins = $self->search_directories(@SEARCHDIR); - push(@plugins, $self->handle_innerpackages($_)) for @{$self->{'search_path'}}; + # default whether to follow symlinks + $self->{'follow_symlinks'} = 1 unless exists $self->{'follow_symlinks'}; - # push @plugins, map { print STDERR "$_\n"; $_->require } list_packages($_) for (@{$self->{'search_path'}}); - - # return blank unless we've found anything - return () unless @plugins; + # check to see if we're running under test + my @SEARCHDIR = exists $INC{"blib.pm"} && defined $filename && $filename =~ m!(^|/)blib/! && !$self->{'force_search_all_paths'} ? grep {/blib/} @INC : @INC; + # add any search_dir params + unshift @SEARCHDIR, @{$self->{'search_dirs'}} if defined $self->{'search_dirs'}; + # set our @INC up to include and prefer our search_dirs if necessary + my @tmp = @INC; + unshift @tmp, @{$self->{'search_dirs'} || []}; + local @INC = @tmp if defined $self->{'search_dirs'}; - # remove duplicates - # probably not necessary but hey ho - my %plugins; - for(@plugins) { - next unless $self->_is_legit($_); - $plugins{$_} = 1; - } + my @plugins = $self->search_directories(@SEARCHDIR); + push(@plugins, $self->handle_innerpackages($_)) for @{$self->{'search_path'}}; + + # return blank unless we've found anything + return () unless @plugins; + + # remove duplicates + # probably not necessary but hey ho + my %plugins; + for(@plugins) { + next unless $self->_is_legit($_); + $plugins{$_} = 1; + } - # are we instantiating or requring? - if (defined $self->{'instantiate'}) { - my $method = $self->{'instantiate'}; - return map { ($_->can($method)) ? $_->$method(@_) : () } keys %plugins; - } else { - # no? just return the names - return keys %plugins; + # are we instantiating or requring? + if (defined $self->{'instantiate'}) { + my $method = $self->{'instantiate'}; + my @objs = (); + foreach my $package (sort keys %plugins) { + next unless $package->can($method); + my $obj = eval { $package->$method(@_) }; + $self->{'on_instantiate_error'}->($package, $@) if $@; + push @objs, $obj if $obj; } - - + return @objs; + } else { + # no? just return the names + my @objs= sort keys %plugins; + return @objs; + } } sub _setup_exceptions { @@ -127,12 +139,16 @@ sub _is_legit { my %except = %{$self->{_exceptions}->{except_hash}||{}}; my $only = $self->{_exceptions}->{only}; my $except = $self->{_exceptions}->{except}; + my $depth = () = split '::', $plugin, -1; return 0 if (keys %only && !$only{$plugin} ); return 0 unless (!defined $only || $plugin =~ m!$only! ); return 0 if (keys %except && $except{$plugin} ); return 0 if (defined $except && $plugin =~ m!$except! ); + + return 0 if defined $self->{max_depth} && $depth>$self->{max_depth}; + return 0 if defined $self->{min_depth} && $depth<$self->{min_depth}; return 1; } @@ -193,7 +209,7 @@ sub search_paths { next if ($in_pod || $line =~ /^=cut/); # skip pod text next if $line =~ /^\s*#/; # and comments if ( $line =~ m/^\s*package\s+(.*::)?($name)\s*;/i ) { - @pkg_dirs = split /::/, $1; + @pkg_dirs = split /::/, $1 if defined $1;; $name = $2; last; } @@ -220,10 +236,7 @@ sub search_paths { next unless $plugin =~ m!(?:[a-z\d]+)[a-z\d]!i; - my $err = $self->handle_finding_plugin($plugin); - carp "Couldn't require $plugin : $err" if $err; - - push @plugins, $plugin; + $self->handle_finding_plugin($plugin, \@plugins) } # now add stuff that may have been in package @@ -252,12 +265,33 @@ sub _is_editor_junk { } sub handle_finding_plugin { - my $self = shift; - my $plugin = shift; - - return unless (defined $self->{'instantiate'} || $self->{'require'}); + my $self = shift; + my $plugin = shift; + my $plugins = shift; + my $no_req = shift || 0; + return unless $self->_is_legit($plugin); - $self->_require($plugin); + unless (defined $self->{'instantiate'} || $self->{'require'}) { + push @$plugins, $plugin; + return; + } + + $self->{before_require}->($plugin) || return if defined $self->{before_require}; + unless ($no_req) { + my $tmp = $@; + my $res = eval { $self->_require($plugin) }; + my $err = $@; + $@ = $tmp; + if ($err) { + if (defined $self->{on_require_error}) { + $self->{on_require_error}->($plugin, $err) || return; + } else { + return; + } + } + } + $self->{after_require}->($plugin) || return if defined $self->{after_require}; + push @$plugins, $plugin; } sub find_files { @@ -273,7 +307,8 @@ sub find_files { { # for the benefit of perl 5.6.1's Find, localize topic local $_; File::Find::find( { no_chdir => 1, - wanted => sub { + follow => $self->{'follow_symlinks'}, + wanted => sub { # Inlined from File::Find::Rule C< name => '*.pm' > return unless $File::Find::name =~ /$file_regex/; (my $path = $File::Find::name) =~ s#^\\./##; @@ -294,10 +329,7 @@ sub handle_innerpackages { my @plugins; foreach my $plugin (Devel::InnerPackage::list_packages($path)) { - my $err = $self->handle_finding_plugin($plugin); - #next if $err; - #next unless $INC{$plugin}; - push @plugins, $plugin; + $self->handle_finding_plugin($plugin, \@plugins, 1); } return @plugins; @@ -305,11 +337,11 @@ sub handle_innerpackages { sub _require { - my $self = shift; - my $pack = shift; - local $@; + my $self = shift; + my $pack = shift; eval "CORE::require $pack"; - return $@; + die ($@) if $@; + return 1; } |