HTML :: Template:Compiledを提案できます(ただし、私が作成者であることに注意してください;-)
HTML :: Templateと完全に互換性がありますが、追加機能があります。
複雑なデータ構造のサポート
はい
優れたエラー報告およびデバッグ機能。
キャッシュのヒット、ミスをデバッグし、出力にテンプレートファイル名を自動的に追加し、stash内の現在の変数(または任意の変数)にフィルター「DUMP」を使用できます。実装が簡単な場合は、さらに便利なデバッグを追加します。
安定して実績のある(アルファ/ベータレベルのエンジンなし)
文書化された制限/バグ(たとえばquery())で、今は安定していると思います
拡張可能(プラグインなど)
エスケープ(フィルター)プラグインなどをサポートしますが、後者はまだ十分に文書化されていません。
特定の言語(htmlなど)に制限されるべきではありません
はい
IF / Else、ループ(foreach while)、ループインデックスなどのサポート。
はい
できればperl
はい
テンプレート内からのデータダンパーまたは同等のプラグインのサポートはプラスです
上記のように、escape=dumpを使用します
すべての追加機能は、ドキュメントにリストされています:
https :
//metacpan.org/release/HTML-Template-「追加機能」でコンパイル
編集:実行時エラーの報告に関して:残念ながら、H :: T :: Cは、テンプレートをperlコードにコンパイルするため、実行時に発生するエラーのテンプレート行番号も報告しません(行番号の操作を一度実験したと思いますが、多分私は別の外観を持っているでしょう)。テンプレート構文エラーは、正しい行番号で報告されます。
edit2:新しいオプションの警告とline_infoの例を次に示します。
t / templates / line_info1.html:
test
test2
test3
foo:<%= foo %> undef line 4
test4
脚本:
use HTML::Template::Compiled;
my $t = HTML::Template::Compiled->new(
filename => "t/templates/line_info1.html",
warnings => 1,
line_info => 1,
);
say $t->output;
__END__
Use of uninitialized value in concatenation (.) or string at t/templates/line_info1.html line 4.
test
test2
test3
foo: undef line 4
test4