为什么我从Perl那里得到“Day too big”错误?

前端之家收集整理的这篇文章主要介绍了为什么我从Perl那里得到“Day too big”错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在帮助某人调试一些代码,其中错误消息是“Day too big”.我知道这源于当地时间和Y2038错误(大多数谷歌搜索结果似乎是人们处理将来到期的cookie).

我们似乎通过使用时间来获取当前日期来“解决”问题.但是,鉴于我们的原始日期都没有达到2038年的问题,我怀疑我们是否已经解决了这个问题……

还有其他情况,任何人都知道一个人会在哪里打“天太大”?

操作系统是Solaris.

示例代码 – 实际代码非常大,我正在使用的人实际上没有隔离有问题的部分(这就是为什么我担心’修复’实际上不是一个修复).如果我能把一些简洁的东西放在一起再现这个问题,我会发布!

UPDATE

我分离了一些代码,在所有内容周围放置了一些打印语句并解决了问题…

令人讨厌的代码行是:

$temp = str2time(localtime());

这通常(但不总是)将$temp设置为undef.事实证明,即使设置了$temp,也没有设置预期值.

问题是localtime()在大多数情况下返回一个数组……这就是搞乱str2time的调用.

通过将其更改为:

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

问题消失了.

当然,更好的是,只需使用:

$temp = time;

解决方法

Time :: Local包中有一个“Day too big”消息.如果您想进一步调查,源代码here.

Carp::Always模块在这里可能会有所帮助.运行违规代码

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

无论你以前在哪里得到警告,你现在都可以获得完整的堆栈跟踪.

猜你在找的Perl相关文章