Основываясь на ваших комментариях, установлена ли в вашей оболочке переменная http_proxy
ENV?
$ env | grep http_proxy
Если нет, установите его с помощью настроек прокси-сервера и повторите попытку установки perlbrew:
$ export http_proxy = "http://yourProxyURLorIP:8080"
$ perlbrew install perl-5.12.1
perlbrew
использует эту переменную ENV для выбора прокси-сервера. Если эта переменная ENV не установлена, она пытается установить обычное прямое HTTP-соединение (см. ">строка 1274 в текущем мастере perlbrew на Github)
$ua->proxy($ENV{http_proxy}) if $ENV{http_proxy};
Если это не сработает, посмотрите HTTP::Lite
. Это то, что perlbrew
использует для извлечения исходного кода. Примечание. perlbrew использует собственную копию HTTP::Lite
Наконец, если вам все еще не повезло, вы упомянули, что «сначала установили его» через CPAN. В документах упоминаются проблемы при обновлении с предыдущей версии CPAN. Это может быть что-то еще, что вам нужно изучить?
Обновить Протестируйте этот скрипт HTTP::Lite
и дайте мне известно, что вы видите (примечание. Возможно, вам потребуется установить HTTP::Lite
):
use strict;
use warnings;
use HTTP::Lite;
my $ua = HTTP::Lite->new;
$ua->proxy("yourProxyURLorIP:8080"); # <= http_proxy env minus "http://"
my $req = $ua->request( 'http://search.cpan.org/dist/perl-5.12.1/' )
or die "Unable to get document: $!";
print $ua->body(); # <= if you get this then all is good!
Я думаю, вы, вероятно, столкнулись с известной ошибкой в HTTP::Lite
, см. RT проблема переменные окружения прокси-сервера в стиле uri не могут правильно установить прокси и порт а>.
Приведенный выше код является обходным путем для этой ошибки. Я предполагаю, что та же ошибка находится в perlbrew
копии HTTP::Lite
. Если это так, то удаление http://
из вашего http_proxy ENV решит проблему (знаменитые последние слова!)
Обновление 2
Просто чтобы прояснить мой последний комментарий, когда вы запускаете perlbrew
, вы можете сделать это (из оболочки, такой как bash
):
http_proxy=IPaddr:Port perlbrew install perl-5.12.1
Вам нужно будет всегда добавлять префикс к каждой команде perlbrew
, по крайней мере, до тех пор, пока не будет исправлена ошибка прокси-сервера HTTP::Lite
или perlbrew
.
Альтернативой вышеизложенному является то, что вы можете просто исправить свою локальную версию, просто добавив следующее перед строкой 1277:
$ENV{http_proxy} = "IPaddr:Port"; # <= your proxy IP & port
Надеюсь, мы наконец взломали его! Дайте мне знать, если все будет успешно, потому что если да, то я отправлю исправление в Gugod (автор perlbrew
) с необходимые локальные изменения в HTTP::Lite
.
person
draegtun
schedule
15.09.2010
perlbrew
имеет эту опцию, потому что он просто рабски вытаскивает запрошенный вами Perl, например, дляperlbrew install perl-5.12.3
(он будет пытаться выдавать ошибку, пока однажды 5.12.3 действительно не появится!). Так что да, это была бы очень хорошая функция дляperlbrew
. Тем временем я быстро собрал этот скрипт, чтобы получить список доступных версий Perl: gist.github.com/584025 - person draegtun   schedule 17.09.2010