2

我已经安装了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.
4

1 回答 1

8

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

$ env | grep http_proxy

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

 $ export http_proxy = "http://yourProxyURLorIP:8080"
 $ perlbrew install perl-5.12.1

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

$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 style proxy env vars failed to set the proxy and port correct

上面的代码是解决此错误的方法。我假设相同的错误perlbrewHTTP::Lite. 如果是http://从您的 http_proxy ENV 中删除,则可以解决问题(著名的遗言!)


更新 2

只是为了在你运行时明确我的最后一条评论,perlbrew你可以这样做(从 shell like bash):

http_proxy=IPaddr:Port perlbrew install perl-5.12.1

您需要始终perlbrew像这样为每个命令添加前缀,至少在修复HTTP::Liteperlbrew代理错误之前。

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

$ENV{http_proxy} = "IPaddr:Port";   # <= your proxy IP & port

希望我们终于破解了它!让我知道是否一切都成功,因为如果是这样,那么我将向Gugod(的作者perlbrew)发布一个修复程序,并对HTTP::Lite.

于 2010-09-15T17:57:11.320 回答