在将模板(模板工具包)作为Perl代码缓存之前,是否可以轻松修改模板(模板工具包)?我想在它上面运行一个正则表达式。
答案 0 :(得分:5)
您可以提供自己的Template::Provider子类标准子类。从精细的手册:
Template :: Provider用于加载,解析,编译和缓存模板文档。这个 对象可以进行细分,以提供更具体的装载设施或其他方式 提供对模板的访问。
所以,它应该很简单,但简单当然在很大程度上取决于你的技能。
答案 1 :(得分:4)
上面的Template :: Provider建议可能是最好的方法。但也有一种更简单(如果稍微有些hacky)的方法。您可以将模板读入标量,并在将模板传递给模板处理器之前对其进行任何转换。
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。