use Net::NNTP;
$BaseDir = '/usr/usenet';
chdir($BaseDir) or die "Could not cd to $BaseDir\n";
open(GROUPLIST, 'grouplist.txt') or die "Could not open grouplist.txt\n";
while(<GROUPLIST>) {
$Line = $_; chomp($Line);
if($Line eq '') { next }; if(substr($Line, 0, 1) eq '#') { next }; push(@Groups, $Line)
}
$NntpPtr = Net::NNTP->new('news.server.com');
foreach $GroupLine (@Groups) {
($GroupName, $GroupExp) = split(/\s/, $GroupLine, 2);
unless(-e "$BaseDir/$GroupName") {
unless(mkdir("$BaseDir/$GroupName", 0755))
{ die "Could not make $BaseDir/$GroupName\n" }
}
chdir("$BaseDir/$GroupName") or die "Couldn't chdir to $GroupName\n";
@AllInDir = <*>; @RevSortedAllInDir = reverse(sort(@AllInDir));
$LenArr = @RevSortedAllInDir;
if($LenArr > 0) { $NumLastInDir = $RevSortedAllInDir[0] }
else { $NumLastInDir = 0 }
($NumArt, $NumFirst, $NumLast, $XGroupName) =
$NntpPtr->group($GroupName);
if($NumLast == $NumLastInDir) { next } if($NumLast < $NumLastInDir)
{ die "In $GroupName, the last number was $NumLast, but the " .
" last number in the directory was $NumLastInDir\n" }
if($NumLastInDir == 0) { $GetArtNum = $NumFirst }
else { $GetArtNum = $NumLastInDir + 1 }
while(1) { $ArtRef = $NntpPtr->article($GetArtNum);
@ArtArr = @$ArtRef; $ArtArrLen = @ArtArr;
if($ArtArrLen > 0 ) { open(OUT, ">$GetArtNum") or
die "Could not create $GroupName/$GetArtNum\n";
print OUT @$ArtRef; close(OUT);
}
if($GetArtNum == $NumLast) { last }
$GetArtNum += 1; }
}
$NntpPtr->quit;
exit;