Dal punto di vista logico, si puo` migliorare.
codice:
my ($min,$hr) = ( localtime( UnixDate("5:30pm","%s") ) )[1..2];

my $ampm = ($hr >= 12) ? "am" : "pm"; 
$hr -= 12 if ($hr > 12); 
if ($hr == 0) $hr = 12;

print "$hr:$min$ampm\n";