在httpd.conf中我有:
<Perl>
$MyPackage::foo = { ... };
</Perl>
根据文档,由于它是合格的,因此应该保留到我的perl脚本中,这些脚本使用modperl处理程序运行。有时它们会这样做。但接下来我需要做的就是触摸MyPackage.pm,所有突然的$ MyPackage :: foo现在都是undef。重新启动Web服务器,它会再次运行。
有人结束了我的眼泪吗?
我最好的猜测是,当解析.conf时,块只会运行一次,然后新线程会获取重新加载的文件。但是为什么每个线程都没有运行一次呢?除了$ ENV和自定义指令之外,我是否可以使用每个服务器只加载一次,然后复制到所有解释器? (我可能在这里使用了错误的术语,但你明白了。)
答案 0 :(得分:0)
我在打字的过程中想到了这一点,但我想我会分享,以防万一我把刚拔出的头发保存起来。
最简单的解决方案是将.conf中的作用域变量重命名为您实际未使用的内容:
<Perl>
$MyPackageConfig::foo = { ... };
</Perl>
...然后让你的实际包裹拿起来:
package MyPackage;
our $foo = $MyPackageConfig::foo;
当我测试时,这似乎一直有效。