我的Perl警告是致命的;我不知道为什么



我有两台配置相同的服务器: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

相关内容

最新更新