El problema está a la hora de interpretar la fecha que le pasas a ParseDate().
Cuando estás en segundos menores que diez, la fecha tiene este aspecto:
2011-5-22 18:29:8Y resulta que no es un formato de fecha (mejor dicho, de hora) reconocido por
Date::Manip (ver la sección
VALID TIME FORMATS de Date::Manip::Date).
La solución pasa por darle un formato correcto a los segundos, antes de pasarlos a ParseDate.
$sec = substr "0$sec", -2;De todas maneras, no necesitas "interpretar" la fecha actual... Date::Manip tiene muchas formas de representar ciertas fechas y horas.
Con lo siguiente, tienes la fecha de ahora mismo:
my $ahora = ParseDate("now");Ahora tienes un objeto Date::Manip que representa la fecha y la hora local del sistema en que estés.
Para saber qué fecha y hora serán dentro de 24 horas, hay varias formas de hacerlo, pero la más normal es parecida a la que muestras:
my $ahora_mas_24h = DateCalc( $ahora, "+1 days");Es más, incluso si no vas a necesitar el objeto $ahora más que en esa ocasión, puedes pedirle a DateCalc que realice el cálculo de forma directa:
my $ahora_mas_24h = DateCalc( "now", "+1 days");Piensa que si debes realizar varias operaciones con fechas y horas, antes de ejecutar alguna función de Date::Manip, seguro que lo estás haciendo mal y que no has leído bien su documentación.
En Date::Manip existe también la palabra "tomorrow" para representar el día de mañana, pero no te vale, porque solo es la parte de la fecha.