"use HTML::TableExtract" 破坏 CGI 脚本

"use HTML::TableExtract" breaking CGI script

我是 CGI 新手。我围绕 perl、cgi、html 和 javascript 编写了一个非常复杂的模块。它 运行 在命令行上非常完美。但我无法通过浏览器 运行 它。我从脚本底部开始逐行调试,结果发现问题出在 HTML::TableExtract 模块本身。所以为了简单起见 -

# perl -c test.cgi
test.cgi syntax OK

test.cgi

#!/usr/bin/perl

use strict;
use warnings;

use HTML::TableExtract;

print "Content-type: text/html\n\n";
print <<htmlcode;
<html>
<head>
<title>CGI Perl Example</title>
</head>
<body>
<h1>CGI Perl Example</h1>
<p>CGI Perl Example</p>
</body>
</html>
htmlcode

这在命令行上完美运行。但是,如果我通过浏览器 运行 它就无法正常工作。但是,如果我删除 "use HTML::TableExtract" 它再次完美运行 - 即使在浏览器中也是如此。权限已正确设置为 755。

有人可以帮助我理解我缺少什么吗?我怎样才能从浏览器启动它。我该如何调试 - 如果我提到使用 HTML::TableExtract.

,我的浏览器会将我重定向到未找到的页面

注意:想指出一件事,这可能与在 HTML::TableExtract 周围设置一些环境变量有关。当我第一次安装该模块时,出现了一个错误,我的托管管理员帮助解决了这个错误。

# ./test.cgi
Content-type: text/html

<html>
<head>
<title>CGI Perl Example</title>
</head>
<body>
<h1>CGI Perl Example</h1>
<p>CGI Perl Example</p>
</body>
</html>

调试 perl CGI 脚本

use CGI::Carp; 添加到您的脚本以使其向浏览器报告错误
[它通过 STDOUT 生成 http 回复而不是通过 STDERR 生成默认文本]

很可能是从命令行和网络服务器执行的脚本在不同的地方搜索模块,例如由于 PERL5LIBPERLLIB 环境变量的不同设置。


警告

CGI::Carp 可能是 "production" 版本的 cgi 脚本中的安全威胁。
它可能会向(潜在的)黑客提供重要信息。