我在运行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很新。如果有人知道我可以开始调查的方向,那就太好了。
答案 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};
# ...
}
这样你循环的键就会在第一次循环之前设置为固定值,并且不会发生任何未定义的行为。