NAME
Syntax::Keyword::PhaserExpression - phasers as arbitrary expressions
rather than blocks
SYNOPSIS
use Syntax::Keyword::PhaserExpression;
if( BEGIN $ENV{DEBUG} ) {
printf STDERR "Here's a debugging message> %s\n", gen_debug();
}
DESCRIPTION
This module provides a syntax plugin that alters the behaviour of
perl's BEGIN keyword. This allows hoisting an expression to be
evaluated at compile-time, and replace its result into the compiled
code. This may be useful for performance, to avoid otherwise-expensive
calls whose value won't change, or to inline constants for other
performance-related benefits.
There may also be situations where it is useful to have expressions
evaluated early enough in compiletime so that their effects can
influence the compilation of later code.
KEYWORDS
BEGIN
BEGIN expr...
An expression prefixed with the BEGIN keyword is evaluated as soon as
it is compiled. The scalar result is then captured and inlined, as a
constant, into the surrounding code.
As the expression is not a full block, it does not create a surrounding
scope that hides lexical variables inside it. This can be useful for
assigning a value to a variable at compiletime so that later
compiletime expressions can see its value.
BEGIN my $arg = "the value";
use Some::Module arg => $arg;
Note that the expression may not start with an open brace ({)
character, as that is used by regular Perl's BEGIN block. This module
does not replace that syntax.
TODO
* Implement some other phaser keywords. CHECK and INIT might be
useful. Not END for obvious reasons. ;)
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>