The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


  Time::Travel - provide a tool to travel across the time for a given


use Time::Travel;

# initialize

my $tstr = localtime;

my $time = new Time::Travel($tstr); # or

my @tlst = localtime;

my $time = new Time;:Travel(@tlst); # or

my $time = new Time::Travel(28,14,11,19,05,2003);

my $t1 = $time->land; # source

print $t1;

$time->travel(['6mo','5dy','4hr']); # travel

print $time->land();


The Time::Travel module produces a slim, quick method to slide across the time scale over a given period (NOT a given date).

It is much simpler and shorter than the Date::Manip and Time::Piece. It creates an object which is in fact a reference to a six-member array. It is possible then to travel using this object and to land (print resulting time).


The following methods are defined in the module:

new(@TIME | $TIME);

The constructor returns a newly created object which points at a six-member array. If the argument is a CTIME string as returned by localtime() in scalar context, it is parsed into such array using strptime() from Date::Parse. If the argument is a nine-member array as returned by localtime() in list context or any other larger than six-member list, first six members are taken. The month is considered to be in 0..11 range as it is for localtime() and the year is rebuilt into 4-digits number in case it is found to be less than 200. If the given array has less than six members then it is considered that higher precision units are omitted subsequently (i.e. if there are only 4 members they are treated as hour, day, month and year).

The created array is then validated using internal validate() function. If the validation fails, a warning is given and an undefined object is returned.

travel([Time Distance]);

This main method shifts the time stored in the object by the given margin which is passed as an array reference. The members of the margin array must be of Nxx format, where N is an integer number (might be negative) and xx is one of the following:

  • sc - seconds

  • mn - minutes

  • hr - hours

  • dy - days

  • mo - months

  • yr - years

This notation is used by GrADS ( and I find it the best and the easiest around. The items in the margin array might be in any order.


After we traveled we want to land - this method constructs a CTIME compatible string and returns it, also adjusting the month that has been within the 0..1 range all the time. You can now print that string.


I wanted this module to be small, robust and simple therefore it does not treat so many formats for input and output as other Time:: or Date:: modules do. But I am glad it is that way.

Years have a limitation set upwards to 100000 for sanity.

When reporting bugs/problems please include as much information as possible.


Roman M. Parparov <>. Special thanks to authors of the modules in SEE ALSO section.


Time::ParseDate, Date::Parse, Date::Manip, Time::DaysInMonth


Copyright 2003 Roman M. Parparov <>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.