The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use File::Spec;
use autodie;
use CPAN::DistnameInfo;

my $dir = shift or die;
die unless -d $dir;

my %data;

opendir( my $DIR, $dir );

while( my $file = readdir $DIR ) {
  next if $file =~ /^\./ or $file !~ /^perl.+(bz2|gz)$/;
  my $abs = File::Spec->catfile( $dir, $file );
  next unless -l $abs;
  my $link = readlink $abs;
  $link =~ s#^.*/authors/id/##;
  my $d = CPAN::DistnameInfo->new( $link );
  $data{ $d->version }->{ $d->extension} = $link;
}

my %v = map {
    my @v = split(qr/[-._]0*/, $_);
    $v[2] ||= 0;
    $v[3] ||= 'Z';
    ($_ => sprintf '%d.%03d%03d-%s', @v)
} keys %data;

print "{\n";
foreach my $perl ( sort { $v{$a} cmp $v{$b} } keys %data ) {
  print qq!  "$perl" => {\n!;
  print qq!    "$_" => "!, $data{$perl}->{$_}, qq{",\n}
    for sort keys %{ $data{$perl} };
  print "  },\n";
}
print "};\n";

exit 0;