Вы можете написать свой собственный модуль
с блэкджеком и проститутками
, чтобы высмеять gettimeofday. По некоторым модификациям Test :: MockTime я писал:
#!/usr/bin/perl
package myMockTime;
use strict;
use warnings;
use Exporter qw(import);
use Time::HiRes();
use Carp;
our @fixed =();
our $accel = 1;
our $otime = Time::HiRes::gettimeofday;
our @EXPORT_OK = qw(
set_fixed_time_of_day
gettimeofday
restore
throttle
);
sub gettimeofday() {
if (@fixed) {
return wantarray ? @fixed : "$fixed[0].$fixed[1]";
}
else {
return $otime + ((Time::HiRes::gettimeofday - $otime) * $accel);
}
}
sub set_fixed_time_of_day {
my ($time1, $time2) = @_;
if (! defined $time1 || ! defined $time2) {
croak('Incorrect usage');
}
@fixed = ($time1, $time2);
}
sub throttle {
my $self = shift @_;
return $accel unless @_;
my $new = shift @_;
$new or croak('Can not set throttle to zero');
$accel = $new;
}
sub restore {
@fixed =();
}
1;
Я думаю, что есть много ошибок и неполную функциональность, работа в этом направлении
вы хотите что-то вроде 'set_fixed_time_of_day' суб? – Suic
Я думал о том, чего хочу. Я хочу иметь возможность остановить время в своем тестовом скрипте. После запуска 'my $ ts = CORE :: time(); set_fixed_time ($ ts); '(или что-то в этом роде)' time() 'и' Time :: HiRes :: gettimeofday() 'будут возвращать одинаковые значения, пока я не буду явно запускать' $ ts ++; set_fixed_time ($ ts); ' – bessarabov