From: Juerd Waalboer Date: Sun, 19 May 2002 23:42:06 +0000 (+0000) Subject: v3.13 release X-Git-Tag: 3.13 X-Git-Url: http://git.shiar.net/perl/plp/.git/commitdiff_plain/7509565253b19493771cfc2e13ab166f1a8cc5f8 v3.13 release --- diff --git a/Changes b/Changes index e0b66fa..a03225a 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,18 @@ +3.13 - May 20, 2002 +- Added documentation: + - PLP + - PLP::FAQ + - PLP::Fields + - PLP::Functions +- Added predeclared of hashes for use-strict-users ("our"/"use vars" + is no longer necessary for the PLP hashes) +- Added plp.vim for vim syntax highlighting to the distribution +- Added error reportig to Counter, ReadFile and WriteFile +- Changed ReadFile and WriteFile to use lexical filehandles +- Changed PLP::Functions to use Fcntl for improved portability +- Cleaned up PLP::Fields: removed the PLPdummies +- Fixed DELETE, EXISTS and FIRSTKEY in PLP::Tie::Delay (added PLPdummy there) + 3.12 - May 18, 2002 - Fixed strict-violation in PLP.pm that happened only without mod_perl diff --git a/MANIFEST b/MANIFEST index e2bb0f2..84c9d83 100644 --- a/MANIFEST +++ b/MANIFEST @@ -4,7 +4,9 @@ MANIFEST PLP.pm README plp.cgi +plp.vim test.pl +PLP/FAQ.pod PLP/Fields.pm PLP/Functions.pm PLP/Tie/Delay.pm diff --git a/PLP.pm b/PLP.pm index ab50f55..3efbfdb 100644 --- a/PLP.pm +++ b/PLP.pm @@ -1,4 +1,6 @@ -package PLP; +#--------------# + package PLP; +#--------------# use v5.6; @@ -10,7 +12,7 @@ use PLP::Tie::Print; use strict; -our $VERSION = '3.12'; +our $VERSION = '3.13'; # subs in this package: # sendheaders Send headers @@ -219,6 +221,7 @@ sub start { PLP::Fields::doit(); { package PLP::Script; + use vars qw(%headers %header %cookies %cookie %get %post %fields); *headers = \%header; *cookies = \%cookie; PLP::Functions->import(); @@ -321,6 +324,113 @@ 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. +=head2 PLP Syntax + +=over 22 + +=item C<< <: perl_code(); :> >> + +With C<< <: >> and C<< :> >>, you can add Perl code to your document. This is +what PLP is all about. All code outside of these tags is printed. It is +possible to mix perl language constructs with normal HTML parts of the document: + + <: unless ($ENV{REMOTE_USER}) { :> + You are not logged in. + <: } :> + +C<< :> >> always stops a code block, even when it is found in a string literal. + +=item C<< <:= $expression :> >> + +Includes a dynamic expression in your document. The expression is evaluated in +list context. Please note that the expression should not end a statement: avoid +semi-colons. No whitespace may be between C<< <: >> and the equal sign. + +C<< foo <:= $bar :> $baz >> is like C<< <: print 'foo ', $bar, ' baz'; :> >>. + +=item C<< <(filename)> >> + +Includes another file before the PLP code is executed. The file is included +literally, so it shares lexical variables. Because this is a compile-time tag, +it's fast, but you can't use a variable as the filename. You can create +recursive includes, so beware of that! Whitespace in the filename is not +ignored so C<< <( foo.txt)> >> includes the file named C< foo.txt>, including +the space in its name. A compile-time alternative is include(), which is +described in L. + +=back + +=head2 PLP Functions + +These are described in L. + +=head2 PLP Variables + +=over 22 + +=item $ENV{PLP_NAME} + +The URI of the PLP document, without the query string. (Example: C) + +=item $ENV{PLP_FILENAME} + +The filename of the PLP document. (Example: C) + +=item $PLP::VERSION + +The version of PLP. + +=item $PLP::DEBUG + +Controls debugging output, and should be treated as a bitmask. The least +significant bit (1) controls if run-time error messages are reported to the +browser, the second bit (2) controls if headers are sent twice, so they get +displayed in the browser. A value of 3 means both features are enabled. The +default value is 1. + +=item $PLP::ERROR + +Contains a reference to the code that is used to report run-time errors. You +can override this to have it in your own design, and you could even make it +report errors by e-mail. The sub reference gets two arguments: the error message +as plain text and the error message with special characters encoded with HTML +entities. + +=item %header, %cookie, %get, %post, %fields + +These are described in L. + +=back + +=head2 Things that you should know about + +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). + +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 +efficiency. To set headers, you must assign to C<$header{ $header_name}> before +any output. This means the opening C<< <: >> have to be the first characters in +your document, without any whitespace in front of them. If you start output and +try to set headers later, an error message will appear telling you on which +line your output started. + +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 + and ). + +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 +yourself when there are newer versions. + +The special hashes are tied hashes and do not always behave the way you expect, +especially when mixed with modules that expect normal CGI environments, like +CGI.pm. Read L for information more about this. + =head1 WEBSITE For now, all documentation is on the website. Everything will be POD one day, @@ -329,7 +439,7 @@ but until that day, you will need to visit http://plp.juerd.nl/ =head1 FAQ A lot of questions are asked often, so before asking yours, please read the -FAQ that is located at http://plp.juerd.nl/faq.plp +FAQ at L. =head1 NO WARRANTY diff --git a/PLP/FAQ.pod b/PLP/FAQ.pod new file mode 100644 index 0000000..2aac805 --- /dev/null +++ b/PLP/FAQ.pod @@ -0,0 +1,119 @@ +=head1 Frequently Asked Questions about PLP + +=over 10 + +=item What does PLP stand for? + +PerlPage. The name used to be HTMPL, but HyperText Markup with Perl Language was too long. + +=item Is PLP hard to install? + +No, it actually is very simple and easy. Quick startup hints are in the PLP main +documentation, extensive installation instructions are on the PLP website. + +=item Is Perl code harder than PHP code? + +Yes, it is. But when you get used to Perl, you will probably dislike PHP for +the rest of your life. Perl is faster and far more powerful. For both Perl +beginners and more advanced Perl coders, PerlMonks is a good Perl forum community. +(Please note: PLP is not Perl. Perl is a complete programming language and is +not restricted to web based applications. PLP B Perl, but many people +use Perl without PLP. + +=item Can PLP be used with mod_perl? + +Yes. As of 3.00, PLP can be used with mod_perl! And it's very fast! + +=item You seem to promote dirty programming. Can I use strict with PLP? + +PLP can be used for quick-and-dirty hacks in a way similar to PHP. However, it +is suitable for larger applications as well. You can use strict if you want. +mod_perl Users might like to know that globals are automatically destroyed (as +long as you do not switch packages). + +=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. + +=item I already use mod_perl, 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 +design, you can add a little more speed. + +=item Can I use Perl's CGI module with PLP? + +You certainly can! If you do not want %get and %post and the like, just not use +them. They will be generated on first access, so if you never access them, the +hashes are never filled. + +If you want to use CGI.pm's header functions, C