2

我试图学习 Perl,然后我最终编写了一个脚本,试图找到给定课程名称的所有可能的时间表,其中可能的时间表意味着通过遍历所有部分,课程时间之间没有冲突。

我爬取了我的大学课程表,并将它们放在一个杂乱的数据结构哈希到一个二维数组的哈希中,其中第一个哈希表示主题,第二个哈希表示课程编号,然后是一个部分数组,其中每个部分都是一个数组数据。(不是最吸引人的数据结构)

然后,我通过遍历所有可能的时间表组合来处理所有时间表组合,并将所有没有冲突的时间表作为 3D 数组返回(其中每个条目都是一个时间表,每个时间表都有课程,每个课程都有其特定数据)

现在,我可以将脚本中的输入硬编码为 2D 数组,其中每个元素都由主题名称和课程编号组成。

我现在想做的就是把它变成一个网站。

我参加了关于数据库的在线课程,但我不知道如何从 Perl 处理数据库,也不知道这是否是一个好方法。

我不知道如何永久存储抓取的数据,以便将其用于进一步计算。

我知道基本的 HTML、CSS 和 Javascript,但我不知道如何将脚本与它们集成并从用户那里获取输入(我只知道如何在 Javascript 中做到这一点)。谷歌将我引向“cgi-scripts”,但我对服务器一无所知,除了它们负责由网站完成的计算,其中之一称为 Apache 或 AJAX。我不确定这是否属实,但我想告诉你我的专业水平。

你能否告诉我为了能够制作这个网站我需要学习什么来指出我正确的方向。

4

3 回答 3

4

我参加了关于数据库的在线课程,但我不知道如何从 Perl 处理数据库,也不知道这是否是一个好方法。

Perl 中的数据库访问是通过DBI完成的。您可以使用DBIx::Class为它获得一个很好的 OO 抽象。

我不知道如何永久存储抓取的数据,以便将其用于进一步计算。

数据库是一个不错的选择。

我知道基本的 HTML、CSS 和 Javascript,但我不知道如何将脚本与它们集成并从用户那里获取输入(我只知道如何在 Javascript 中做到这一点)。

使用<form>. 将 设置action为服务器端程序的 URL。提交表格。

谷歌将我引向“cgi-scripts”,但我对服务器一无所知,除了它们负责由网站完成的计算,其中之一称为 Apache 或 AJAX。我不确定这是否属实,但我想告诉你我的专业水平。

HTTP 服务器侦听 HTTP 请求并提供 HTTP 响应。浏览器(以及搜索引擎和其他客户端)向托管网站的服务器发出 HTTP 请求。服务器响应呈现站点所需的数据(HTML、CSS、JavaScript、图像等),客户端呈现它(或索引它,或其他)。

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

CGI 是 HTTP 服务器可以通过运行程序而不是仅仅移交静态文件来确定响应的方式。它非常简单,但效率不高。此答案中描述了一些替代方案。

Ajax 与此无关。它的意思是“在网页中使用 JavaScript,告诉浏览器发出新的 HTTP 请求(不离开页面)并使响应对 JavaScript 可用”。

于 2013-07-23T09:18:53.117 回答
3

这将是一个部分/模糊的答案..

对于数据库,你要做的是学习使用DBI,这是一个独立于数据库实现的 api 来与数据库对话(它甚至可以写入 csv 文件!)。您还需要为您选择的数据库提供驱动程序。

至于网站,它超出了我的技能,有很多方法可以做到。Perl 将通过称为CGI的东西在服务器端使用。另一方面,Javascript 通常在客户端处理,用于向您的站点添加动态元素。Apache 是一个 Web 服务器软件,它负责与您的浏览器对话并将相关的 html 页面传递给它,您可能需要使用它,但您不需要为基本用例编写任何代码。

对于 perl 网页,您可以从本教程开始以更好地理解,然后向perl 僧侣寻求更好(和更新)的答案。这篇文章也会给你更多实用的建议,比如使用Dancer

于 2013-07-23T08:49:25.547 回答
3

对于纯粹的 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以了解如何发回数据。

于 2013-07-23T09:10:03.457 回答