如何告诉我的开发环境始终加载CGI :: Carp'atalalsToBrowser'?

时间:2013-04-03 08:20:33

标签: perl apache cgi

我正在(通常)使用Linux(openSuse)和Apache运行CGI应用程序的开发环境。我们运行的许多应用程序曾经一直有CGI::Carp'fatalsToBrowser',当然我们不希望它在生产中。所以这是关于在一台机器上进行,而不是在另一台机器上。因此,可怕的CGI :: Carp需要从代码中消失。

我知道我可以从命令行使用-M加载模块。那个是不费脑子的,但对我没有帮助。我不想要命令行,我想要用Apache进行CGI。

我在perlmonks上了解到perlrun中描述了一些名为sitecustomize.pl的内容。它允许您添加在启动期间很早执行的代码。我可以使用它来添加对CGI环境的检查并加载模块。

该文档说我必须检查$Config{usesitecustomize}以查看我的Perl是否可以这样做。不幸的是,perl -e 'print $Config{usesitecustomize}'没有产生任何结果。我觉得它甚至不知道$Config,因为当我Data :: Dumper它时它是空的。

我将有一个系统管理员只是把东西放在那里检查,但这可能需要一些时间。

有没有其他方法让Perl加载CGI :: Carp模块并在每次Apache启动时导入fatalsToBrowser

2 个答案:

答案 0 :(得分:2)

您链接到的perlrun文档声明-f命令行标志禁用usesitecuistomize选项的执行,如果有问题的perl被编译为支持( -Dusesitecustomize)。

这个选项似乎是为了对perl配置进行全局更改,而不是在每个站点的基础上改变perl的行为。

您始终可以决定有条件地加载和导入模块,例如

# CGI::Carp is no pragma, so this works without scoping issues:
BEGIN { eval q{ use CGI::Carp qw/fatalsToBrowser/ } if DEBUG_VERSION };

部署时DEBUG_VERSION设置为false。

答案 1 :(得分:0)

我最后在Apache配置的vhosts.conf文件中添加了一个开关,告诉Perl始终加载模块。由于这只会影响开发框,因此解决了这个问题:

PERL5OPT="-MCGI::Carp=fatalsToBrowser"

perlrun中描述了PERL5OPT变量。