2014-09-13 3 views
0

Я использую Операционная система Windows, и у меня есть мой скрипт perl. В моем скрипте Path::Class::Rule модуль, который я использую.Как установить модули cpan с помощью системной команды - perl

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

Я пытаюсь установить модуль с помощью system subroutine, но модули perl не получают установку.

Вот код, который я использую:

use warnings; 
use Path::Class; 
use Path::Class::Rule; 
use Cwd qw(); 
use File::Path qw(make_path); 
use File::Copy; 
system ("ppm install Path::Class::Rule"); 

любой орган может помочь мне, как добавить логику?

+0

В Windows - Перейти к началу и в типе промилле Run коробки Затем откроется открывается, и вы можете найти модули perl. У вас есть опция mark для установки для модулей perl наверху. После нажатия на то, что ваши модули будут установлены. Я считаю, что Path :: Class: Rule найдено и доступно в нем. – Praveen

+0

Мне нужно добавить логику только в моем текущем скрипте perl. Я не хочу никаких ручных помех. Я проверил отметку для установки, как вы предложили, но я вижу, что она отключена здесь. мне нужно обновить perl? – user59053

+0

Пожалуйста, не делайте этого. Вы можете отправить необходимые файлы с помощью своей программы. Лучше всего переписать вашу программу для использования ['File :: Spec'] (https://metacpan.org/module/File::Spec) и [' File :: Find'] (https: // metacpan. org/module/File :: Find), которые являются основными модулями. – Borodin

ответ

1

Посмотрите на это:

use Path::Class::Rule; 
...; 
system ("ppm install Path::Class::Rule"); 

Вы пытаетесь use модуль перед тем установкой.

Попробуйте что-то вроде этого:

BEGIN { 
    eval { require Path::Class::Rule } 
     or system("ppm install Path::Class::Rule"); 
} 
use Path::Class::Rule; 

Хотя лично я считаю, лучше что-то вроде:

BEGIN { 
    eval { require Path::Class::Rule } 
     or die "Missing Path::Class::Rule. See README for installation instructions.\n"; 
} 
use Path::Class::Rule; 
Смежные вопросы