X-Git-Url: http://git.shiar.net/perl/plp/.git/blobdiff_plain/d9f3acb221a71e094318c7b5d3809aa81dbb5bb3..04fbdaaff4a08de8acd15542c2a3c4e1a8084039:/lib/PLP.pm diff --git a/lib/PLP.pm b/lib/PLP.pm index 42866dc..54a3b91 100644 --- a/lib/PLP.pm +++ b/lib/PLP.pm @@ -14,7 +14,7 @@ use File::Spec; use strict; use warnings; -our $VERSION = '3.20'; +our $VERSION = '3.22'; # 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; - PLP::Backend::CGI::everything(); + PLP::Backend::CGI->everything(); } 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; - 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. - 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/; - 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; @@ -404,8 +407,9 @@ These are described in L. Not only syntax is important, you should also be aware of some other important features. Your script runs inside the package C and shouldn't leave it. This is because when your script ends, all global variables in the -C 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 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. On first output, headers are sent to the browser and C 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. -Because the interpreter that mod_perl uses never ends, C blocks won't -work properly. You should use C instead. Note that this is a not -a built-in construct, so it needs proper termination with a semi-colon (as do -C and C). +Unless you're running as CGI, the interpreter won't exit after processing a page, +so C blocks won't work properly. You should use C instead. +Note that this is a not a built-in construct, so it needs proper termination +with a semi-colon (as do C and C). -Under mod_perl, modules are loaded only once. A good modular design can improve -performance because of this, but you will have to B 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 the modules yourself when there are newer versions. The special hashes are tied hashes and do not always behave the way you expect,