什么';在mod_Perl中,用Perl中的'use'和'require'语句搜索当前源文件所在的目录,这是一种规范的方法吗?

什么';在mod_Perl中,用Perl中的'use'和'require'语句搜索当前源文件所在的目录,这是一种规范的方法吗?,perl,runtime,require,mod-perl,Perl,Runtime,Require,Mod Perl,我试过了 BEGIN { unshift @INC, 'current_path_string'; } 但它只适用于使用,当需要时,它不会被搜索 有解决办法吗?在mod_perl下运行时,一旦服务器启动,@INC将被冻结且无法更新。临时修改@INC的唯一机会是在首次加载和编译脚本或模块时。之后,其值将重置为原始值。永久更改@INC的唯一方法是在Apache启动时对其进行修改 服务器启动时更改@INC的两种方法: 在配置文件中。e、 gPerlSetEnv PERL5LIB/home/

我试过了

BEGIN {
    unshift @INC, 'current_path_string';
}
但它只适用于
使用
,当
需要
时,它不会被搜索


有解决办法吗?

在mod_perl下运行时,一旦服务器启动,
@INC
将被冻结且无法更新。临时修改
@INC
的唯一机会是在首次加载和编译脚本或模块时。之后,其值将重置为原始值。永久更改
@INC
的唯一方法是在Apache启动时对其进行修改

服务器启动时更改
@INC
的两种方法:

  • 在配置文件中。e、 g
    PerlSetEnv PERL5LIB/home/httpd/perl

  • 在启动文件中,直接更改
    @INC
    ,并从配置文件加载启动文件

另见

BEGIN {
    require Foo;
    import Foo;
}

因此,如果它适用于
use
,它适用于
require

是的,您可以在启动脚本中更新@INC。但在您的模块中使用以下代码只需简单操作即可:

use lib '/app/my-libs';

至少-对于我在mod_perl下运行的CGI应用程序。

实际上我不想让它永久化。这就是为什么我
unshift@INC
BEGIN
内部。但是它对
require
语句不起作用。@new_perl它对
require
不起作用,因为
require
发生在运行时,在重置
@INC
之后,但它为什么这样工作:
开始{unshift@INC',/root/}print“@INC”<代码>/root/
在运行时仍然存在。@new\u perl:这是一个临时修改,mod\u perl不支持它。
use lib '/app/my-libs';