我写了一些模块,试图运行它们。我怎么知道从哪里取出模块?
我在Windows中写作,并尝试将其放入c:\perl\lib
,但它没有帮助。
我可以将它放在与调用模块的文件相同的目录中吗?
答案 0 :(得分: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;
答案 1 :(得分:6)
这正是local::lib旨在处理的问题。默认情况下,use local::lib;
会将~/perl5
添加到您的模块搜索路径(@INC
),但您可以轻松告诉它添加另一个目录。
如果您使用固定目录(而不是相对于主目录的目录),那么您可能与use lib 'PATH'
一样好。
如果这是仅用于从命令行运行的代码,则另一个选项是创建指向个人模块目录的PERL5LIB
环境变量。这将影响您的用户帐户从命令行运行的所有Perl,因此您无需使用此方法修改Perl代码,但设置非命令行代码(例如,Web脚本)更为棘手),如果代码将由多个用户运行,则需要为所有用户设置PERL5LIB
。
在任何情况下,我都不建议直接使用@INC
。这些天有很多简单的方法可以做到。
答案 2 :(得分: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?。