Perl RegistryCooker.pm正在产生哈希错误

时间:2014-05-16 17:45:09

标签: linux perl otrs

我在运行ubuntu的网络服务器上设置了OTRS,当我尝试在同一系统上访问一个单独的perl应用程序时出现此错误:

[perl:error] [pid 4649] [client IP:20534] 
Use of each() on hash after insertion without resetting hash iterator results in undefined behavior, 
Perl interpreter: 0x7f006d2d3830 at /usr/lib/perl5/ModPerl/RegistryCooker.pm line 526.
\n, referer: http://URL/otrs/index.pl?Session=100842489b87151dd7e4495da5b1b7d138

我真的不知道是什么原因造成这种情况,因为我对perl很新。如果有人知道我可以开始调查的方向,那就太好了。

2 个答案:

答案 0 :(得分:0)

你的运行mod_perl?如果是这样,请尝试禁用它(用于测试)并检查错误是否仍然出现。 booth应用程序也可能尝试运行mod_perl,你需要一个特殊的配置。

问候

汉纳斯

答案 1 :(得分:0)

来自perldoc的perldiag页:

  

插入后在散列上使用each()而不重置散列迭代器会导致未定义的行为

     

(S internal)插入后每个()的行为未定义,可能会跳过项目,或多次访问项目。考虑使用keys()而不是每个()。

我会考虑改变你对each()的使用来代替使用keys()。例如:

while (my ($key, $value) = each(%hash)) {
    # ...
}

变为:

for my $key (keys %hash) {
    my $value = $hash{$key};
    # ...
}

这样你循环的键就会在第一次循环之前设置为固定值,并且不会发生任何未定义的行为。

相关问题