#! perl -slw use strict; my $re_etime = qr[ (?{ our $ETIME = 0 }) (?: (\d{2}) (?{ $ETIME = 24 * $^N||0 }) - )? (?: (\d{2}) (?{ $ETIME = 60 * ($ETIME + $^N||0) }) : )? (\d{2}) (?{ $ETIME = 60 * ($ETIME + $^N) }) : (\d{2}) (?{ $ETIME += $^N }) ]x; for my $test ( '25:41', '19:25:41', '11-19:25:41' ) { our $ETIME; print "$test => $ETIME" if $test =~ $re_etime; } __DATA__ D:\Perl\test>261741 25:41 => 91541 19:25:41 => 69941 11-19:25:41 => 1020341