模块 Foo::Bar 已安装在@INC
.
除了递归检查@INC
,Foo
then Bar
,thenscripts
或t
,还有没有办法从模块本身访问这些目录?
例如,我想在lib/scripts/findmeifyoucan.pl
from中调用一个特定的脚本Foo/Bar.pm
。
模块 Foo::Bar 已安装在@INC
.
除了递归检查@INC
,Foo
then Bar
,thenscripts
或t
,还有没有办法从模块本身访问这些目录?
例如,我想在lib/scripts/findmeifyoucan.pl
from中调用一个特定的脚本Foo/Bar.pm
。
您可以通过使用%INC
查找相关代码所在的位置来找到它相对于相关代码的位置:
package Foo::Bar;
# this code lives in ...something.../lib/Foo/Bar.pm
package Unrelated;
use File::Spec;
use Foo::Bar;
my $filename = 'Foo/Bar.pm';
(my $libpath = $INC{$filename}) =~ s#/\Q$filename\E$##g; ## strip / and filename
my $script = File::Spec->catfile($libpath, qw(scripts findmeifyoucan.pl));