#!/usr/bin/perl use strict; use warnings; use CPAN; my %needed = ( Some::Module => 1.23, # must have at least version 1.23 Other::Module => 0, # any old version will do ... ); my @need_to_install = (); foreach my $module (keys %needed) { eval "use $module;"; if($@ || eval "${module}::VERSION < $needed{$module}") { push @need_to_install, $module; next; } } CPAN::Shell->install(@need_to_install);