为什么我会得到一个“;“天太大了”;来自Perl的错误?

为什么我会得到一个“;“天太大了”;来自Perl的错误?,perl,date,Perl,Date,我一直在帮助别人调试一些错误信息为“天太大”的代码。我知道这源于localtime和Y2038 bug(大多数谷歌搜索结果似乎都是处理未来即将过期的cookie的人) 我们似乎已通过使用时间获取当前日期来“修复”问题。然而,考虑到我们最初的日期都不应该出现在2038年,我怀疑我们是否真的解决了这个问题 有没有其他的例子,任何人都知道谁会打“天太大” 操作系统是Solaris 示例代码-实际代码相当大,我的同事实际上没有隔离出有问题的部分(这就是为什么我担心“修复”实际上不是修复)。如果我能把一些

我一直在帮助别人调试一些错误信息为“天太大”的代码。我知道这源于localtime和Y2038 bug(大多数谷歌搜索结果似乎都是处理未来即将过期的cookie的人)

我们似乎已通过使用时间获取当前日期来“修复”问题。然而,考虑到我们最初的日期都不应该出现在2038年,我怀疑我们是否真的解决了这个问题

有没有其他的例子,任何人都知道谁会打“天太大”

操作系统是Solaris

示例代码-实际代码相当大,我的同事实际上没有隔离出有问题的部分(这就是为什么我担心“修复”实际上不是修复)。如果我能把一些简单的东西放在一起,复制这个问题,我会发布

更新

我隔离了一些代码,在所有东西周围都放了一些打印语句,解决了这个问题

有问题的代码行是:

$temp = str2time(localtime());
通常(但并非总是)将$temp设置为未定义。事实证明,即使在设置$temp时,它也没有被设置为预期值

问题是localtime()在大多数上下文中都返回一个数组。。。这就是为什么打乱了对STR2时间的呼叫

将此更改为:

$ltime = localtime;
$temp = str2time($ltime);
问题消失了

当然,更好的方法是使用:

$temp = time;
来自
Time::Local
软件包的消息是“天太大了”。如果您想进一步调查,请参阅源代码

该模块在这里可能会有所帮助。使用运行有问题的代码

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

无论您以前在哪里收到警告,现在都会得到完整的堆栈跟踪。

您是否有示例代码和环境/OS的描述?+1 for Carp::Always,它非常有用-Carp消息似乎总是来自错误的包。