#!/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