Introducing here
I've just published the first release of the here module, a mechanism for safely inserting generated code into a compiling program. this can be used to write macros, cut down on boiler plate, and to implement new declarations, all without ever having to parse any perl source code.
you operate on code as data, as you normally would when metaprogramming. then a call to use here $generated_code; injects that code into the compiling source
sub my_0 {map "my \$$_ = 0", @_} # a simple macro
use here my_0 qw(x y z);
results in perl compiling
my $x = 0; my $y = 0; my $z = 0;
and all of those variables are of course in scope after the use here line.
an example module using here is here::declare, which provides compile time assignment to lexical variables as well as a shortcut for defining constants.
use here::declare;
use my '@foo' => [1, 2, 3];
results in perl compiling
my @foo; BEGIN {@foo = (1, 2, 3)}
or to define a constant:
use const2 DEBUG => 1;
which results in:
sub DEBUG () {1} our $DEBUG; BEGIN {*DEBUG = \DEBUG}
giving you both the $DEBUG constant scalar, and the DEBUG constant subroutine with one simple declaration.
feedback welcome.
This is just awesome!!!