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

时间:2016-06-08 19:44:32

标签: apache perl

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

1 个答案:

答案 0 :(得分:4)

Before version 2,调用use Moo;启用strictures,除了几个类别外,所有警告都会致命。这导致了许多问题*,因此在版本2及更高版本中警告不再是致命的。

要修复,请将Moo升级到最新版本。当你了解它时,你也应该真正解决警告的原因。

*请参阅以下讨论: