Per spezzare ci sono due metodi molto semplici:
1: con il metodo split:
codice:
$origstr = "12:34:56:ff";
@divisi = split(/\:/,$origstr);
#a questo punto divisi e` un vettore di 4 componenti che contengono i pezzi separati
print 'ore',$divisi[0],"\n"; # 12
print 'min',$divisi[1],"\n"; # 34
print 'sec',$divisi[2],"\n"; # 56
print 'ff',$divisi[3],"\n"; # ff
2: con le RE:
codice:
$origstr = "12:34:56:ff";
$origstr ~= /(?(\d)[\:\.]{1}?)+/;
#a questo punto in $1, $2, ... hai i pezzi separati
print 'ore',$1,"\n"; # 12
print 'min',$2,"\n"; # 34
print 'sec',$3,"\n"; # 56
print 'ff',$4,"\n"; # ff
A questo punto devi trasformare la stringa in tempo; se ti serve solo un conto di ore, forse ti basta trasformare tutto in secondi, e poi usare quelli:
$seconds = ($hh * 60 + $mm) * 60 + $ss;
Se invece vuoi usare anche giorno, mese, anno ti conviene vedere se hai qualche modulo installato ed usare i metodi di quello.
Alla fine se hai usato i secondi, ti basta usare l'operatore modulo (%) e la divisione intera (o il metodo int() ) per estrarre (nell'ordine) i secondi, i minuti e le ore.
Se invece hai usato anche giorno, mese, anno per ritornare alla stringa del tempo, devi usare gmtime() o localtime() (a seconda che vuoi il tempo universale o quello della tua timezone):
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime($tuotempo);