принудительно установить модуль с CPAN - PullRequest
4 голосов
/ 09 февраля 2012

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

use CPAN;
eval "use Filesys::DiskSpace" or do {
    CPAN::install("Filesys::DiskSpace");
};

Есть ли способ добавить опцию 'force' в код? У меня возникает следующая ошибка при компиляции модуля:

  make test had returned bad status, won't install without force

Предупреждения не могут быть серьезными, поэтому я хотел бы продолжить установку. Спасибо.

Ответы [ 3 ]

5 голосов
/ 09 февраля 2012

Похоже, вам нужно создать экземпляр CPAN для переменной и вызвать для нее метод force()

my $cpan = CPAN->new;
$cpan->force();
$cpan->install("Filesys::DiskSpace");
3 голосов
/ 09 февраля 2012

Похоже, вы только убедитесь, что установлено Filesys::DiskSpace:

unless( eval { require Filesys::DiskSpace } ){
  require CPAN;
  CPAN::Shell->force("install","Filesys::DiskSpace");
}

Если вы хотите убедиться, что Filesys::DiskSpaceзагрузите и установите его, если он недоступен:

BEGIN{
  unless( eval { require Filesys::DiskSpace } ){
    require CPAN;
    CPAN::Shell->force("install","Filesys::DiskSpace");
  }
}
use Filesys::DiskSpace;

ПРИМЕЧАНИЕ:

Если у вас возникают проблемы с работающими программами Perl, возможно, это потому, что вы только что установили сломаннуюmodule.

Этот конкретный модуль не выпускался официально с 1999 года.
Он также содержит значительное количество сообщений об ошибках :

3 голосов
/ 09 февраля 2012

Пока вы действительно знаете, что делаете:

eval "use Filesys::DiskSpace; 1" or do {
    CPAN::Shell->force("install","Filesys::DiskSpace");
};

Встроенная функция use не возвращает ничего полезного, даже если она успешна, поэтому необходимо включить «;1» в строку eval.

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