Как я могу узнать, где установлен модуль Perl? - PullRequest
39 голосов
/ 13 октября 2009

Как получить путь к установленному модулю Perl по имени, например Time::HiRes

Я хочу этого только потому, что мне нужно запустить свой Perl-скрипт на разных узлах системы SGE Grid Engine. Иногда даже запускается под другим именем пользователя.

Я могу использовать CPAN.pm для установки пакетов для себя, но его не так просто установить для других пользователей без chmod 666 на папки.

Ответы [ 7 ]

72 голосов
/ 13 октября 2009

perl -MTime::HiRes -e 'print $INC{"Time/HiRes.pm"}' или perldoc -l Time::HiRes

21 голосов
/ 13 октября 2009

Сведения о модуле можно получить с помощью инструмента cpan, поставляемого с Perl:

$ cpan -D Time::HiRes
Time::HiRes
-------------------------------------------------------------------------
    High resolution time, sleep, and alarm
    J/JH/JHI/Time-HiRes-1.9719.tar.gz
    /usr/local/perls/perl-5.10.0/lib/5.10.0/darwin-2level/Time/HiRes.pm
    Installed: 1.9711
    CPAN:      1.9719  Not up to date
    Andrew Main (Zefram) (ZEFRAM)
    zefram@fysh.org

Он работает даже на модулях, которые вы не установили:

$ cpan -D Win32::Process
Win32::Process
-------------------------------------------------------------------------
    Interface to Win32 Process functions
    J/JD/JDB/Win32-Process-0.14.tar.gz
    Installed: 
    CPAN:      0.14  Not up to date
    Jan Dubois (JDB)
    jand@activestate.com

Я думаю, что мне может понадобиться опция XML, такая как svn.

15 голосов
/ 02 сентября 2015

Я создал whichpm, кроссплатформенный CLI (Linux, OSX, Window), который находит установленные модули Perl по имя модуля (пакета) и при необходимости сообщает о них информацию, в том числе обнаружение случайных дубликатов.

Примеры

# Locate the Data::Dumper module.
$ whichpm Data::Dumper
/usr/lib/perl/5.18/Data/Dumper.pm

# Locate the Data::Dumper module, and also print
# version information and core-module status.
$ whichpm -v Data::Dumper
Data::Dumper    2.145   core>=5.005 /usr/lib/perl/5.18/Data/Dumper.pm

# Locate the Data::Dumper module and open it in your system's default text
# editor.
$ whichpm -e Data::Dumper

# Look for accidental duplicates of the Foo::Bar module.
# Normally, only 1 path should be returned.
$ whichpm -a Foo::Bar
/usr/lib/perl/5.18/Foo/Bar.pm
./Foo/Bar.pm

# Print the paths of all installed modules.
$ whichpm -a

Установка

Предварительные условия: Linux , OSX или Windows , с установленным Perl v5.4.50 или выше .

Установка из реестра npm

С Node.js или io.js , установить пакет следующим образом:

[sudo] npm install whichpm -g

Ручная установка (OSX и Linux)

  • Скачать CLI как whichpm.
  • Сделайте его исполняемым с chmod +x whichpm.
  • Переместите или вставьте ссылку в папку в $PATH, например /usr/local/bin (OSX) или /usr/bin (Linux).
5 голосов
/ 13 октября 2009

Если вам нужно выяснить, какие модули действительно используются вашим скриптом, вы можете использовать отладчики perl M команда:

[ivan@server ~]$ perl -d your_script.pl
...

Debugged program terminated.  Use q to quit or R to restart,
  use o inhibit_exit to avoid stopping after program termination,
  h q, h R or h o to get additional info.

DB <b>M</b>
'AutoLoader.pm' => '5.60 from /usr/lib/perl5/5.8.8/AutoLoader.pm'
'Carp.pm' => '1.04 from /usr/lib/perl5/5.8.8/Carp.pm'
...

Это поможет в случае, если у вас есть модули с одинаковыми именами, но в другой папке.

4 голосов
/ 13 октября 2009

Я просто нахожу другой: http://www.perlmonks.org/?node_id=568730

#!/bin/sh

echo 'print map { sprintf( "%20s : %s\n", $_, $INC{$_} ) } sort keys %INC; print "\n'$1' version : $'$1'::VERSION\n\n"' | perl "-M$1" 

скрипт просто распечатывает все в% INC при запуске perl -MSTH::STH

например:

$ whichpm CGI       
              CGI.pm : /System/Library/Perl/5.8.6/CGI.pm
         CGI/Util.pm : /System/Library/Perl/5.8.6/CGI/Util.pm
             Carp.pm : /System/Library/Perl/5.8.6/Carp.pm
         Exporter.pm : /System/Library/Perl/5.8.6/Exporter.pm
         constant.pm : /System/Library/Perl/5.8.6/constant.pm
         overload.pm : /System/Library/Perl/5.8.6/overload.pm
           strict.pm : /System/Library/Perl/5.8.6/strict.pm
             vars.pm : /System/Library/Perl/5.8.6/vars.pm
         warnings.pm : /System/Library/Perl/5.8.6/warnings.pm warnings/register.pm : /System/Library/Perl/5.8.6/warnings/register.pm

CGI version : 3.05
3 голосов
/ 06 октября 2016

Мне нравится использовать модуль V .

Просто установите его из CPAN или установив пакет libv-perl в Debian или Ubuntu.

Тогда используйте это так:

$ perl -MV=DBI
DBI
    /Users/michiel/.plenv/versions/5.24.0/lib/perl5/site_perl/5.24.0/darwin-2level/DBI.pm: 1.636

Другой пример вывода:

$ perl -MV=Time::HiRes
Time::HiRes
    /usr/lib/perl/5.18/Time/HiRes.pm: 1.9725
1 голос
/ 17 ноября 2015

Кажется, самый простой способ - perldoc -l Time::HiRes.


Если по какой-то причине это недоступно, вот прагматичное решение:

Шаг 1: Создайте модуль в вашем скрипте ...

#! /usr/bin/perl -w
use Time::HiRes();
new Time::HiRes();

Шаг 2. Выполнить скрипт с помощью графического отладчика Perl ...

export PERL5LIB=$PERL5LIB:~/perl ## tell perl where to look for "Devel"/"ptkdb.pm"
perl -d:ptkdb (yourscript.pl)

Шаг 3: Step in на new вызов.

Полный путь к модулю будет отображаться в строке заголовка окна отладчика.


Другим подходом, который может быть полезен, является поиск во всех папках в $PERL5LIB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...