I wonder if you want a script that calls cpanm. Something like
use App::cpanminus::reporter;
use Getopt::Long;
my %options = ();
my $p = Getopt::Long::Parser->new;
$p->configure('pass_through');
#options specific to cpanr (all optional)
$p->getoptions( \%options, qw(build_dir=s build_logfile=s) );
#options for both cpanm and cpanr
my @new_argv = [@ARGV];
$p->getoptionsfromarray( @new_argv, \%options, qw(verbose|v force quiet|q) );
system( 'cpanm', @ARGV ) == 0 or die "cpanm @ARGV failed: $?";
my $tester = App::cpanminus::reporter->new(%options);
$tester->run();