如何使用perlbrew在我家安装Perl版本?

Dav*_*d B 2 perl install perlbrew

我已经安装了perlbrew,这似乎是一个很好的解决方案,但在实际尝试安装一些Perl版本时,我得到了一些毫无意义的错误:

$ perlbrew install perl-5.12.1
Attempting to load conf from /home/dave/perl5/perlbrew/Conf.pm
Fail to get http://search.cpan.org/dist/perl-5.12.1 (error: ) at /home/dave/perl5/perlbrew/bin/perlbrew line 1277.
Run Code Online (Sandbox Code Playgroud)

dra*_*tun 6

根据你的评论http_proxy,你的shell中是否设置了ENV变量?

$ env | grep http_proxy
Run Code Online (Sandbox Code Playgroud)

如果没有,请使用您的代理设置进行设置,然后重新尝试perlbrew install:

 $ export http_proxy = "http://yourProxyURLorIP:8080"
 $ perlbrew install perl-5.12.1
Run Code Online (Sandbox Code Playgroud)

perlbrew使用此ENV变量来获取代理服务器.如果未设置此ENV变量,则它会尝试正常的直接HTTP连接(请参阅Github上perlbrew当前主服务器中的第1274行)

$ua->proxy($ENV{http_proxy}) if $ENV{http_proxy};
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,那么看看HTTP::Lite.这是perlbrew在引擎盖下用于获取源代码的内容. NB.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!
Run Code Online (Sandbox Code Playgroud)

我想你可能已经遇到了一个已知的bug HTTP::Lite,请参阅RT问题uri样式代理env vars无法正确设置代理和端口.

上面的代码是这个bug的解决方法.我假设同样的错误是perlbrew副本HTTP::Lite.如果它然后http://从您的http_proxy 删除ENV将解决问题(着名的遗言!)


更新2

只是为了让你的最后一个评论清楚,当你运行时perlbrew你可以这样做(从shell像bash):

http_proxy=IPaddr:Port perlbrew install perl-5.12.1
Run Code Online (Sandbox Code Playgroud)

你需要始终前缀每个perlbrew命令是这样,至少要等到HTTP::Liteperlbrew代理的错误是固定的.

上面的替代方法是你可以修补你的本地版本,只需在第1277行之前添加以下内容:

$ENV{http_proxy} = "IPaddr:Port";   # <= your proxy IP & port
Run Code Online (Sandbox Code Playgroud)

希望我们终于破解了它!让我知道是否所有成功,因为如果是这样,那么我将发布一个修复Gugod(作者perlbrew)与必要的本地更改HTTP::Lite.