#!/usr/local/bin/perl
use v5.6.0;
use PLP;
+use strict;
-die 'Wrong module version' if $PLP::VERSION ne '3.01';
-
-use vars qw($DEBUG);
+die 'Wrong module version' if $PLP::VERSION ne '3.06';
-use strict;
{
+ @PLP::END = ();
$PLP::code = '';
$PLP::sentheaders = 0;
$PLP::inA = 0;
$PLP::inB = 0;
+ $PLP::DEBUG = 1;
+ delete @ENV{ grep /^PLP_/, keys %ENV };
}
-$DEBUG = 1;
-our $mod_perl = exists $ENV{MOD_PERL};
-
-{
- my $file = $ENV{PATH_TRANSLATED};
- $ENV{PLP_NAME} = $ENV{PATH_INFO};
- my $path_info;
- while (not -f $file) {
- if (not $file =~ s/(\/+[^\/]*)$//) {
- print STDERR "PLP: Not found: $ENV{PATH_TRANSLATED} ($ENV{REQUEST_URI})\n";
-
- if ($mod_perl) {
- Apache->request->uri($ENV{REQUEST_URI});
- print STDOUT "Status: 404 Not Found";
- Apache::exit();
- } else {
- PLP::error(undef, 404);
- exit;
- }
- }
- my $pi = $1;
- $ENV{PLP_NAME} =~ s/\Q$pi\E$//;
- $path_info = $pi . $path_info;
- }
-
- if ($mod_perl) {
- Apache->request->uri($ENV{REQUEST_URI});
- }
-
- if (not -r $file) {
- print STDERR "PLP: Can't read: $ENV{PATH_TRANSLATED} ($ENV{REQUEST_URI})\n";
- if (exists $ENV{MOD_PERL}) {
- print STDOUT "Status: 403 Forbidden";
- Apache::exit();
- } else {
- PLP::error(undef, 403);
- exit;
- }
- }
-
- delete @ENV{
- qw(PATH_TRANSLATED SCRIPT_NAME SCRIPT_FILENAME PATH_INFO),
- grep { /^REDIRECT_/ } keys %ENV
- };
-
- $ENV{PATH_INFO} = $path_info if defined $path_info;
- $ENV{PLP_FILENAME} = $file;
- (my $dir = $file) =~ s{/[^/]+$}[];
- chdir $dir;
-
- $PLP::code = PLP::source($file, 0);
- tie *PLPOUT, 'PLP::Tie::Print';
- select PLPOUT;
-}
+PLP::start();
{
no strict;
*headers = \%header;
*cookies = \%cookie;
PLP::Functions->import();
- eval qq{package PLP::Script; $PLP::code};
+ # No lexicals may exist at this point.
+ eval qq{ package PLP::Script; $PLP::code; };
+ PLP::error($@, 1) if $@ and $@ !~ /\cS\cT\cO\cP/;
+ eval { package PLP::Script; $_->() for reverse @PLP::END };
+ PLP::error($@, 1) if $@ and $@ !~ /\cS\cT\cO\cP/;
}
- PLP::error($@, 1) if $@;
+ PLP::sendheaders() unless $PLP::sentheaders;
select STDOUT;
undef *{"PLP::Script::$_"} for keys %PLP::Script::;
- PLP::SendHeaders() unless $PLP::sentheaders;
}