2013-02-27 2 views

ответ

0

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"; 
} 

О, и не использовать < шрифта > тег оны что-нибудь продуктивный либо;)

Смежные вопросы