我有两台配置相同的服务器:httpd+mod_perl(我认为设置100%相同),但在一台服务器上我收到了一些perl警告,而在另一台服务器中,同样的警告会导致致命错误。外观:
服务器A日志:中数值eq(==)中未初始化值的使用
服务器B日志:【2016年6月8日星期三14:32:47】【错误】在中使用字符串eq中的未初始化值
在服务器A中,请求流继续进行,用户得到期望的结果,但在服务器B中,用户得到500错误。
我正在使用
use strict;
use warnings;
在两台服务器上的文件中。
有什么想法吗?
引起此警告/FATAL:的代码示例
$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_ATAL_WARNINGS似乎没有定义。有猪吗?
已解决:
伙计们,非常感谢!我们终于发现了问题:在服务器A中,模块Moo的版本是1.003,而服务器B使用的是更新版本2.000001
在版本2之前,调用use Moo;
启用了严格限制,这使得除少数类别外的所有警告都是致命的。这导致了很多问题*,因此警告在版本2及更高版本中不再是致命的。
要修复此问题,请将Moo升级到最新版本。当你在做的时候,你也应该真正解决警告的原因。
*参见以下讨论:
- 警告的默认致命性需要在新的主要限制之前得到mst的澄清
- 致命的警告是一颗滴答作响的定时炸弹
- Moo 2和限制2