我有三个文件:
〜/ multiFindBinTest.pl:
use FindBin;
use lib "$FindBin::Bin/mod2";
use pack2;
〜/mod1/pack1.pm
package pack1;
1;
〜/mod2/pack2.pm
use FindBin;
use lib "$FindBin::Bin/../mod1";
use pack1;
package pack2;
1;
正如您所看到的,base.pl 使用 pack2,而 pack2 又使用 pack1。然而,这是如何不使用FindBin模块的演示:当执行base.pl时,pack2将无法找到pack1,因为它将保留从base获取的“$FindBin::Bin”的值.pl。
所以我的问题很简单:perl 中是否有一种方法可以“使用”一个模块,该模块“使用”另一个模块,所有这些都基于相对于“使用”文件的路径?
找到位置的唯一方法module文件是要使用__FILE__
. Both FindBin
and $0
始终参考主脚本文件。
对于模块来说,这是我能想到的最简洁的。您的主代码解决方案很好,但您也可以在那里使用此替代方案。
use strict;
use warnings;
use File::Basename 'fileparse';
use File::Spec;
my $dir;
BEGIN {
$dir = (fileparse(File::Spec->rel2abs(__FILE__)))[1];
}
use lib $dir.'../mod1';
use pack1;
package pack2;
1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)