2010-12-14 74 views
1

在将模板作为Perl代码缓存之前,是否可以轻松修改模板(模板工具包)在加载时是否可以轻松修改?我想运行一个正则表达式。TT模板的修改

回答

5

你可以提供你自己的Template::Provider,它是一个标准的子类。来自精细的手册:

Template :: Provider用于加载,分析,编译和缓存模板文档。这个对象可以被分类以提供用于加载的更具体的设施,否则提供对模板的访问。

所以,它应该是很容易的,但容易,当然,在很大程度上取决于你的技能。

4

上面的Template :: Provider建议可能是最好的方法。但也有一个更简单的(如果有点冒险的)方法。您可以将模板读入标量,并在将其传递给模板处理器之前对其执行任何所需的转换。

my $tt = Template->new; 

open my $template_fh, '<', 'template.tt' or die $!; 
my $template = do { local $/; <$template_fh> }; 

$template =~ s/some regex/some replacement/; 

my $vars = { template => 'variables' }; 

$tt->process(\$template, $vars) or die $tt->error; 

秘诀在于process()方法将各种类型的值作为其第一个参数。如果你给出了一个标量,那么它被认为是包含该模板的文件的名称。但是,如果它是对标量的引用,那么它会假定该标量包含实际的模板。有关更多详细信息,请参见the documentation