我写了一些模块,并试图运行它们。我如何告诉从何处取模块?我在哪里安装我编写的Perl模块?
我写在Windows中,并试图把它c:\perl\lib
,但它并没有帮助。
我可以把它放在同一目录下,调用该模块的文件吗?
我写了一些模块,并试图运行它们。我如何告诉从何处取模块?我在哪里安装我编写的Perl模块?
我写在Windows中,并试图把它c:\perl\lib
,但它并没有帮助。
我可以把它放在同一目录下,调用该模块的文件吗?
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;
这正是local::lib是专门用来处理。默认情况下,use local::lib;
将预先准备~/perl5
你的模块搜索路径(@INC
),但你可以很容易地告诉它添加其他目录。
如果你正在使用固定目录(而不是相对于你的主目录),那么你可能就跟use lib 'PATH'
一样好。
如果这是用于只能从命令行运行的代码,另一个选项是创建一个指向您的个人模块目录的PERL5LIB
环境变量。这会影响你的用户帐户从命令行运行的所有Perl,所以你不需要用这个方法来修改你的Perl代码,但是为非命令行代码设置(比如web脚本),如果代码将由多个用户运行,则需要为所有这些代码设置PERL5LIB
。
我不建议直接在任何情况下摆弄@INC
。这些天有很多简单的方法可以做到。
对于特定应用程序库中的常用的方法是使用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?。