我的要求如下:
如果请求的url类似于
http://localhost/mod_perl/TopModule/ActualModule/method1
然后我应该调用TopModule::ActualModule->method1 ()
脚本名称后面的URL部分通过$ENV{PATH_INFO}传递给您的perl程序。因此,您可以创建一个名为modulerrunner的perl脚本,您可以使用像'http://whatever这样的URL来调用它。主机/modulerunner/高级/真实/方法:
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";
}
哦,不要用