2009-12-07 49 views
3

我写了一些模块,并试图运行它们。我如何告诉从何处取模块?我在哪里安装我编写的Perl模块?

我写在Windows中,并试图把它c:\perl\lib,但它并没有帮助。

我可以把它放在同一目录下,调用该模块的文件吗?

回答

13

Perl使用的路径中:

@INC 

搜索模块。 (.pm的文件)

如果您:

perl -e 'print join "\n", @INC;' 

你会看到,目前正在搜索什么路径的模块。 (这@INC列表被编译到Perl可执行文件)

然后,您可以:

BEGIN { unshift @INC, 'C:\mylibs' } 

use lib 'C:\mylibs' 

和地方MyModule.pm内C:\ mylibs启用:

use MyModule; 
6

这正是local::lib是专门用来处理。默认情况下,use local::lib;将预先准备~/perl5你的模块搜索路径(@INC),但你可以很容易地告诉它添加其他目录。

如果你正在使用固定目录(而不是相对于你的主目录),那么你可能就跟use lib 'PATH'一样好。

如果这是用于只能从命令行运行的代码,另一个选项是创建一个指向您的个人模块目录的PERL5LIB环境变量。这会影响你的用户帐户从命令行运行的所有Perl,所以你不需要用这个方法来修改你的Perl代码,但是为非命令行代码设置(比如web脚本),如果代码将由多个用户运行,则需要为所有这些代码设置PERL5LIB

我不建议直接在任何情况下摆弄@INC。这些天有很多简单的方法可以做到。

4

对于特定应用程序库中的常用的方法是使用FindBin模块来定位应用程序目录,然后use lib到应用程序的库添加到@INC

use FindBin; 
use lib "$FindBin::Bin/lib"; 
use AppModule; 

对于通用模块,我建议开发它们的方式与CPAN版本相同(例如,从module-starter开始),并使用perl安装(通常在site/lib之下)。另请参见:Which framework should I use to write modules?

如果你不能用Perl安装(即你没有必要的权限),你可以有个人库,而不是。请参阅perlfaq8中的How do I keep my own module/library directory?