NAME
PLP::Functions - Functions that are available in PLP documents
DESCRIPTION
The functions are exported into the PLP::Script package that is used by PLP documents. Although uppercased letters are unusual in Perl, they were chosen to stand out.
Most of these functions are context-hybird. Before using them, one should know about contexts in Perl. The three major contexts are: void, scalar and list context. You'll find more about context in perlfunc.
Some context examples:
print foo(); # foo is in list context (print LIST)
foo(); # foo is in void context
$bar = foo(); # foo is in scalar context
@bar = foo(); # foo is in list context
length foo(); # foo is in scalar context (length EXPR)
The functions
- Include FILENAME
-
Executes another PLP file, that will be parsed (i.e. code must be in
<: :>
). As with Perl'sdo
, the file is evaluated in its own lexical file scope, so lexical variables (my
variables) are not shared. PLP's<(filename)>
includes at compile-time, is faster and is doesn't create a lexical scope (it shares lexical variables).Include can be used recursively, and there is no depth limit:
<!-- This is crash.plp --> <: include 'crash.plp'; # This example will loop forever, # and dies with an out of memory error. # Do not try this at home. :>
- include FILENAME
-
An alias for
Include
. - PLP_END BLOCK
-
Adds a piece of code that is executed when at the end of the PLP document. This is useful when creating a template file:
<html><body> <!-- this is template.plp --> <: PLP_END { :> </body></html> <: } :> <(template.plp)> <!-- this is index.plp --> Hello, world!
You should use this function instead of Perl's built-in
END
blocks, because those do not work properly with mod_perl. - EscapeHTML STRING
-
Replaces HTML syntax characters by HTML entities, so the text can be output safely. You should always use this when displaying user input (or database output), to avoid cross-site-scripting vurnerabilities.
In void context, changes the value of the given variable.
<: EscapeHTML($user_input); print "<pre>$user_input</pre>"; :>
In other contexts, returns the changed version.
<a href="<:= EscapeHTML($ENV{REQUEST_URI}) :>">
Be warned that single quotes are not substituted, so always use double quotes for attributes. Also does not convert whitespace for formatted output; use Entity() for that.
To escape high-bit characters as well, refer to HTML::Entities.
- Entity LIST
-
Formats given arguments for literal display in HTML documents. Similar to EscapeHTML(), but also preserves newlines and consecutive spaces using corresponding
<br>
and
respectively.In void context, changes the values of the given variables. In other contexts, returns the changed versions.
<: print '<p>' . Entity($user_input) . '</p>'; :>
Inside attributes, always use EscapeHTML() instead.
- EncodeURI LIST
-
Encodes URI strings according to RFC 3986. All disallowed characters are replaced by their %-encoded values.
In void context, changes the values of the given variables. In other contexts, returns the changed versions.
<a href="/foo.plp?name=<:= EncodeURI($name) :>">Link</a>
Note that the following reserved characters are not percent-encoded, even though they may have a special meaning in URIs:
/ ? : @ $
This should be safe for escaping query values (as in the example above), but otherwise it may be a better idea to use URI::Escape instead.
- DecodeURI LIST
-
Decodes %-encoded strings. Unlike URI::Escape, it also translates + characters to spaces (as browsers use those).
In void context, changes the values of the given variables. In other contexts, returns the changed versions.
- ReadFile FILENAME
-
Returns the contents of FILENAME in one large string. Returns undef on failure.
- WriteFile FILENAME, STRING
-
Writes STRING to FILENAME (overwrites FILENAME if it already exists). Returns true on success, false on failure.
- Counter FILENAME
-
Increases the contents of FILENAME by one and returns the new value. Returns undef on failure. Fails silently.
You are visitor number <:= Counter('counter.txt') :>.
- AutoURL STRING
-
Replaces URLs (actually, replace things that look like URLs) by links.
In void context, changes the value of the given variable. In other contexts, returns the changed version.
<: print AutoURL(Entity($user_input)); :>
- AddCookie STRING
-
Adds a Set-Cookie header. STRING must be a valid Set-Cookie header value.
AUTHOR
Juerd Waalboer <juerd@cpan.org>
Current maintainer: Mischa POSLAWSKY <shiar@cpan.org>