2010-09-04 21 views
7

我在線研究並發現了幾個有趣的Perl模塊/框架,比如HTML:Mason,HTML :: Embperl或者MVC Catalyst框架等,它可以讓我在裏面嵌入Perl HTML,類似於HTML內的PHP代碼。在HTML中嵌入Perl的最簡單的方法

但是,我的Perl項目必須上傳到uni服務器,只有有限的特權和資源提供。

例如,Apache版本1.3.3 & Perl版本5.8.0(低於催化劑的需求)

我用一個腳本來檢查所有已安裝Perl模塊,只有那些名稱中包含單詞「HTML」 :

HTML::HeadParser 2.17 
HTML::Entities 1.23 
HTML::Filter 2.09 
HTML::LinkExtor 1.31 
HTML::Parser 3.26 
HTML::PullParser 2.06 
HTML::TokeParser 2.24 
HTML::Tagset 3.03 
HTML::Form 0.03 

恐怕他們都不能讓我直接將Perl嵌入到html中。

我知道我可以同時使用簡單的print語句「定界符」打印一切html頁面的Perl/CGI裏面,但我認爲這違反了MVC設計模式,並且不太靈活,更復雜的發展,主要是因爲現在業務邏輯與html標記混淆了。

我目前的解決方案是使用jQuery來觸發AJAX請求,以將HTML加載到客戶端的特定標籤中。因此,在這種情況下,Perl僅用於提供服務器端數據訪問,操縱相關數據併爲AJAX請求提供JSON格式的響應。

我不知道有沒有更好的方法來做到這一點?我幾乎無法改變服務器狀態,我不認爲系統管理員會安裝任何其他Perl模塊。

更新的信息:

嵌入的Perl到HTML的主要原因是,我是很新的CGI編程,而且因爲我比較熟悉PHP和jQuery的,我想知道是否有是將Perl直接嵌入到html中的一種正確方式,所以我可以非常快速地完成客戶端部分並專注於服務器端。

說,這樣的事情:

<div id='user_status'>Your last visit was :[% getLastVisitDateTime($userId)%]</div> 

請提前我的Perl/CGI和許多感謝的小知識,以幫助承擔。

更新第二: 其次,我安裝我自己的MacBook Pro本模塊的模板工具包網站指令,但遺憾的是我不能由於權限原因,安裝到UNI的服務器:

Warning: You do not have permissions to install into 
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi 
at /usr/lib/perl5/5.8.0/ExtUtils/Install.pm line 84. 
mkdir /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread- 
multi/auto/Template: Permission denied at /usr/lib/perl5/ 
5.8.0/ExtUtils/Install.pm line 137 
make: *** [pure_site_install] Error 255 

所以,不幸的是我我現在正在尋找其他方式...

好吧,看來HTML ::梅森不能因爲同樣的原因安裝。因此恐怕我必須找到一個.pm唯一的解決方案,以便我不必在uni服務器的perl環境中安裝任何東西...

+0

如果要全局安裝Perl模塊,則需要root權限 – 2010-09-04 20:14:40

回答

3

Perl模塊不必由管理員安裝。如果您將Perl指向正確的位置,它們可以從任何地方找到並運行。

對於只包含Perl代碼(。pm)並且沒有編譯代碼,這就像上傳正確目錄結構中的.pm文件到您的網站一樣簡單。

+0

我認爲你是對的,但我現在也確定沒有足夠的權限可以自行安裝Template Toolkit或HTML :: Mason或其他模板/嵌入式Perl模塊。是否有一些基於.pm的模塊可以讓我完成我的任務? – 2010-09-04 15:26:55

+1

恐怕我不是這些模塊中的任何一個的專家。然而,看看你上面的第二個更新,你會得到權限錯誤,因爲你試圖在全局安裝模塊。你不必這樣做。如果你能找到合適的魔法來設置它,你可以將它們安裝到本地。你有沒有試過只是將包含.pm文件的目錄樹手工拷貝到服務器上(忘記「make install」等)? – 2010-09-06 08:26:27

5

不要將Perl嵌入到HTML中。使用模板系統,如模板工具箱或HTML ::模板。它們可以直接複製到服務器(如果您不使用XS存儲器進行TT)或下載此操作系統的OS和解壓縮端口。

+0

+1模板工具包。 – 2010-09-04 11:39:11

+0

我想學習模板工具包或其他模板系統,但我這個小項目的時間有限。我對Perl的CGI編程非常陌生,所以我寧願將Perl嵌入到像PHP這樣的html中,這樣我就可以花更多的時間專注於服務器端的業務邏輯部分。 – 2010-09-04 14:32:40

+1

@Michael Mao:HTML :: Template的語法非常簡單。另請看Mojo :: Template - 它使用Perl作爲模板。 – 2010-09-04 20:15:40

1

如果您具有編譯器訪問權限和對主機的訪問權限,那麼您可以使用local::lib來避免與系統perl有任何關係。

+0

@singingfish:嘆息......這隻能讓我發現有太多的模塊在那裏失蹤或太舊...非常難以升級的一切(這是UNI,無論如何,我能做什麼?):( – 2010-09-05 01:38:28

+0

這並沒有什麼意義,除非你對硬盤配額感到困難,local :: lib應該可以工作,我喜歡用cpanminus來使它更快更簡單 – singingfish 2010-09-06 02:33:53

4

如果您真的需要需要將Perl嵌入到HTML中,那麼可能值得看看Mojo::Template

它的簡約和非常簡單的Perl上下的模板引擎,是Mojo項目,這意味着即使是在原始的Perl安裝所有你需要做的是部分:

1.下載源。示例使用Git(創建魔力在當前目錄文件夾):

git clone git://github.com/kraih/mojo.git 

2.而在你的程序中使用魔庫。對於如:

#!/usr/bin/env perl 
use strict; 
use warnings; 

use lib './mojo/lib'; # git clone here 
use Mojo::Template; 
my $mt = Mojo::Template->new; 

print $mt->render_file('simple_template.html', 'Title text', 'Header text'); 

與示例模板稱爲simple_template.html

<html> 
% my ($title, $header) = @_; 
<head> 
    <title><%= $title %></title> 
</head> 
<body> 
    <h1><%= $header %></h1> 
    <ul> 
     <% for my $i (1..5) { %> 
      <li>item <%= $i %></li> 
     <% } %> 
    </ul> 
</body> 
</html> 

這個工作沒有夜長夢多,我在剛編譯的Perl 5.12.2。

NB。不要忘記,你也可以免費獲得完整的網頁框架Mojo/Mojolicious


免責聲明

像其他的答案在這裏,我通常避開使用嵌入HTML的Perl模塊像Mojo::TemplateTenjinHTML::Embperl等。我的偏好一直是去尋找像Template Toolkit這樣的更通用的模板系統。

但是我一直在朝着越來越爲HTML生成器的解決方案,有時像推風格模板模塊,這兩個SO提問/回答:

/I3az/