*) Du brauchst nicht alles zu escapen. : und - sind im Regulären Ausdruck keine Sonderzeichen (- ist es nur in einer Zeichenklasse und selbst da nicht immer)
*) Du ersetzt alle : durch -, also auch bei der Uhrzeit, was nicht erwünscht ist
*) Einzelne Zeichen ersetzt man besser mit tr///, also $date =~ tr/:/-/;