modperl Apache2::HelloWorld
16 November 2005
This post may be outdated due to it was written on 2005. The links may be broken. The code may be not working anymore. Leave comments if needed.
一个最标准的 modperl 脚本可能是这样的:
当然我们也可以改变这个名字,如下面这样:
而 SetHandler 为什么即可以用 perl-script 又可以用 modperl 则参考 mod_perl 配置的一些指令.这就是我们最简单的 Hello, World! 至此,我们可以访问 http://localhost/h2 或 h1 来享受我们的成果。
package Apache2::F_H1;use Apache2::RequestRec;然后在 perl.conf 或 httpd.conf 里写:
use Apache2::RequestIO;
use Apache2::Const -compile => qw(OK);sub handler {
my $r = shift;
$r->content_type('text/html');
$r->print('Hello World!');
return Apache2::Const::OK;
}1;
<Perl>
use lib 'E:/modperl';
</Perl>PerlModule Apache2::F_H1
<Location /h1>
SetHandler perl-script
PerlResponseHandler Apache2::F_H1
</Location>
- 简单的解释下代码:
- Apache2::RequestRec 用于处理请求,这里用到了它的 content_type
- Apache2::RequestIO 则用于输入输出,这里用到了它的 print
- use Apache2::Const -compile => qw(OK); 则定义一些常量,这里是用到了 Apache2::Const::OK
- my $r = shift; 这个和 Catalyst 中程序第一句 my ( $self, $c ) = @_; 的 $c 很类似。几乎所有的 modperl 提交给 PerlResponseHandler 或其他 Perl*Handler 时,子程序第一句就必定应当是这句。
- 注意 1; 没有这个的话,Apache 很可能启动不起来。
当然我们也可以改变这个名字,如下面这样:
package Apache2::F_H2;sub kissme {这样我们可以在 perl.conf 里这么写:
my $r = shift;
$r->content_type('text/html');
$r->print('Hello World!');
return Apache2::Const::OK;
}1;
PerlModule Apache2::F_H2Handler 时指定了 kissme.而这里没有那三个 use Apache2::*; 也能正常运行是因为 perl.conf 里 PerlRequire "C:/Apache2/conf/startup.pl", 且 startup.pl 载入了这一系列模块(包括这三)。
<Location /h2>
SetHandler modperl
PerlResponseHandler Apache2::F_H2::kissme
</Location>
而 SetHandler 为什么即可以用 perl-script 又可以用 modperl 则参考 mod_perl 配置的一些指令.这就是我们最简单的 Hello, World! 至此,我们可以访问 http://localhost/h2 或 h1 来享受我们的成果。
blog comments powered by Disqus