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

# by Matt Simerson
# version 1.0
# Jan 14, 2009

use strict;
use warnings;

use English qw( -no_match_vars );
use LWP::UserAgent;

use lib 'lib';
use Provision::Unix;
my $prov = Provision::Unix->new( debug => 0 );
my $util = $prov->get_util;

my $module = 'Provision::Unix';
my $version_wanted = latest_on_cpan($module);

my ($version_installed);
eval "require $module" and $version_installed = $module->VERSION;
print "installed version is: $version_installed\n" if $version_installed;

eval "use $module $version_wanted";
if ( ! $EVAL_ERROR ) {
    print "$module is up-to-date.\n";
    exit;
};

print  "installing newer version from CPAN\n";

$util->install_module($module);
exit;

sub latest_on_cpan {
    my $module   = shift;
    my $cpan     = 'http://search.cpan.org/~msimerson/Provision-Unix/';
    my $ua       = LWP::UserAgent->new( timeout => 10);
    my $response = $ua->get($cpan);

    if ( ! $response->is_success ) {
        die $response->status_line;
    }

    my $content = $response->content;

    $module =~ s/::/-/g;  # convert the :: in the module name to -
    #print "searching for $module on CPAN\n";

    my ($version) = $content =~ m/$module-([0-9\.]{3,5})</;
    $version or die "could not find latest version of $module on CPAN\n";
    print "CPAN version is $version\n";
    return $version;
};