0

模块 Foo::Bar 已安装在@INC.

除了递归检查@INCFoothen Bar,thenscriptst,还有没有办法从模块本身访问这些目录?

例如,我想在lib/scripts/findmeifyoucan.plfrom中调用一个特定的脚本Foo/Bar.pm

4

1 回答 1

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));
于 2010-06-18T19:15:36.907 回答