如何在运行时在mod_perl中卸载模块?

时间:2012-02-02 18:09:52

标签: perl mod-perl

我有一个mod_perl-enable Apache运行本机(处理程序,而不是Apache :: Registry或类似的)mod_perl代码。众所周知,模块可以在运行时进行编译和加载。出于测试目的,我有一个虚拟模块:

package MyPackage;
our $data = '0123456789' x 1000000; # 10 millions characters
1;

在运行时我加载它并且我的 httpd 子进程在多个请求之后逐个累加10兆字节。这可以。这种方式我可以使用ocasionally一些内存消耗代码,但虽然它很少发生,我希望能够卸载使用过的模块完成它的工作。

如果你要提到使用词法my变量,我知道当范围结束时会被破坏。因此,在这种情况下,our或包变量是一个重要因素。

是否可以在运行时获取此信息?如果是的话,怎么办呢?

1 个答案:

答案 0 :(得分:2)

核心Symbol模块包含一个函数delete_package,它接受​​包名并删除其中的所有变量。

所以在你的情况下:

use Symbol 'delete_package';

delete_package 'MyPackage';