-
Notifications
You must be signed in to change notification settings - Fork 1
Text::Xslate::Manual::Debugging.ja
Text::Xslate::Manual::Debuggingの日本語訳です。
Text::Xslateのバージョン1.5006から訳出しました。
Text::Xslate::Manual::Debugging - Xslateテンプレートのデバッグ技法
この文書はテンプレートをデバッグする技法について説明しています。
まず最初にverbose => 2
を試してみてください。
このオプションはすべての警告、特にundef
に関係する警告を有効にします。
Xslateのメッセージは、ファイル名と、行番号と、可能であれば問題があると思われるソースコードの行番号を含んでいます。
また、Perlの文法【訳注:特殊リテラル】と同様に、テンプレートへ__FILE__
や__LINE__
というトークンを記すことでも、ファイル名と行番号を知ることができます。
登録した関数からファイル名や行番号を伝えられたい場合には、コールバック内でText::Xslate->current_file
やText::Xslate->current_line
を呼び出すことで、テンプレート内で__FILE__
や__LINE__
を記した場合と、それぞれ同じ結果を得られます。
sub my_sqrt {
my($n) = @_;
if($n < 1) {
# 警告の代わりにメッセージを返す
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 },
);
function
のオプションによって、どんなダンプ用のモジュールも用いることができますが、Xslateはテンプレートで用いられる値をダンプするための組み込みのdump
フィルターを備えています。
<: $value | dump # Data::Dumperを使って$valueをダンプする :>
Xslate自身は未定義値が使用されたときのための警告システムを備えていますが、それは往々にして十分なものではありません。
渡されていない変数を特定するために、何かの文字列、例えばFILL ME
を埋め込みたいときには、hash_with_default()
ユーティリティーを使うことができます。例えば:
use Text::Xslate::Util qw(hash_with_default);
$tx->render($name, hash_with_default(\%vars, sub { "FILL ME '@_' " }) );
これはタイされたハッシュへのラッパーであるので、とても遅いことに気を付けてください。
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!