Try:
BEGIN {
# This unless block just seems a little clearer than the
# way you were doing it.
#
unless (eval { require Term::Menus })
{
print "INSTALLING PERL Term::Menus MODULE\n\n";
system("/opt/hp/hadooptools/validation/smoke/cpan.sh Term::Menus
+");
}
}
use Term::Menus;
Explanation: use happens at compile-time, before your check/install code runs. Wrapping it in a BEGIN block "lifts" that code to compile-time.
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'