use strict; use constant BASE => 10000; print diff("23:59:59.9999", "00:00:00.0000"), "\n"; print diff("00:00:00.0000", "23:59:59.9999"), "\n"; sub diff { my ($before, $after) = @_; my ($h1, $m1, $s1, $ss1) = ($before =~ m/(\d+):(\d+):(\d+)\.(\d+)/); my ($h2, $m2, $s2, $ss2) = ($after =~ m/(\d+):(\d+):(\d+)\.(\d+)/); my $diff = (($h2-$h1)*3600 + ($m2-$m1)*60 + $s2-$s1)*BASE + $ss2-$ss1; return ($diff >= 0) ? $diff : $diff + (86400 * BASE); }