0

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

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

我在perlmonks上了解到有一种叫做 sitecustomize.pl 的东西,在perlrun中有描述。它允许您添加在启动期间很早就执行的代码。我可能会使用它来添加对 CGI 环境的检查并加载模块。

医生说我必须检查$Config{usesitecustomize}我的 Perl 是否可以做到这一点。不幸的是,perl -e 'print $Config{usesitecustomize}'不会产生任何东西。我感觉它甚至都不知道$Config,因为当我使用 Data::Dumper 时它是空的。

我会让系统管理员放一些东西来检查,但这可能需要一些时间。

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

4

2 回答 2

2

您链接到的 perlrun 文档指出,如果有问题的 perl 被编译为支持该选项( ),则-f命令行标志会禁用该usesitecuistomize选项的执行。-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 };

whereDEBUG_VERSION在部署时设置为 false。

于 2013-04-03T09:11:40.360 回答
0

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

PERL5OPT="-MCGI::Carp=fatalsToBrowser"

PERL5OPT变量在perlrun中描述。

于 2014-01-21T19:30:16.453 回答