Какой самый простой способ установить отсутствующий модуль Perl? - PullRequest
164 голосов
/ 15 сентября 2008

Я получаю эту ошибку:

Can't locate Foo.pm in @INC

Есть ли более простой способ установить его, чем загрузка, распаковка, создание и т. Д.?

Ответы [ 23 ]

1 голос
/ 04 ноября 2016

Похоже, вы уже получили свой ответ, но я решил, что я буду вмешиваться. Это то, что я делаю в некоторых скриптах на Ubuntu (или сервере Debian)

#!/usr/bin/perl

use warnings;
use strict;

#I've gotten into the habit of setting this on all my scripts, prevents weird path issues if the script is not being run by root
$ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin';

#Fill this with the perl modules required for your project
my @perl = qw(LWP::Simple XML::LibXML MIME::Lite DBI DateTime Config::Tiny Proc::ProcessTable);

chomp(my $curl = `which curl`);

if(!$curl){ system('apt-get install curl -y > /dev/null'); }

chomp(my $cpanm = system('/bin/bash', '-c', 'which cpanm &>/dev/null'));

#installs cpanm if missing
if($cpanm){ system('curl -s -L http://cpanmin.us | perl - --sudo App::cpanminus'); }

#loops through required modules and installs them if missing
foreach my $x (@perl){
    eval "use $x";
    if($@){
        system("cpanm $x");
        eval "use $x";
    }
}

Это хорошо работает для меня, может быть, здесь есть что-то, что вы можете использовать.

1 голос
/ 01 октября 2015

Простое выполнение cpan Foo::Bar на оболочке послужит цели.

1 голос
/ 15 сентября 2008

В Windows с дистрибутивом Perl ActiveState используйте команду ppm .

...