Местоположение оценивается некоторое время назад.
Если навести курсор мыши на маленький синий значок i , он скажет:
Значение, указанное ниже, было оценено только сейчас. BLOCKQUOTE>
При загрузке модуля просто посмотрите в %INC, но необходимо сделать это именем файла.
say $INC{"Foo/Bar/Baz.pm"};
Если Вы не имеете, можно использовать Модуль:: Util или module_info программа, которая идет с Модулем:: Информация.
$ module_info Module::Build
Name: Module::Build
Version: 0.30
Directory: /usr/local/lib/site_perl
File: /usr/local/lib/site_perl/Module/Build.pm
Core module: no
Или можно пройти @INC вручную.
my $module = "Foo::Bar";
# Convert from Foo::Bar to Foo/Bar.pm
my $file = $module;
$file =~ s{::}{/};
$file .= ".pm";
my $path;
for my $dir (@INC) {
$path = "$dir/$file";
last if -r $path;
$path = undef;
}
say defined $path ? "$module is found at $path" : "$module not found";
(Полностью кросс-платформенное решение использовало бы File::Spec вместо того, чтобы присоединиться к наклонным чертам.)
Если просто необходимо найти модуль быстрым, perldoc -l
работы хорошо как Fayland упомянули, но он не найдет модуль, который не имеет никакого POD.
Doh - Я просто помнил.
use Module::Util qw( :all );
$valid = is_valid_module_name $potential_module;
$relative_path = module_path $module_name;
$file_system_path = module_fs_path $module_name;
Ну, perldoc может сказать Вам имя файла:
[fayland@alpha ~]$ perldoc -l Catalyst
/home/fayland/perl5/lib/perl5/Catalyst.pm
или посмотрите в %INC после загрузки модуля.
Спасибо.