【发布时间】:2011-11-15 17:54:23
【问题描述】:
我从基础开始学习 Perl,然后发现并学习了 Moose,用 Moose 编写了一个完整的应用程序,结果发现它必须在 mod_perl 下运行。所以我用 mod_perl 把我的代码扔到服务器上,一大堆东西都出了问题。一方面,会话信息已损坏,而本应超时的事情却没有——还有一大堆其他问题。
除了剔除全局变量以使代码按 mod_perl 中的预期运行之外,通常需要发生什么? mod_perl 和 Moose 配合得很好吗?在 mod_perl 下 Moose 是否有任何陷阱,或者我需要注意的 mod_perl 中的奇怪东西?
到目前为止,我学到的一件事是,由于代码是在 Apache 命名空间中编译和创建的,因此全局变量实际上永远不会被销毁——您必须通过初始化它们来清除它们 =/
【问题讨论】:
-
Apache命名空间编译几乎与全局初始化和销毁无关。事实是您的 Perl 解释器永远不会被破坏,这就是您的全局变量持续存在的原因。这将发生在任何长时间运行的守护进程(pperl、Starman、FastCGI 等)中,它会为其生命周期创建一个解释器。