Text::Xslate::Manual::Debugging - Debugging techniques for Xslate templates
This document describes techniques for debugging templates.
verbose => 2
Try verbose => 2 in the first step. This option enables full warnings, especially warnings related to undef.
undef
Xslate messages include file names, line numbers, and, if possible, source code lines which seems problems.
You can also access the file name and the line number in templates by __FILE__ and __LINE__ tokens just like as Perl.
__FILE__
__LINE__
If you want reports files and lines from your registered functions, Text::Xslate->current_file and Text::Xslate->current_line in callbacks are the same as __FILE__ and __LINE__ in templates respectively.
Text::Xslate->current_file
Text::Xslate->current_line
sub my_sqrt { my($n) = @_; if($n < 1) { # return a message instead of warnings return sprintf "!!! Can't take sqrt of $n at %s line %d !!!", Text::Xslate->current_file, Text::Xslate->current_line; } return sqrt($n); } my $tx = Text::Xslate->new( function => { sqrt => \&my_sqrt }, );
You can use any dumping modules via the function option, but Xslate has a builtin dump filter to dump template values.
function
dump
<: $value | dump # Dump $value with Data::Dumper :>
Xslate itself has warning system for use of uninitialized values, but sometimes it is not enough.
If you want fill in some string, e.g. FILL ME, for missing variables, you can use the hash_with_default() utility. For example:
hash_with_default()
use Text::Xslate::Util qw(hash_with_default); $tx->render($name, hash_with_default(\%vars, sub { "FILL ME '@_' " }) );
Note that this is really slow because it is a tied-hash wrapper.
You can customize error handlers by warn_handler and die_handler. In these handlers, you can call Text::Xslate->print() method in order to add your custom messages to the output buffer, which makes debugging easier.
warn_handler
die_handler
Text::Xslate->print()
#!perl -w use strict; use Text::Xslate; my %vpath = ( hello => 'Hello, <: $lang :> world!' . "\n", ); my $tx = Text::Xslate->new( path => \%vpath, verbose => 2, warn_handler => sub { Text::Xslate->print('[[', @_, ']]') }, ); print $tx->render('hello', { }); # => Hello, [[use nil to print at ...]] world!
Text::Xslate
Text::Xslate::Manual
To install Text::Xslate, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Text::Xslate
CPAN shell
perl -MCPAN -e shell install Text::Xslate
For more information on module installation, please visit the detailed CPAN module installation guide.