Как я проверяю, установлен ли модуль Perl? [дубликат]

С помощью этой функции отображения CouchDB создаст индекс B-дерева на основе doc.name со значением doc.age, а также сохранит doc._id где-то там. Таким образом, он не будет дублировать целые doc, но будет хранить эти поля и, возможно, что-то еще в данных индекса.

10
задан brian d foy 1 December 2009 в 16:18
поделиться

6 ответов

perl -MSome::Module -e ';'

Упс, неправильно прочитал вопрос. Я думал, что вы хотели бы знать в единственном экземпляре, не обнаруживая это в извлекаемой форме. Я всегда использую что-то вроде этого:

sub try_load {
  my $mod = shift;

  eval("use $mod");

  if ($@) {
    #print "\$@ = $@\n";
    return(0);
  } else {
    return(1);
  }
}

, который вы используете следующим образом:

$module = 'Some::Module';
if (try_load($module)) {
  print "loaded\n";
} else {
  print "not loaded\n";
}
19
ответ дан 3 December 2019 в 15:22
поделиться

Как вы устанавливаете свой скрипт? Если вы используете стандартный Makefile.PL или Build.PL, перечисление зависимостей тривиально.

3
ответ дан 3 December 2019 в 15:22
поделиться

Как насчет:

die "Some::Module missing!" unless(eval{require Some::Module});
3
ответ дан 3 December 2019 в 15:22
поделиться

I use something like this:

BEGIN { 
    my $module_name    = shift; # @ARGV
    our $module_exp = $module_name;
    eval "use $module_name;";
}

$module_exp =~ s{::}{/}g;
foreach my $key ( grep { m/^$module_exp\./ } keys %INC ) { 
    print "$key => $INC{$key}\n";
}

But I use this more in the form of a korn shell function:

function wherperl
{
     perl -M$1 <<EX_DOC
     my \$module = '$1';
     \$module =~ s/::/\\//g;

     for ( keys %INC ) {
         next unless m/^\$module\./;
         print \$_ . ' => ' . \$INC{\$_} . "\n";
     }
EX_DOC
}
1
ответ дан 3 December 2019 в 15:22
поделиться

I у меня есть небольшой скрипт, который перечисляет все модули Perl в моей системе;

#!/usr/bin/perl

use ExtUtils::Installed;
my $instmod = ExtUtils::Installed->new();
foreach my $module ($instmod->modules()) {
    my $version = $instmod->version($module) || "???";
    print "$module -- $version\n";
}

Внутри этого цикла foreach вы можете захотеть сделать что-то вроде:

my $match;
if ($module =~ /$match/) {
  print "Found $match: $module\n";
}
2
ответ дан 3 December 2019 в 15:22
поделиться

Мне нравится использовать утилиту cpan :

% cpan -D YAML
YAML
-------------------------------------------------------------------------
    YAML Ain't Markup Language (tm)
    A/AD/ADAMK/YAML-0.70.tar.gz
    /usr/local/perls/perl-5.10.0/lib/site_perl/5.10.0/YAML.pm
    Installed: 0.68
    CPAN:      0.70  Not up to date
    Ingy dot Net (INGY)
    ingy@cpan.org

Это может быть немного медленным, поскольку для получения некоторых данных необходимо подключиться к зеркалу CPAN, но Еще у меня есть локальное зеркало CPAN. :)

1
ответ дан 3 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

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