in reply to GMT to Chicago TIme

Use use strict; use warnings;. You are hiding valuable error messages if you don't. Specifically,
"my" variable $M masks earlier declaration in same scope at a.pl line +8. Global symbol "$dt" requires explicit package name at a.pl line 9. Global symbol "$dt" requires explicit package name at a.pl line 10. Global symbol "$dt" requires explicit package name at a.pl line 12. Execution of a.pl aborted due to compilation errors.

Fix:

sub fromGMT { my ($date, $hms) = @_; my ($Y, $m, $d) = unpack('A4A2A2',$date); my ($H, $M, $S) = $hms =~ m/^(\d+):(\d+)(?::(\d+))?/; $S ||= 0; my $dt = DateTime->new( year=>$Y, month=>$m, day=>$d, hour=>$H, minute=>$M, second=>$S, time_zone=>'GMT' ); $dt->set_time_zone('America/Chicago'); return $dt->hms; }