使用相对路径调用脚本时,lib pragma不起作用

时间:2016-02-17 18:31:02

标签: perl

我在文件夹p.pl中有一个test脚本:

use lib '.';
use My::Module;
My::Module::my_func();

在测试文件夹中有一个包含文件My的子目录Module.pm

package My::Module;
sub my_func {
    print "Hello\n";
}    
1;

如果我通过在终端窗口中键入p.pl从测试文件夹中运行./p.pl,则不会出现错误并输出Hello。如果我将目录更改为父目录(cd ..)并键入test/p.pl,则会收到错误:

Can't locate My/Module.pm in @INC  at test/p.pl line 2.
BEGIN failed--compilation aborted at test/p.pl line 2.

2 个答案:

答案 0 :(得分:1)

使用FindBin

p.pl

use FindBin;
use lib "$FindBin::RealBin";
use My::Module;
My::Module::my_func();

答案 1 :(得分:1)

这里没有错误。使用lib pragma将指定的目录添加到@INC - Perl搜索模块的目录列表。通过指定'。',您说,“将当前目录添加到@INC”,因此如果您从测试上方的目录启动该程序,那么这是从中找到的文件夹搜索已经完成。