0

我在运行 ubuntu 的 Web 服务器上设置了 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 还很陌生。如果有人知道我可以开始研究什么方向,那就太好了。

4

2 回答 2

0

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

问候

汉内斯

于 2014-06-01T13:45:00.010 回答
0

从 perldoc 的perldiag页面:

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

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

我会考虑将您对 each() 的使用改为使用 keys()。例如:

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

变成:

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

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

于 2014-06-01T14:11:37.460 回答