在Perl中,如何禁用在必需脚本中加载的CGI :: Carp?

时间:2012-06-28 10:51:24

标签: perl cgi

我有一个小的Perl程序,我想在命令行上运行。我需要require其他人编写的另一个Perl脚本(不是模块)。反过来,require一些其他脚本。 (我对这种方式无法做任何事情)。

现在,其中一个脚本中包含use CGI;use CGI::Carp qw(fatalsToBrowser)非常烦人。我不要那个。每次出现故障时,我的控制台上都有15行500 Internal Server Error page,这让我很紧张。我试过了

require 'otherscript.pl';
no CGI;
no CGI::Carp;

no CGI;
no CGI::Carp;
require 'otherscript.pl';

卸载它,就像use doc描述的那样,但它不起作用。

我可以以某种方式操纵符号表或做一些其他魔法来摆脱它吗?

3 个答案:

答案 0 :(得分:3)

CGI :: Carp包中没有unimport例程,因此no无效。手动撤消import例程的相关部分。

词汇范围(见caveat):

local $main::SIG{__DIE__} = \&CGI::Carp::realdie;

全球范围:

CGI::Carp::set_die_handler(\&CGI::Carp::realdie);

答案 1 :(得分:3)

通过将$CGI::Carp::TO_BROWSER变量设置为0,您可以禁止打印骰子消息的HTML版本。

答案 2 :(得分:2)

使用fatalsToBrowser的代码来自哪里?虽然fatalsToBrowser是一个非常有用的开发工具,但它只应该用于开发。在生产环境中,可以认为fatalsToBrowser存在安全风险,因为它可能会给试图破解服务器的人提供太多信息。

所以,一定要使用其他人提到的技巧来关闭它。但您也应该尽一切可能确保更改违规代码,以便在生产中不使用fatalsToBrowser