[Perl] 如何列出可升級的 CPAN 模組

作者:   發佈於:   #perl #cpan #howto

一陣子之前看到的。 cpan-outdated 這個指令,能列出所有可升級的模組。

它的輸出格式看來是 CPAN Mirror 底下的路徑。可以直接餵給 cpanm 去安裝。

# cpan-outdated | head
P/PL/PLICEASE/Alien-Build-2.76.tar.gz
P/PL/PLICEASE/Alien-Libxml2-0.19.tar.gz
T/TO/TOKUHIROM/Amon2-6.16.tar.gz
R/RJ/RJBS/App-Cmd-0.335.tar.gz
O/OA/OALDERS/App-perlimports-0.000049.tar.gz
R/RJ/RJBS/App-Uni-9.006.tar.gz
P/PJ/PJACKLAM/bignum-0.66.tar.gz
L/LE/LEEJO/CGI-4.55.tar.gz
G/GA/GARU/Clone-0.46.tar.gz
P/PM/PMQS/Compress-Raw-Bzip2-2.201.tar.gz

此外既有的 cpan 指令也能做到類似的事:執行 cpan -O 後,會列出各模組的目前版號以及最新版的版號。

# cpan -O | head -15
Reading '/home/gugod/.cpan/Metadata'
  Database was generated on Thu, 05 Jan 2023 00:54:02 GMT
Module Name                                Local    CPAN
-------------------------------------------------------------------------
CPAN: Module::CoreList loaded ok (v5.20220520)
Acme::CPANAuthors::Austrian               1.1318  1.1318
Alien::Base                               2.5100  2.7600
Alien::Base::PkgConfig                    2.5100  2.7600
Alien::Base::Wrapper                      2.5100  2.7600
Alien::Build                              2.5100  2.7600
Alien::Build::CommandSequence             2.5100  2.7600
Alien::Build::Interpolate                 2.5100  2.7600
Alien::Build::Interpolate::Default        2.5100  2.7600
Alien::Build::Log                         2.5100  2.7600
Alien::Build::Log::Abbreviate             2.5100  2.7600

但看來 cpan -O 列出的是 package 而 cpan-outdated 列出的是 distribution。 不過也可執行 cpan-outdated -p,讓它改列 package 名。

如果只是要無條件全部升到最新版的話,可以執行 cpan -U 或是 cpan-outdated | cpanm