PLP is yet another Perl embedder, primarily for HTML documents. Unlike
with other Perl embedders, there is no need to learn a meta-syntax or
object model: one can just use the normal Perl constructs. PLP runs
-under mod_perl for speeds comparable to those of PHP, but can also be
-run as a CGI script.
+under FastCGI and mod_perl for speeds comparable to those of PHP, but
+can also be run as a standard CGI script.
INSTALLATION
Not only syntax is important, you should also be aware of some other important
features. Your script runs inside the package C<PLP::Script> and shouldn't
leave it. This is because when your script ends, all global variables in the
-C<PLP::Script> package are destroyed, which is very important if you run under
-mod_perl (they would retain their values if they weren't explicitly destroyed).
+C<PLP::Script> package are destroyed, which is very important if you run a
+persistent backend (they would retain their values if they weren't explicitly
+destroyed).
Until your first output, you are printing to a tied filehandle C<PLPOUT>. On
first output, headers are sent to the browser and C<STDOUT> is selected for
BEGIN blocks. BEGIN blocks are executed as soon as possible, before anything
else.
-Because the interpreter that mod_perl uses never ends, C<END { }> blocks won't
-work properly. You should use C<PLP_END { };> instead. Note that this is a not
-a built-in construct, so it needs proper termination with a semi-colon (as do
-C<eval> and C<do>).
+Unless you're running as CGI, the interpreter won't exit after processing a page,
+so C<END { }> blocks won't work properly. You should use C<PLP_END { };> instead.
+Note that this is a not a built-in construct, so it needs proper termination
+with a semi-colon (as do C<eval> and C<do>).
-Under mod_perl, modules are loaded only once. A good modular design can improve
-performance because of this, but you will have to B<reload> the modules
+When run persistently, modules are loaded only once. A good modular design can
+improve performance because of this, but you will have to B<reload> the modules
yourself when there are newer versions.
The special hashes are tied hashes and do not always behave the way you expect,
=item How can I make PLP faster?
-With mod_perl, PLP is a lot faster than with CGI. CGI scripts execute an
-external interpreter, but mod_perl is a Perl interpreter inside Apache.
+With mod_perl or FastCGI, PLP is a lot faster than with CGI.
+Instead of executing a new perl process for each request, the same interpreter
+will serve multiple pages.
-=item I already use mod_perl, can I make my scripts even faster?
+=item I already run persistently, can I make my scripts even faster?
Well, you already have scripts that probably are faster than PHP equivalents,
but speed maniacs always want more. Modules are cached, so with a proper module
=item Why do my C<END> blocks never get executed?
-If they are not, you are probably running under mod_perl. The blocks are
-executed when the interpreter stops, but the mod_perl interpreter is not exited
-after the PLP script has ended. Use C<PLP_END> blocks instead. Please note that
-C<PLP_END> is a normal statement, so you may need a semicolon.
+These blocks are executed when the interpreter stops, which only occurs if you
+are running as CGI. To catch the exit of a PLP script, use C<PLP_END> blocks instead.
+Please note that C<PLP_END> is a normal statement, so you may need a semicolon.
<html><body>
<: PLP_END { :>
</body></html>
<: } :>
+ contents
=item Can I disable the error messages?