模块Foo :: Bar已安装在@INC
。
除递归检查@INC
Foo
,然后Bar
,然后scripts
或t
之外,是否有办法访问这些目录来自模块本身?
例如,我想从lib/scripts/findmeifyoucan.pl
调用Foo/Bar.pm
中的特定脚本。
答案 0 :(得分:2)
您可以使用%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));