use Net::NNTP; use strict; #use warnings; #use diagnostics; # connection constants use constant SERVER => 'nntp.perl.org'; use constant GROUP => 'perl.cpan.testers'; # group array constants use constant TOTAL => 0; use constant FIRST => 1; use constant LAST => 2; my $email = shift or die 'No email (author) specified'; my $server = Net::NNTP->new( SERVER ) or die 'Cannot connect to server ' . SERVER; my @group = $server->group( GROUP ); my $items = shift || 50; $items = $group[ TOTAL ] if $items > $group[ TOTAL ]; my $start = $group[ LAST ] - $items + 1; my $count = 0; my %stats; $|++; printf "Processing latest %d items out of %d\n\n", $items, $group[ TOTAL ]; for my $id ( $start..$group[ LAST ] ) { print "\r$id..."; # The "From" header must match the email address my $header = $server->head( $id ); next unless grep { /^From:.+\Q$email\E/ } @$header; # Parse the subject for PASS, FAIL, etc my $subject = ( grep { /^Subject:/ } @$header )[ 0 ]; next if $subject =~ /CPAN Upload/; if( $subject =~ /^Subject: ([A-Z]+) / ) { $stats{ $1 }++; $count++; } } $server->quit; printf "Found %d reports\n\n", $count; for my $type ( sort keys %stats ) { printf "%7s: %03d\n", $type, $stats{ $type }; }