#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
use Pod::Usage;
use LWP::Simple qw/mirror/;
use IO::Zlib;
use ExtUtils::MakeMaker;
my $url = 'http://www.cpan.org/modules/02packages.details.txt.gz';
my $homedir = $ENV{HOME} || eval { require File::HomeDir; File::HomeDir->my_home };
GetOptions(
'h|help' => \my $help,
'verbose' => \my $verbose,
) or pod2usage();
pod2usage() if $help;
&main;exit;
sub main {
my $cachefile = "$homedir/.cpan/sources/modules/02packages.details.txt.gz";
mirror($url, $cachefile) or die "Cannot mirror file";
my $fh = IO::Zlib->new($cachefile, "rb") or die "cannot open $cachefile";
# skip header part
while (my $line = <$fh>) {
last if $line eq "\n";
}
# body part
my %seen;
while (my $line = <$fh>) {
my ($pkg, $version, $dist) = split /\s+/, $line;
next if $version eq 'undef';
next if $seen{$dist}++;
(my $file = $pkg) =~ s!::!/!g;
$file = "${file}.pm";
for my $dir (@INC) {
my $path = "$dir/$file";
next unless -f $path;
my $inst_version = MM->parse_version($path);
if ($inst_version ne $version) {
print "$pkg, $inst_version, $version\n";
}
}
}
}
__END__
=head1 SYNOPSIS
% cpan-outdated