为什么我的<perl> section变量有时仅在mod_perl?</perl>下可用

时间:2009-02-11 21:27:56

标签: httpd.conf mod-perl2

在httpd.conf中我有:

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

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

有人结束了我的眼泪吗?

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

1 个答案:

答案 0 :(得分:0)

我在打字的过程中想到了这一点,但我想我会分享,以防万一我把刚拔出的头发保存起来。

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

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

...然后让你的实际包裹拿起来:

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

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