#!/path/to/perl # This snippet works as expected use strict; use Time::HiRes qw(gettimeofday tv_interval); my $now = [gettimeofday]; sleep 2; # The below produces "Elapsed: 2.01233" print "Elapsed: ", tv_interval($now, [gettimeofday]), "\n"; #### #!/path/to/perl # This snippet *DOES NOT* work as expected use strict; my $toLoad = { 'CGI' => '1', 'Time::HiRes' => 'gettimeofday tv_interval', }; while ( my($module, $args) = each %$toLoad) { my $str = "use $module"; $str .= 'qw(' . $args . ')' if $args ne '1'; eval $str; # also tried eval {}, eval "", etc... } # END while each %$toLoad my $now = [gettimeofday]; sleep 2; # The below produces Elapsed: 0, print "Elapsed: ", tv_interval($now, [gettimeofday]), "\n"; #### #!/path/to/perl use strict; my $obj = {}; # For this example bless($obj, 'main'); # get some data via config and then my $status = $obj->loadPerlModule($configData); # Prints no warnings or errors under strict.. foreach my $module ( keys %$status ) { print "$module status: $status->{$module}\n"; } # This fails.. my $now = [gettimeofday]; sleep 2; # The below produces Elapsed: 0, print "Elapsed: ", tv_interval($now, [gettimeofday]), "\n"; # This succeeds my $newNow = [gettimeofday()]; sleep 2; # The below produces Elapsed: 2.02313, print "Elapsed: ", tv_interval($now, [gettimeofday()]), "\n"; # This is the actual method that loads the module. sub loadPerlModule { my $self = shift; my $modules = $self->asHash(@_); my $return = {}; foreach my $module ( keys %$modules ) { if ( $modules->{ $module } ne '1' ) { eval "use $module " . 'qw(' . $modules->{$module} . ');'; } else { eval "use $module"; } $return->{ $module } = ( $@ ) ? "Failed to use module: $@" : "Module loaded"; $@ = undef; } # END foreach my $module return $return; } # END sub loadPerlModule