从实用的mod_perl中选择一些引用
“通常,单个进程在退出之前会处理许多请求,因此如果期望在每个请求的处理结束时执行某些操作,则无法使用END块。”
所以,在我的a.cgi脚本中:
my $flag = 1;
END {
# Value for $flag is undefined, if this script is run under mod_perl.
# END block code only executed when process to handle a.cgi exit.
# I wish to execute some code, just before process to handle a.cgi exit.
if ($flag) {
# clean up code.
}
}
这本书重新开始$ r-> register_cleanup(sub {#cleanup});
然而,
答案 0 :(得分:4)
我的$ r = Apache->请求;
是的,但请参阅http://modperlbook.org/html/6-2-Exposing-Apache-Registry-Secrets.html和接下来的几页,了解局部变量和函数的范围。
是的,只有在您希望它运行时才注册该功能。
答案 1 :(得分:1)
如果我理解正确,你有一个你想要在mod_perl下运行的脚本和一个普通的CGI,听起来你正在使用Apache::Registry来执行此操作。
当您作为CGI脚本运行时,您需要运行 的清理代码。
您需要检测是否在mod_perl下运行。这很容易。最简单的方法是检查您的环境:
unless ($ENV{MOD_PERL})
{
#... cleanup code here.
}
如果您希望在Apache :: Registry下脚本终止时运行某些内容,则只需注册清理处理程序。
如果你想要那样,你应该把你的清理代码放到一个子中,然后从你在CGI中的支票中调用那个子:
unless ($ENV{MOD_PERL})
{
cleanup_sub();
}
并从你的清理处理程序:
my $r = Apache->request;
$r->register_cleanup(sub { cleanup_sub() } );