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