#!/usr/bin/perl use strict; use warnings; # 855222 # 1) min:sec,frac e.g. "5:29,11" # 2) sec,frac e.g. "29,11" # 3) sec e.g. "29" # 4) ,frac e.g. ",11" # 5) min:sec e.g. "5:29" # 6) someth. else e.g. "abc" my $seconds; my @times=("5:29,11", "29,11", "29:00", "29:00,3", "29:00,303","29:13,07", ",11", "0:11", "5:29", "abc", "1abc"); for my $time(@times) { no warnings 'uninitialized'; if ($time =~ /[a-z]/i) { # won't catch non-"time-ish" symbols such as ?, #, @, etc # $seconds = -1; # my personal preference is for an explicit error statement print "Data not recognized: $time\n"; next; } else { ($seconds = $time) =~ s<^(?:(\d+):)?(\d+)?(?:,(\d+))?$><$1*60+$2+$3/(10**length($3))>e; } print "$time = $seconds \n"; }