Es ist für jedes Skript angebracht, die Pragmas strict und warnings zu benutzen -- siehe dazu auch UseStrict.
Mir ist nicht klar, warum ein Skript, das als Cronjob läuft, einen, noch dazu fehlerhaften, HTTP-Header ausgeben sollte.
Eine Datei zu verschieben erfordert vom Programmierer nicht zwingend getrennte Schritte zum Kopieren und Löschen. Es gibt sowohl das Kommandozeilentool mv, das beides auf einmal erledigt, als auch das hier wohl angebrachte Perlmodul File::Copy.
Um mit Kalenderdaten zu arbeiten empfiehlt sich zum Beispiel das Modul Class::Date. Man kann aber auch einfach Funktionen wie time und localtime (aus dem Kernbestand von Perl) sowie strftime (aus POSIX) verwenden.
When C++ is your hammer, every problem looks like your thumb.