[問題] 關於 CPAN.pm 的疑問
昨天要新增模組時,CPAN shell 有提示字串說 CPAN 有出新的版本
建議安裝新版,於是安裝了之後,反而不能跑了
cpan[2]> install html::Greeting
Running install for module html::Greeting
Running make for T/TB/TBONE/HTML-Seamstress-4.26.tar.gz
CPAN: LWP::UserAgent loaded ok
Can't call method "can" without a package or object reference at
/usr/local/lib/perl5/5.8.5/CPAN.pm line 2904.
=========================================================================
my @urllist = map { $CPAN::Config->{urllist}[$_] } @host_seq;
for my $u (@urllist) {
if ($u->can("text")) {
$u->{TEXT} .= "/" unless substr($u->{TEXT},-1) eq "/";
} else {
$u .= "/" unless substr($u,-1) eq "/";
$u = CPAN::URL->new(TEXT => $u, FROM => "USER");
}
}
=========================================================================
問題出在黃色那一句,不過弟對於這 $u 到是什麼不太明白。
雖然不知有沒有人也遇到了,我還是提一下我亂來的解決方式
目前是找比較舊一點的版本 source code 直接 make & make install
把檔蓋掉了 ( CPAN-1.88_67 版本號相同, patch 次數不同)
再觀察了這個能跑的版本,寫法有一點不同
不是用
$u->can("text")
而是
UNIVERSAL::can($u,"text")
==========================================================================
sub _get_urllist {
my($self) = @_;
$CPAN::Config->{urllist} ||= [];
unless (ref $CPAN::Config->{urllist} eq 'ARRAY') {
$CPAN::Frontend->mywarn("Malformed urllist; ignoring. Configuration
file corrupt?\n");
$CPAN::Config->{urllist} = [];
}
my @urllist = grep { defined $_ and length $_ }
@{$CPAN::Config->{urllist}};
for my $u (@urllist) {
CPAN->debug("u[$u]") if $CPAN::DEBUG;
if (UNIVERSAL::can($u,"text")) {
$u->{TEXT} .= "/" unless substr($u->{TEXT},-1) eq "/";
} else {
$u .= "/" unless substr($u,-1) eq "/";
$u = CPAN::URL->new(TEXT => $u, FROM => "USER");
}
}
\@urllist;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.50.186
Perl 近期熱門文章
PTT數位生活區 即時熱門文章