use ExtUtils::MakeMaker; eval{require Some::Module}; if ($@) { my $reply = prompt("Some::Module not installed. Install (Y/n)", "Y"); install("Some::Module") unless $reply =~ m/n/i; } sub install { my $module = shift; eval{require CPAN}; die "Aaaaagh! $@\n" if $@; CPAN::Shell->install($module); } WriteMakefile( ... );