my @normalTimes = ('+1h6m', '0h13m', '-4h10m', '-6h5m'); my @sortedTimes = sort { getMinutes($b) <=> getMinutes($a) } @normalTimes; sub getMinutes { my($hour,$minute) = split(/[hm]/, shift); return( ($hour * 60) + (($hour > 0) ? $minute : -$minute)); }