The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/home/ivan/bin/perl

use strict;
use warnings;
require 5.008;

use AnnoCPAN::Config 'config.pl';
use AnnoCPAN::DBI;
use Getopt::Long;
use LWP::Simple qw(get);

my $help;
my $verbose;

my $ret = GetOptions (
    help        => \$help,
    verbose     => \$verbose,
);

my $file = shift;
usage() if $help or !$ret or !$file;
    
my $data;
my $fh;
if ($file =~ m|://|) {
    $data = get($file) or die "couldn't get $file\n";
    open $fh, "<", \$data or die "couldn't open data\n"; 
} else {
    open $fh, "<", $file or die "couldn't open $file: $!\n";
}

<$fh>; # skip header line
my ($good, $bad);
while (<$fh>) {
    s/"//g;
    my ($dist_name, $rating, $count) = split /,/;
    my ($dist) = AnnoCPAN::DBI::Dist->retrieve(name => $dist_name);
    unless ($dist) { 
        warn "Couldn't retrieve dist '$dist_name'\n" if $verbose;
        $bad++;
        next;
    }
    $dist->rating($rating * 20);
    $dist->review_count($count);
    $dist->update;
    $good++;
}

print "Rated $good distributions; $bad not found\n";


sub usage {
    print <<END;
ac_cpanratings [options] <ratings_file>
Options:
    --help      -h
    --verbose   -v
<ratings_file> may be a local file or a URL.
END
    exit;
}