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
andINIT
might be useful. NotEND
for obvious reasons. ;)
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>