1

在 httpd.conf 我有:

<Perl>
   $MyPackage::foo = { ... };
</Perl>

根据文档,由于它是合格的,因此应该保留在我的 perl 脚本中,这些脚本与 modperl 处理程序一起运行。有时他们会这样做。但是我需要做的就是触摸 MyPackage.pm,突然之间 $MyPackage::foo 现在是 undef。重新启动 Web 服务器,它再次工作。

有人能止住我的眼泪吗?

我最好的猜测是,当解析 .conf 时,该块只运行一次,然后一个新线程拾取重新加载的文件。但是为什么它不是每个线程运行一次呢?除了 $ENV 和每个服务器只加载一次然后复制到所有解释器的自定义指令之外,我是否可以使用其他东西?(我可能在这里最后使用了错误的术语,但你明白了。)

4

1 回答 1

0

我在打字时发现了这一点,但我想我会分享一下,以防它拯救了其他人我刚拔掉的头发。

最简单的解决方案是将 .conf 中的作用域变量重命名为您实际未使用的名称:

<Perl>
    $MyPackageConfig::foo = { ... };
</Perl>

...然后让您的实际包裹拿起它:

package MyPackage;
our $foo = $MyPackageConfig::foo;

当我测试它时,这似乎一直有效。

于 2009-02-11T21:30:23.363 回答