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

Apache 我的Perl警告是致命的,我不知道';我不知道为什么,apache,perl,Apache,Perl,我有两台配置相同的服务器:httpd+mod_perl(我认为设置是100%相同的),但在一台服务器上我收到了一些perl警告,而在另一台服务器上,相同的警告给我带来了致命错误。看: 服务器日志: 在数值等式(=)中使用未初始化值 服务器B日志: [Wed Jun 08 14:32:47 2016][错误]在 在服务器A中,请求流继续进行,用户得到所需的结果,但在服务器B中,用户得到一个500错误 我正在使用 use strict; use warnings; 在两台服务器上的文件中 有什么想

我有两台配置相同的服务器:httpd+mod_perl(我认为设置是100%相同的),但在一台服务器上我收到了一些perl警告,而在另一台服务器上,相同的警告给我带来了致命错误。看:

服务器日志: 在数值等式(=)中使用未初始化值

服务器B日志: [Wed Jun 08 14:32:47 2016][错误]

在服务器A中,请求流继续进行,用户得到所需的结果,但在服务器B中,用户得到一个500错误

我正在使用

use strict;
use warnings;
在两台服务器上的文件中

有什么想法吗

导致此警告/致命错误的代码示例:

$allowed_sellers = any { $_ == $user->{user_id} } (111,123,222,345);
更新:

我在正在使用的模块(Moo)中发现了此代码:

但是env变量MOO_FATAL_WARNINGS似乎没有定义。有什么想法吗

已解决:

伙计们,非常感谢!我们终于发现了问题:在服务器A中,模块Moo的版本是1.003,而服务器B使用的是更新的版本2.000001,调用
使用Moo已启用,这使得除少数类别外的所有警告都是致命的。这导致了许多问题*,因此警告在版本2及更高版本中不再是致命的

要修复此问题,请将Moo升级至最新版本。当你这么做的时候,你也应该真正解决警告的原因


*见以下讨论:


你声称它们是同一个错误的说法听起来并不正确。服务器A正在抱怨某些代码中包含
=
,而服务器B正在抱怨某些代码中包含
eq
。如果没有更多相关信息,我不确定我们是否能提供帮助。如果您正确地认为所有警告都是致命的,您可以在代码开头使用
使用警告非致命=>'all'
进行补救。我认为这是一种诊断技术,而不是一种诊断方法solution@tjd:虽然错误的实例可能不同,但它们都是类别
未初始化
中的警告,并且程序的行为就像
use warnings FATAL=>“uninitialized”
在服务器B上而不是服务器AGuys上一样,感谢提示。我尝试使用
使用非致命警告=>'all'
但没有成功。。。也许,在某个黑暗的地方,有一个文件只在一台服务器上覆盖了它……或者正在加载另一个模块,导致了相同的效果
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;