NAME
Text::APL - non-blocking and streaming capable template engine
SYNOPSIS
Simple example
$template->render(
input => \$input,
output => \$output,
vars => {foo => 'bar'}
);
Streaming example
$template->render(
input => sub {
my ($cb) = @_;
# Call $cb($data) when data is available
# Call $cb->() on EOF
},
output => sub {
my ($chunk) = @_;
# Print $chunk to the needed output
# $chunk is undef when template is fully rendered
},
vars => {foo => 'bar'}
);
DESCRIPTION
This is yet another template engine. But compared to others it supports non-blocking (read/write) and streaming output.
Reader/Writer
Reader and writer can be a subroutine references reading from any source and writing output to any destination. Sane default implementations for reading from a string, a file or file handle and writing to the string, a file or a file handle are also available.
Parser
Parser can parse not only full templates but chunk by chunk correctly resolving any ambiguous leftovers. This allows immediate parsing.
This for example works just fine:
$parser->parse('<% $hello');
$parser->parse(' %>');
Compiler
Compiler compiles templates into Perl code but when evaluating does not create a Perl string that accumulates all the template output, but rather provides a special print
function that pushes the content as soon as it's available (streaming).
The generated Perl code can looks like this:
Hello, <%= $nickname %>!
# becomes
__print(q{Hello, });
__print_escaped(do {$foo});
__print(q{!});
SYNTAX
Syntax is borrowed from the template standards shared among several web framewoks in different languages:
<% foo() %> # evaluate code
% foo()
<%= $foo %> # insert evaluation result
%= $foo
<%== $foo %> # insert evaluation result without escaping
%== %foo
No new template language is provided, just the old Perl.
METHODS
new
my $template = Text::APL->new;
Create new Text::APL instance.
Accepted options:
parser (by default Text::APL::Parser)
translator (by default Text::APL::Translator)
compiler (by default Text::APL::Compiler)
reader (by default Text::APL::Reader)
writer (by default Text::APL::Writer)
render
$template->render(
input => \$input,
output => \$output,
vars => {foo => 'bar'},
helpers => {
time => sub {time}
}
);
input
and output
can be a filename, a reference to scalar, a file handle and a reference to subroutine. Read more at Text::APL::Reader and Text::APL::Writer.
vars
are Perl variables available in the template.
helpers
are Perl subroutines. available in the template.
EXAMPLES
For working examples see examples/
directory in distribution.
DEVELOPMENT
Repository
http://github.com/vti/text-apl
AUTHOR
Viacheslav Tykhanovskyi, vti@cpan.org
.
COPYRIGHT AND LICENSE
Copyright (C) 2012-2017, Viacheslav Tykhanovskyi
This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.