如何检测Perl中的Web脚本是否使用ModPerl :: Registry(mod_perl处理程序)运行?

时间:2010-07-10 22:27:31

标签: perl web-applications mod-perl

如果使用ModPerl::Registry运行,是否可以在网络应用中检测运行mod_perl?

我想编写可以在ModPerl :: Registry(或类似处理程序)下运行的脚本,但也可以作为mod_perl响应处理程序运行。

1 个答案:

答案 0 :(得分:4)

ModPerl :: Registry做了精心设计的舞蹈,将您的代码与系统中的所有其他代码隔离开来,其中一部分是将其编译为ModPerl::ROOT下的包。

在列表上下文中使用指定要返回的帧数的参数调用时,caller返回

#  0         1          2      3            4
($package, $filename, $line, $subroutine, $hasargs,
#  5          6          7            8       9         10
$wantarray, $evaltext, $is_require, $hints, $bitmask, $hinthash)
 = caller($i); 

其中$subroutine值是完全限定名称。

ModPerl :: Registry将您的整个程序包装在上述人工包中的名为handler的子目录中,因此从您的主程序中,使用类似于

的测试
my $name = (caller 0)[3];
if ($name =~ /^ModPerl::ROOT::/) {
  # run using ModPerl::Registry
  ...
}