Если вас интересовало только сравнение времени,
my $ts1 = sprintf( '%4.4d%2.2d%2.2d%2.2d%2.2d%3.3d',
$year1, $month1, $mday1, $hour1, $min1, $sec1, $ms1 );
до
my $ts2 = sprintf( '%4.4d%2.2d%2.2d%2.2d%2.2d%3.3d',
$year2, $month2, $mday2, $hour2, $min2, $sec2, $ms2 );
с использованием cmp
будет достаточно.
Чтобы выполнить арифметику в это время, используйте Time :: Local , чтобы получить секунды с начала эпохи, а затем добавьте $ms1/1000
к этому значению.
my $time1 = timelocal($sec1, $min1, $hour1, $mday1, $mon1, $year1) + $ms1/1000;