0

有人可以向我解释让 perl 在服务器上工作的基础知识吗?我需要服务器上的模块吗?如果是这样,它会去哪里?我如何命名我的文件以及它们去哪里?

据我了解,您需要一个模块,它位于 cgi-bin 中。无论我将文件命名为 .pl 还是 .cgi,我都无法得到明确的答案,当我将它放入 cgi-bin 时,我遇到了服务器错误。我的权限也设置为 777,所以这不应该是问题。

请帮忙!我只想了解如何使非常基本的程序正常工作,例如下面的程序。提前致谢!

    #!/usr/bin/perl
    require("cgi-lib.pl");
    print &PrintHeader;

    print "<html>";
    print "<head><title>Hello world!</title></head>";
    print "<body>";
    print "<p>Hello world!</p>";
    print "</body>";
    print "</html>";
4

3 回答 3

9

最新版本的cgi-lib.pl日期为 1999 年,并且非常过时。我建议您改用该CGI库,它几乎肯定已经安装在您的服务器上并保持最新(最近一次是在 2012 年 8 月 16 日)

您的程序应如下所示:

#!/usr/bin/perl -- 

use strict;
use warnings;

use CGI ':standard';

print header;

print <<END;
<html>
  <head><title>Hello world!</title></head>
  <body>
    <p>Hello world!</p>
  </body>
</html>
END

另请注意,您可以从命令行运行程序以查看它是否编译以及它生成的输出。一旦你在那里工作,你可以将它移动到服务器

于 2012-10-01T01:05:56.723 回答
2

您面临的问题是您可能在 Windows 机器上编辑了源文件,它CR在每个换行符之前插入一个字符。确保您的代码不包含任何 CR 或将第一行更改为:

#!/usr/bin/perl -- 

(即行尾的两个破折号和一个空格)

于 2012-10-01T00:53:37.333 回答
0

我同意 Dave Cross 的评论,你需要告诉你的学校,他们教你的方法不正确。我们在 Perl 领域正试图让人们停止使用 CGI 模块,而您正在使用它的前身!

这是一个现代 Perl 框架Mojolicious中的 hello world 应用程序:

#!/usr/bin/env perl

use Mojolicious::Lite;

get '/' => 'hello';

app->start;

__DATA__

@@ hello.html.ep
<html>
  <head><title>Hello world!</title></head>
  <body>
    <p>Hello world!</p>
  </body>
</html>

您将其放入文件中,(可以说test.pl)。通过运行安装 Mojolicious:

curl get.mojolicio.us | sh

然后通过运行启动您的应用程序

perl test.pl daemon

现在您可以http://localhost:3000在浏览器中访问查看结果,无需 Apache,无需 cgi-bin!

一个更有趣的示例采用带有默认值的“参数”:

#!/usr/bin/env perl

use Mojolicious::Lite;

get '/:name' => { name => 'world' } => 'hello';

app->start;

__DATA__

@@ hello.html.ep
<html>
  <head><title>Hello <%= $name %>!</title></head>
  <body>
    <p>Hello <%= $name %>!</p>
  </body>
</html>

运行它并尝试访问http://localhost:3000/SilverNightaFall并查看它的作用!

这种将动态值插入到 HTML 中的过程称为模板化,现在更受欢迎(而不是在每个请求上生成整个 HTML)。

于 2012-11-02T20:04:29.837 回答