Aha! Thanks for the cogent explanation. Along with some advice from bart on the chatterbox, I came up with the following proof-of-concept solution.
#! /usr/local/bin/perl -l package P; sub new { my $class = shift; my $mod = shift; eval "use $mod ()"; my $self = {}; if ($@) { $self->{_time_func} = sub { time }; } else { $self->{_time_func} = sub { Time::HiRes::time() }; } return bless $self, 'P' } package main; my $p = P->new( shift || 'Time::HiRes' ); print $p->{_time_func}->(); sleep 2; print $p->{_time_func}->();
You can run this, and if T::HR is installed, you get fractional times. Pass it junk on the command line, and then T::HR is not loaded (which simulates what happens on an installation that lacks it, or fails to load) and integer seconds come out.
In the real world, the _time_func business will be hidden from the user, they just get back fractional seconds, or not.
• another intruder with the mooring in the heart of the Perl
In reply to Re^2: Importing Time::HiRes::time at run-time (and failing)
by grinder
in thread Importing Time::HiRes::time at run-time (and failing)
by grinder
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |