
PLP::HowTo - Some examples of common web things in PLP.

Additional Perl functionality is often available in modules. All of the modules used in this document are available (for free) at CPAN: http://search.cpan.org/
<:
BEGIN {
use CGI::Cookie;
AddCookie(
CGI::Cookie->new(
-name => 'ID',
-value => 123456,
-domain => 'foo.com',
-path => '/'
)->as_string
);
}
:>
Your user ID is <:= $cookie{ID} :>
<:
BEGIN {
$header{Content_Type} = 'text/plain';
}
:>
Use DBI, and alternatively, one of the many simplifying modules. Drivers for DBI are in the DBD:: namespace. DBI loads the driver automatically, but it has to be available. If you need a fast full-featured file-base database, use DBD::SQLite, it's the instant database :).
<:
use DBIx::Simple; # and read its documentation for examples.
:>
Use CGI.pm, which can be used with CGI::Upload to make things easier
<:
use CGI; # and don't use %post in your PLP document.
use CGI::Upload; # and read its documentation for examples.
my $cgi = CGI->new;
my $upload = CGI::Upload->new($cgi);
...
:>
<:
use LWP::Simple;
my $page = get 'http://foo.com/bar.html';
:>
This only works with PLP under mod_perl. For CGI installations, it's useless.
<:
use MIME::Base64;
BEGIN {
my $r = Apache->request;
my ($type, $login) = split / /, $r->header_in('Authorization');
my ($user, $pass) = split /:/, decode_base64 $login, 2;
unless ($user eq 'foo' and $pass eq 'bar') {
$header{Status} = '401 Authorization Required';
$header{WWW_Authenticate} = 'Basic realm="Top secret :)"';
print '<h1>Authorization Required</h1>';
exit;
}
}
:>
(It is possible to use something similar with CGI, but it's not easy. Headers are communicated to your script via %ENV, and having credentials in there would be insecure, so Apache removes them. To get $ENV{HTTP_AUTHORIZATION}, you need to recompile Apache with -DSECURITY_HOLE_PASS_AUTHORIZATION, or use mod_rewrite to set the environment variable. Short answer: just use mod_perl.)

If you have good, simple examples of how to do common things with PLP, please send them! <perl@shiar.org>