【问题标题】:Why is my <Perl> section variable only available sometimes under mod_perl?为什么我的 <Perl> 部分变量有时只能在 mod_perl 下使用?
【发布时间】:2010-10-07 00:52:37
【问题描述】:

在 httpd.conf 我有:

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

根据文档,这应该,因为它是合格的,应该保留在我的 perl 脚本中,这些脚本使用 modperl 处理程序运行。有时他们会这样做。但是接下来我需要做的就是触摸 MyPackage.pm,突然之间 $MyPackage::foo 现在是 undef。重启网络服务器,它又可以工作了。

有人帮我止住眼泪吗?

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

【问题讨论】:

    标签: httpd.conf mod-perl2


    【解决方案1】:

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

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

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

    ...然后让您的实际包裹取走:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      相关资源
      最近更新 更多