Как определить, запущен ли веб-скрипт на Perl с использованием ModPerl :: Registry (обработчик mod_perl)? - PullRequest
4 голосов
/ 11 июля 2010

Можно ли обнаружить в веб-приложении, запущенном под mod_perl, если оно запускается с использованием ModPerl :: Registry ?

Я хочу написать скрипт, который будет работать под ModPerl :: Registry(или аналогичный обработчик), но может также функционировать как обработчик ответа mod_perl.

1 Ответ

4 голосов
/ 11 июля 2010

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
  ...
}
...