我有两台具有相同配置的服务器:httpd + mod_perl(我认为设置是100%相同),但是在一台服务器中我得到了一些perl警告,而在另一台服务器中,同样的警告让我遇到致命错误。看:
服务器日志: 在
的数字公式(==)中使用未初始化的值服务器B日志: [Wed Jun 08 14:32:47 2016] [错误] 在字符串eq中使用未初始化的值
在服务器A中,请求流继续,用户获得所需的结果,但在服务器B中,用户得到500错误。
我正在使用
use strict;
use warnings;
在两台服务器上的文件中。
有什么想法吗?
导致此警告/致命的代码示例:
$allowed_sellers = any { $_ == $user->{user_id} } (111,123,222,345);
更新:
我在我正在使用的模块中找到了这段代码(Moo):
package Moo::_strictures;
use strict;
use warnings;
sub import {
if ($ENV{MOO_FATAL_WARNINGS}) {
require strictures;
strictures->VERSION(2);
@_ = ('strictures');
goto &strictures::import;
}
else {
strict->import;
warnings->import;
}
}
1;
但似乎没有定义env变量MOO_FATAL_WARNINGS。有什么想法吗?
解决:
伙计们,非常感谢!我们终于发现了这个问题:在服务器A中,模块Moo的版本是1.003,而服务器B使用的是更新的版本2.000001
答案 0 :(得分:4)
Before version 2,调用use Moo;
启用strictures,除了几个类别外,所有警告都会致命。这导致了许多问题*,因此在版本2及更高版本中警告不再是致命的。
要修复,请将Moo升级到最新版本。当你了解它时,你也应该真正解决警告的原因。
*请参阅以下讨论: