在mod_perl中使用Perl中的`use`和`require`语句来搜索当前源文件的目录是什么规范方法?

时间:2011-07-18 08:59:14

标签: perl runtime require mod-perl

我试过

BEGIN {
    unshift @INC, 'current_path_string';
}

但它仅适用于use,当require时,它不会被搜索。

有解决方法吗?

3 个答案:

答案 0 :(得分:4)

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

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

  • 在配置文件中。例如PerlSetEnv PERL5LIB /home/httpd/perl

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

另见@INC and mod_perl

答案 1 :(得分:0)

是的,您可以在启动脚本中更新@INC。但是在您的模块中使用以下代码将起作用:

use lib '/app/my-libs';

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

答案 2 :(得分:-1)

use Foo;

相同
BEGIN {
    require Foo;
    import Foo;
}

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