2010-03-30 4 views
3

Я помогал кому-то отлаживать некоторый код, где сообщение об ошибке было «слишком большим днем». Я знаю, что это происходит из локального времени и ошибки Y2038 (большинство результатов Google - это люди, имеющие дело с кукисами, которые быстро уходят в будущее).Почему у меня есть ошибка «День слишком большой» от Perl?

Похоже, что проблема «исправлена», используя время, чтобы получить текущую дату. Однако, учитывая, что ни одна из наших исходных дат не попала в проблему 2038 года, я скептически отношусь к тому, что мы на самом деле устранили проблему ...

Есть ли другие случаи, когда кто-нибудь знает, где можно было бы попасть в «день слишком большой» «?

ОС - Solaris.

Образец кода - фактический код довольно большой, и человек, с которым я работаю, фактически не изолировал оскорбительную часть (именно поэтому я беспокоюсь, что «исправить» на самом деле не является исправлением). Если я смогу собрать что-то краткое, которое воспроизведет вопрос, я опубликую!

UPDATE

Я выделил кусок кода, поставить некоторые операторы печати вокруг все и решило проблему ...

Нарушитель строка кода была:

$temp = str2time(localtime()); 

Это было часто (но не всегда), устанавливая $ temp как undef. Оказывается, что даже когда $ temp был установлен, он не был установлен с ожидаемым значением.

Получено, что localtime() возвращает массив в большинстве контекстов ... и вот что вызывает вызов str2time.

Изменяя это:

$ltime = localtime; 
$temp = str2time($ltime); 

проблема уходит.

Конечно, еще лучше, просто использовать:

$temp = time; 
+0

У вас есть образец кода и описание вашей среды/ОС? –

ответ

7

Там в «День слишком большой» сообщение от Time::Local пакета. Исходный код: here, если вы хотите продолжить исследование.

Модуль Carp::Always может быть полезен здесь. Запустите код нарушения с

perl -MCarp::Always script.pl arg1 arg2 ... 

и где бы вы ни предупреждали раньше, теперь вы получите полную трассировку стека.

+0

+1 для Carp :: Всегда, это так полезно - сообщения о карпах всегда кажутся из неправильного пакета. – rjh

Смежные вопросы