无法运行这个简单的Perl CGI程序

时间:2012-10-01 00:40:15

标签: perl cgi cgi-bin

有人可以向我解释让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>";

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:2)

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

#!/usr/bin/perl -- 

(两条破折号和行尾的空格)

答案 2 :(得分:0)

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

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

#!/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)。