URL-адрес за именем сценария передается вашей программе perl в $ ENV {PATH_INFO}. Таким образом, вы можете создать скрипт на языке Perl, который вы называете modulerunner, который вы можете позвонить с URL, как «http://whatever.host/modulerunner/Top/Actual/method»:
my $arg=$ENV{PATH_INFO}; <-- contains Top/Actual/method
my @arg=split("/", $arg); <-- [ "Top", "Actual", "method" ]
my $method=pop @arg; <-- removes "method", "Top" and "Actual" remain in @arg
my $modules=join("::", @arg); <-- "Top::Actual"
my $call="$modules->$method()"; <-- "Top::Actual->method()"
eval $call; <-- actually execute the method
Однако, я бы НЕ СОВСЕМ рекомендовать - это открывает слишком много дыр в безопасности, что позволяет вашим посетителям веб-сайта вызывать любую функцию perl в любом модуле. Итак, если вы не делаете это на своем собственном сервере, который не связан ни с чем другим, я бы просто пошел на очень скучный if-then-cascade.
$p=$ENV{PATH_INFO};
if ($p eq "Top/Actual/method") { Top::Actual->method(); }
elseif ($p eq "Other/Module/function" { Other::Module->function(); }
else {
print "<font color=red>Don't try to hack me this way, you can't.</font>\n";
}
О, и не использовать < шрифта > тег оны что-нибудь продуктивный либо;)