我正在(通常)使用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
答案 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
变量。