Perl WEB 開發之 Template

由於工作需要, 最近開始使用Perl來作爲服務器腳本來處理Web 請求。系統採用的Template 來做Web page 的模板,用來簡化繁瑣但並不困難的HTML標籤的編寫。

Question 1: Template Toolkit 是啥?

Template Toolkit是一組Perl Module的集合, 它實現了一種快速的、靈活的、功能強大模板處理系統(Template Process System). 它主要用於生成動態的WEB內容,當然,它也可以被用來處理任何其他的文本信息。簡單來說, Template Toolkit首先提供了一種簡單的方式,用來將模板中的變量替換成其對應的值, 類似於其他編程語言中的變量賦值,當然其二者間有很大的差別。

例子:

Dear [% name %],

It has come to our attention that your account is in arrears to the sum of [% debt %].

Please settle your account before [% deadline %] or we  will be forced to revoke your Licence to Thrill.

The Management.


 

默認情況下, 在Template源文件中, template directives被嵌入到由字符序列“[%...%]”標記的塊中。當然,你可以自己配置這種標記序列,同時也可以更改其它方面的配置。比如, 你可以設置INTERPOLATE選項的值,以perl的方式來嵌入你的變量:

Dear $name,

It has come to our attention that your account is in

arrears to the sum of $debt.

...etc...

Template Module 是啥?

 

剛剛初步瞭解了Template Toolkit的含義, 下面開始介紹Template Module。如果要對應到實際的物理文件,就是CPAN上的Template.pm。 概括來說, Template Module 提供了一個Template Toolkit的接口, 其他的Perl可以使用該接口集合來在perl 腳本里面方便的調用Template Toolkit的功能。

簡單的Template 接口:

new(/%config):

構造函數(由Template 的base class Template::Base 來實現)。其參數是一個用於存放該新建的Template配置的一個Hash結構。

 

 my $tt = Template->new({
INCLUDE_PATH => '/usr/local/templates',
EVAL_PERL => 1,
}) || die $Template::ERROR, "/n";
process($template, /%vars, $output, %options
): 該函數被調用用來處理一個Template。
第一個參數爲指向Template 文件的相對於INCLUDE_PATH的相對文件名, 也可以是包含了Template Text的字符串的引用,
或者是一個File handle(IO::Handle 或 sub-class)或 GLOB(如:/*STDIN)。
第二個參數是一個reference to Hash變量, 他包含了Template中需要的變量的定義。
第三個參數支持process函數處理完成的結果被輸出到哪裏[默認可選]。 
默認的情況, STDOUT是被使用。 也可通過這個參數和OUTPU_PATH共同來決定輸出到什麼位置,某個文件、字符串或File Handle
第四個參數同樣是一個可選參數, 用來進一步來設定process過程的輸出選項。目前僅有一個選項可用 binmode來指定是否以2進制方式輸出。
# either: hash reference of options
$tt->process($infile, $vars, $outfile, { binmode => 1 })
|| die $tt->error(), "/n";

# or: list of name, value pairs
$tt->process($infile, $vars, $outfile, binmode => 1)
|| die $tt->error(), "/n";
error():
當以Class Method被調用的時候, 返回Package variable $ERROR, 所以如下兩種表達方式所得到的結果一致:
my $tt = Template->new()
|| die Template->error(), "/n";

my $tt = Template->new()
|| die $Template::ERROR, "/n";
service(): 
Template Module 用來處理模板的時候,會將大多數任務交與底層的Template::Service來處理,而該函數會返回Template::Service對象的引用。
context(): Template::Service在運行時處理templates的時候,會依靠一個核心的Template::Context對象,這個方法返回指向這個對象的引用,它相當於調用
$template->service->context();
 
 
 
 
 
 
 
 
 
 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章