in reply to Morning or Night?

Funny lookin' bit of script there :-)

Hmmkay. Line 1: isdst is should be $isdst.
On line 3: @months = map {sprintf('%02d, $_')} (1..12); would be so much perlier :-)
Why set $year like that? Does localtime get it wrong? And don't set it to a two-digit string, that's sooo Y2K!
The AM/PM lines could say $ampm = ($central_time_hour > 12)?'AM':'PM'; Oh, and, $central_time_hour %= 12; for the last bit.

But as to your actual problem: it doesn't do it to me (at least not when I manually clobber $hour and $min) so it's probably in something you've not shown us here. Try outputting values at each stage. You're aren't doing something surreal like calculating $ampm based on $central_time_hour then outputting just $hour, are you ;-)

Last but not least, Check Thy System Clock. Make sure it isn't out by 12 hours.

Good morning! (or is that night-night?)