Как я узнаю имя файла пакета Perl?

Местоположение оценивается некоторое время назад.

Если навести курсор мыши на маленький синий значок i , он скажет:

Значение, указанное ниже, было оценено только сейчас.

6
задан brian d foy 19 February 2009 в 07:39
поделиться

3 ответа

При загрузке модуля просто посмотрите в %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.

9
ответ дан 8 December 2019 в 16:10
поделиться

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;
3
ответ дан 8 December 2019 в 16:10
поделиться

Ну, perldoc может сказать Вам имя файла:

[fayland@alpha ~]$ perldoc -l Catalyst
/home/fayland/perl5/lib/perl5/Catalyst.pm

или посмотрите в %INC после загрузки модуля.

Спасибо.

3
ответ дан 8 December 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: