#!/usr/bin/perl -w use strict; use Term::ANSIColor; $| = 1; sub calcdiff { my $line = shift; chomp($line); my @parts = split(/\s+/, $line); if (scalar(@parts) ne 2){ print "Error: 2 times only!\n"; return; } my @start = ($parts[0] =~ m#(\d+):(\d+):(\d+)\.(\d+)#); my @end = ($parts[1] =~ m#(\d+):(\d+):(\d+)\.(\d+)#); my $smsecs = to_msecs(@start); my $emsecs = to_msecs(@end); print print_time("Start", @start); print print_time("End", @end); my $diff = $emsecs - $smsecs; my @res = from_msecs($diff); print color 'green'; printf "%-9s", "Result"; print "$res[0] ($res[1])\n"; print color 'reset'; print color 'red'; print "New Calculation\n"; print color 'reset'; } sub print_time { my $prefix = shift; my @val = @_; print color 'yellow'; printf "%-9sh: %02d m: %02d: s: %02d ms: %02d\n", $prefix, $val[0], $val[1], $val[2], $val[3]; print color 'reset'; return; } sub to_msecs { my @val = @_; my $retval = $val[0] * 60 * 60 * 100; $retval += $val[1] * 60 * 100; $retval += $val[2] * 100; $retval += $val[3]; $retval; } sub from_msecs { my $msecs = shift; my $direction = $msecs < 0 ? "back" : "forward"; $msecs = abs($msecs); my $h = int($msecs / 60 /60 / 100); my $m = int($msecs / 60 / 100); my $s = int($msecs / 100); my $ms = $msecs % 100; my $retval = sprintf "%02d:%02d:%02d.%02d", $h, $m, $s, $ms; ($retval, $direction); } print color 'red'; print "New Calculation\n"; print color 'reset'; while(<>){ calcdiff($_); }