代码之家  ›  专栏  ›  技术社区  ›  Kev

为什么我的<Perl>部分变量仅在mod_Perl下有时可用?

  •  1
  • Kev  · 技术社区  · 16 年前

    在httpd.conf中,我有:

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

    根据文档,由于它是合格的,因此应该持久化到我的perl脚本中,这些脚本使用modperl处理程序运行。有时确实如此。但我只需点击MyPackage.pm,突然间$MyPackage::foo就变为undef了。重新启动web服务器,它再次工作。

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

    1 回复  |  直到 16 年前
        1
  •  0
  •   Kev    16 年前

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

    最简单的解决方案是将.conf中的作用域变量重命名为您实际上没有使用的东西:

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

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

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

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

    推荐文章