我需要编写一个简单的模板系统,使用两种类型的宏 - 变量(如<% TPL name=userName %>
)和函数(如<% TPL func=time param=now %>
或<% TPL func=rand %>
)。在简单的Perl模板系统中编译模板
这一切都很好,但我需要添加模板编译。我想替换变量宏用Perl变量(<% TPL name=userName %>
到$userName
或$vars->{userName}
)和功能"Some text $rand->() blah blah"
或"Some text $func->{time}->('now') and blah blah blah"
。
我做到了变量:
my $tpl = eval 'sub { my $vars = shift; "Hello, $vars-{userName}!" }';
return $tpl->({ userName => 'John' });
,但我不知道如何做到这一点的功能。此代码不起作用:
my $tpl = eval 'sub { my $func = shift; "Today is $func->{time}->('day')" }';
return $tpl->({ time => \&_time });
如何获取函数的工作方式?
附:我不需要另一个模板系统(TT,HTML ::模板或其他)
拥有一批坚实的模板的在Perl中可用的选项,写另一个可以使用更多的理由。您遇到的挑战是考虑现有替代方案的另一个原因。 – 2012-08-03 19:28:01
如果你不使用CPAN模块,你至少可以看看它们是如何实现的。 – 2012-08-03 19:46:07
制作模板系统很难;你为什么试图创造自己的? – 2012-10-13 00:12:06