2013-07-23 84 views
0

我是一個剛剛走出大學C++世界的新手,所以如果問題看起來太「簡單」或者如果我使用了任何不正確的術語,請與我一起裸露。如何基於Perl腳本創建網站?

我試圖學習Perl,然後我寫了一個腳本,試圖找到給定課程名稱的所有可能的時間表,其中可能的時間表意味着在課程時間之間不存在通過遍歷所有部分的衝突。

我抓取了我的大學課程安排,並將它們放置在雜亂的數據結構哈希中,以將哈希映射到二維數組,其中第一個哈希表示主題,第二個哈希表示課程編號,然後是每個部分都是所有數據的數組。 (不是最有吸引力的數據結構)

然後,我通過遍歷所有可能的計劃組合處理所有計劃組合,並返回沒有發生衝突的所有計劃作爲3D數組(每個計劃都是計劃並且每個計劃都有課程和每門課程都有其具體數據)

現在,我可以在腳本中將輸入硬編碼爲二維數組,其中每個元素由主題名稱和課程編號組成。

我現在想要做的就是把它變成一個網站。

我參加了一個關於數據庫的在線課程,但我不知道如何從Perl處理數據庫或者這是否是一種好方法。

我不知道如何永久存儲數據,因此可以將其用於進一步的計算。

我知道基本的HTML和CSS和Javascript,但我不知道如何將腳本與它們集成並從用戶處獲取輸入(我只知道如何在Javascript中執行此操作)。谷歌引導我走向「CGI腳本」,但我對服務器一無所知,只是他們負責網站的計算,其中一個名爲Apache或AJAX。我不確定這是否是真實的,但我想給你一個我的專業水平的想法。

請您告訴我爲了能夠製作本網站我需要學習什麼才能朝正確的方向指引我。任何幫助,將不勝感激。

回答

3

我參加了一個關於數據庫的在線課程,但我不知道如何從Perl處理數據庫或者這是否是一種好方法。

Perl中的數據庫訪問通過DBI完成。你可以使用DBIx::Class來獲得一個很好的OO抽象。

我不知道如何永久存儲數據,因此可以將它用於進一步的計算。

數據庫是一個不錯的選擇。

我知道基本的HTML和CSS和Javascript,但我不知道如何將腳本與它們集成並從用戶處獲取輸入(我只知道如何在Javascript中執行此操作)。

使用<form>。將action設置爲服務器端程序的URL。提交表單。

Google引導我走向「CGI腳本」,但我對服務器沒有任何意見,只是他們負責網站的計算,其中一個名爲Apache或AJAX。我不確定這是否是真實的,但我想給你一個我的專業水平的想法。

HTTP服務器偵聽HTTP請求並提供HTTP響應。瀏覽器(以及搜索引擎和其他客戶端)向託管網站的服務器發出HTTP請求。服務器響應呈現網站所需的數據(HTML,CSS,JavaScript,圖像等),客戶端呈現它(或索引它,或其他)。

Apache HTTPD是最常用的HTTP服務器之一。

CGI是HTTP服務器可以通過運行程序而不是僅僅移交靜態文件來確定要響應什麼的方式。這非常簡單,但效率不高。在this answer中描述了一些替代方案。

阿賈克斯與此無關。這意味着「在網頁中使用JavaScript來告訴瀏覽器發出一個新的HTTP請求(不離開頁面),並將響應提供給JavaScript」。

2

這將是一個局部/模糊的回答..

對於數據庫,你想要做的是學會使用DBI這是一個數據庫實現獨立的API交談數據庫(它甚至可以寫入csv文件!)。您還需要一個驅動程序來選擇您的數據庫。

至於網站,這是超出我的技能,有很多方法可以做到這一點。 Perl將通過名爲CGI的東西用於服務器端。另一方面,Javascript通常在客戶端進行處理,並用於將動態元素添加到您的網站。 Apache是​​一個網絡服務器軟件,它負責與您的瀏覽器通話並傳遞相關的html頁面,您可能需要使用它,但對於基本用例,您不需要編寫任何代碼。

對於perl網頁,您可以從this tutorial開始更好地理解,然後查看perl monks以獲得更好的(和更新的)答案。這篇文章還給你更實用的建議,喜歡使用Dancer

+1

另外,我建議'Dancer'作爲構建簡單網站和服務的微框架。它簡化了很多請求/響應處理,並且在開發過程中可以在內置的Web服務器上進行本地測試。 –

+0

@NeilSlater yup,在我自己的失敗之後,我注意到舞者是第一個認爲perl的僧侶指向..也許不太重視它。 –

1

對於純perl設置,HTTP::DaemonHTTP::Response模塊是你最好的朋友。我試圖寫一個web服務器,只用IO::Socket,幾乎把自己弄瘋了。

入門非常簡單。

use strict; 
use warnings; 
use HTTP::Daemon; 

my %opt = (
    'listen-host' => 'localhost', 
    'listen-port' => 8808, 
); 

my $d = HTTP::Daemon->new(
    LocalPort => $opt{'listen-port'}, 
    LocalAddr => $opt{'listen-host'}, 
    Reuse => 1, 
) or die "HTTP listener failed at $opt{'listen-host'}:$opt{'listen-port'} - $!"; 

print "Started HTTP listener!\n"; 
my $c = $d->accept; 

現在,您的腳本將一直坐在那裏,直到您從瀏覽器獲得連接。當然,您仍然需要發送回覆,所以請參閱HTTP::Response瞭解如何發回數據。

相關問題