我在确定use lib
. 这是我正在尝试做的一个例子:
我有一个目录调用foo
,其中包含一个名为myscript.pl
. myscript.pl
使用一个名为的模块,该模块Mod1.pm
位于名为 的子目录中bar
,所以在顶部myscript.pl
我放了以下几行:
use lib 'bar';
use Mod1;
这工作正常,直到我想Mod1.pm
使用另一个模块,foo/bar/asdf/Mod2.pm
. 如果我将 ause lib 'asdf'
放在它的顶部Mod1.pm
将不起作用,因为它相对于我正在运行的目录进行搜索myscript.pl
。所以我做了一些搜索并找到了FindBin
,并尝试将这些行添加到 Mod1.pm:
use FindBin;
use lib "$FindBin::Bin/asdf";
这也不起作用,因为FindBin
找到了我正在运行的脚本 ( myscript.pl
) 所在的目录,而不是使用的文件FindBin
(在这种情况下Mod1.pm
)。所以我的问题是,有没有一种方法可以相对于所在位置进行搜索Mod1.pm
,以便Mod2.pm
无论使用的脚本在哪里都可以找到Mod1.pm
?
编辑:进一步解释我的情况以解决您的一些评论:
我正在处理存储库中的代码,所有 CPAN 库都需要安装在存储库的目录中。这意味着use lib
s 不能有任何绝对路径。对于我的项目,有一个中央模块“Mod1.pm”,其中包含use
很多 CPAN 模块,它们位于存储库的各个目录中。所有use lib
语句的格式都是use lib '../../foo/bar/asdf'
这样的,因此可以相对于您运行脚本的位置找到它们,但这限制了您可以运行使用 Mod1.pm 的脚本的位置,我试图避免这种情况。另一个恼人的副作用是我不能perl -c Mod1.pm
确保我对 Mod1.pm 所做的任何编辑都是合理的,除非我在正确的位置运行它,而这不是 Mod1.pm 所在的位置。哦,加入一个已经有混乱代码的项目的乐趣......另一个令人讨厌的副作用是我不能使用你们中的任何人建议的任何 CPAN 模块来解决我的问题,因为我仍然需要一种方法找到那些。