我可以建议 HTML::Template:Compiled (但请注意我是作者 ;-)
它与 HTML::Template 非常兼容,但具有附加功能。
支持复杂的数据结构
是的
良好的错误报告和调试功能。
您可以调试缓存命中、未命中、自动将模板文件名添加到输出,并且可以对存储中的当前变量(或任何变量)使用过滤器“DUMP”。如果它很容易实现,我会很乐意添加更多有用的调试。
稳定且经过验证(无 alpha/beta 级引擎)
我现在认为它很稳定,有记录的限制/错误(例如 query())
可扩展(插件等)
支持转义(过滤器)插件等,尽管后者的文档还没有很好。
不应仅限于给定的语言(html 等)
是的
支持 IF/Else、循环(foreach while)、循环索引等。
是的
最好是perl
是的
支持模板中的数据转储器或等效插件是一个加号
如上所述,使用 escape=dump
所有附加功能都列在文档中:
https ://metacpan.org/release/HTML-Template-Compiled
at "ADDITIONAL FEATURES"
编辑:关于报告运行时错误:不幸的是,H::T::C 也不会报告在运行时发生的错误的模板行号,因为它将模板编译为 perl 代码(我想我曾经尝试过操纵行号,也许我会再看看)。使用正确的行号报告模板语法错误。
edit2:所以这是一个带有新选项警告和 line_info 的示例:
t/模板/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