v3.22 release
[perl/plp/.git] / lib / PLP.pm
index 42866dc20f85d110662693e0c203a55faae94615..54a3b91fe5eb43248f81a9f4716478e1fd6f5e43 100644 (file)
@@ -14,7 +14,7 @@ use File::Spec;
 use strict;
 use warnings;
 
 use strict;
 use warnings;
 
-our $VERSION = '3.20';
+our $VERSION = '3.22';
 
 # Subs in this package:
 #  _default_error($plain, $html)    Default error handler
 
 # Subs in this package:
 #  _default_error($plain, $html)    Default error handler
@@ -83,7 +83,7 @@ sub error {
 # Wrap old request handlers.
 sub everything {
        require PLP::Backend::CGI;
 # Wrap old request handlers.
 sub everything {
        require PLP::Backend::CGI;
-       PLP::Backend::CGI::everything();
+       PLP::Backend::CGI->everything();
 }
 sub handler {
        require PLP::Backend::Apache;
 }
 sub handler {
        require PLP::Backend::Apache;
@@ -94,7 +94,10 @@ sub handler {
 sub sendheaders () {
        $PLP::sentheaders ||= [ caller 1 ? (caller 1)[1, 2] : (caller)[1, 2] ];
        print STDOUT "Content-Type: text/plain\n\n" if $PLP::DEBUG & 2;
 sub sendheaders () {
        $PLP::sentheaders ||= [ caller 1 ? (caller 1)[1, 2] : (caller)[1, 2] ];
        print STDOUT "Content-Type: text/plain\n\n" if $PLP::DEBUG & 2;
-       print STDOUT map("$_: $PLP::Script::header{$_}\n", keys %PLP::Script::header), "\n";
+       while (my ($header, $values) = each %PLP::Script::header) {
+               print STDOUT "$header: $_\n" for split /\n/, $values;
+       }
+       print STDOUT "\n";
 }
 
 {
 }
 
 {
@@ -236,10 +239,10 @@ sub start {
 
                # No lexicals may exist at this point.
                
 
                # No lexicals may exist at this point.
                
-               eval qq{ package PLP::Script; $PLP::code; };
+               eval qq{ package PLP::Script; no warnings; $PLP::code; };
                PLP::error($@, 1) if $@ and $@ !~ /\cS\cT\cO\cP/;
 
                PLP::error($@, 1) if $@ and $@ !~ /\cS\cT\cO\cP/;
 
-               eval   { package PLP::Script; $_->() for reverse @PLP::END };
+               eval   { package PLP::Script; no warnings; $_->() for reverse @PLP::END };
                PLP::error($@, 1) if $@ and $@ !~ /\cS\cT\cO\cP/;
        }
        PLP::sendheaders() unless $PLP::sentheaders;
                PLP::error($@, 1) if $@ and $@ !~ /\cS\cT\cO\cP/;
        }
        PLP::sendheaders() unless $PLP::sentheaders;
@@ -404,8 +407,9 @@ These are described in L<PLP::Fields>.
 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
 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
 
 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
@@ -417,13 +421,13 @@ line your output started. An alternative way of setting headers is using Perl's
 BEGIN blocks. BEGIN blocks are executed as soon as possible, before anything
 else.
 
 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,
 yourself when there are newer versions. 
 
 The special hashes are tied hashes and do not always behave the way you expect,