The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;

use Getopt::Lucid qw( :all );
use WWW::Mechanize;

my $CPAN_DIST_URL = 'http://search.cpan.org/dist/';

my @option_specs = (
    Param('--dist|-d')->required,
    Param('--version|-v'),
);

my $opt = Getopt::Lucid->getopt( \@option_specs );

my $dist_name = $opt->get_dist . $opt->get_version;

print "Looking for $dist_name...\n";

my $output_file = $dist_name . ".tar.gz";

my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->get( $CPAN_DIST_URL . $dist_name );

my $download_url = $mech->find_link( text_regex => qr/download/i );

die "Couldn't find $dist_name\n" unless $download_url;

my $filename = ( split q{/}, $download_url->url )[-1] || $output_file;

print "Downloading $filename\n";

$mech->get( $download_url->url_abs, ':content_file' => $filename);