#!/usr/bin/perl -w use strict; use warnings; # $Id: $ use version; use CPAN::Config; use IO::Uncompress::Gunzip qw(gunzip $GunzipError) ; my $HEAD = <<__HEAD__; --- comment: | Duplicates \$Id: _stro_invalid_cpan_duplicates.yml 209 2010-03-21 13:41:11Z stro \$ match: distribution: | ^(?x: .^ # never matches, only purpose is to let things align nicely |========================================================================== | THIS FILE IS GENERATED AUTOMATICALLY, DO NOT EDIT! |========================================================================== __HEAD__ my $FOOT = <<__FOOT__; )| disabled: 1 __FOOT__ my $packages = $CPAN::Config->{'keep_source_where'} . '/modules/02packages.details.txt.gz'; if (open my $PKD, '<', $packages) { binmode($PKD); my $details; if (my $gz = gunzip $PKD => \$details) { close $PKD; my %mnames; # use Data::Dumper; # print Data::Dumper->Dump([\@details]); print $HEAD; foreach (split $/, $details) { if (m!^(.*?)\s+(.*?)\s+\w/\w\w/(.*?)$!) { #A 0.01 A/AD/ADAMK/Module-Install-0.80.tar.gz #AAA::Demo undef J/JW/JWACH/Apache-FastForward-1.1.tar.gz #AAA::eBay undef J/JW/JWACH/Apache-FastForward-1.1.tar.gz my ($module, $version, $path) = ($1, $2, $3); my $name = $path; $name =~ s!(\.tar\.gz)|(\.gz)|(\.zip)$!!x; if ($path =~ m!^(.*?)-v?([\d\.]+)!) { ($name, $version) = ($1, $2); } # Store $mnames{$name}->{$version} = $path . " #" . $module; } } foreach my $name (sort keys %mnames) { if (scalar keys %{ $mnames{$name} } > 1) { my @list = sort { version->parse($b) <=> version->parse($a) } keys %{ $mnames{$name} }; print " |" . $mnames{$name}->{$_}, $/ foreach splice(@list, 1); # skip 1st # print $/; } } print $FOOT; } else { die "gzip failed: $GunzipError $/"; } } else { die "Cannot open $packages: $! $/"; }