Eval::TypeTiny::CodeAccumulator - alternative API for Eval::TypeTiny
my $make_adder = 'Eval::TypeTiny::CodeAccumulator'->new( description => 'adder', ); my $n = 40; my $varname = $make_adder->add_variable( '$addend' => \$n ); $make_adder->add_line( 'sub {' ); $make_adder->increase_indent; $make_adder->add_line( 'my $other_addend = shift;' ); $make_adder->add_gap; $make_adder->add_line( 'return ' . $varname . ' + $other_addend;' ); $make_adder->decrease_indent; $make_adder->add_line( '}' ); my $adder = $make_adder->compile; say $adder->( 2 ); ## ==> 42
This module is covered by the Type-Tiny stability policy.
new( %attrs )
The only currently supported attribute is description.
description
env()
Returns the current compilation environment, a hashref of variables to close over.
code()
Returns the source code so far.
description()
Returns the same description given to the constructor, if any.
add_line( $line_of_code )
Adds the next line of code.
add_gap()
Adds a blank line of code.
increase_indent()
Increases the indentation level for subsequent lines of code.
decrease_indent()
Decreases the indentation level for subsequent lines of code.
add_variable( $varname, $reference_to_value )
Adds a variable to the compilation environment so that the coderef being generated can close over it.
If a variable already exists in the environment with that name, will instead add a variable with a different name and return that name. You should always continue to refer to the variable with that returned name, just in case.
add_placeholder( $placeholder_name )
Adds a line of code which is just a comment, but remembers its line number.
fill_placeholder( $placeholder_name, $line_of_code )
Goes back to a previously inserted placeholder and replaces it with code.
Currently doesn't play nice with indentation.
compile()
Compiles the code and returns it as a coderef.
finalize()
This method does nothing but is called by compile just before compiling the code. It may be useful if subclassing this class.
compile
Please report any bugs to https://github.com/tobyink/p5-type-tiny/issues.
Eval::TypeTiny.
Toby Inkster <tobyink@cpan.org>.
This software is copyright (c) 2022 by Toby Inkster.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
To install Type::Tiny, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Type::Tiny
CPAN shell
perl -MCPAN -e shell install Type::Tiny
For more information on module installation, please visit the detailed CPAN module installation guide.