[問題] 關於 CPAN.pm 的疑問

看板Perl作者 (愚人)時間18年前 (2007/02/15 15:10), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
昨天要新增模組時,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
文章代碼(AID): #15r0TQ9F (Perl)
文章代碼(AID): #15r0TQ9F (Perl)