In this post I will present you some must-have-but-less-known CPAN utils ๐ ๐ช ๐
List outdated modules
You can use cpan-outdated to get the list of your outdated modules.
$ cpan-outdated -p
Acme::Automatix
Alien::Plotly::Orca
Alien::SNMP::MAXTC
PPIx::QuoteLike
PPIx::Regexp
Outdated modules you said?
The discrepancy is totally normal, since modules versions evolve on CPAN but not necessarily locally.
In my example, the list is very small because I updated all my modules very recently with cpan-outdated -p | cpanm
(I don't really know why I did it but it was cool ๐).
Get latest changes
Use cpan-listchanges to get meaningful portions of changelog between the version installed locally versus the latest version on CPAN. Example with one of the outdated from my previous list:
$ cpan-listchanges PPIx::QuoteLike
=== Changes between 0.015 and 0.016 for PPIx-QuoteLike
0.016 2021-03-26 T. R. Wyant
Add rt.cpan.org back to bug reporting methods. Long live RT!
Get prerequisites up to snuff, and add xt/author/prereq.t to ensure
they stay that way.
Refactor authortest into three, so I do not have to generate stub
files to test without optional modules.
Print dependencies tree
Print the dependency tree with cpandeps
$ cpandeps JSON::Conditional
JSON::Conditional (dist: L/LN/LNATION/JSON-Conditional-1.00.tar.gz)
JSON (dist: I/IS/ISHIGAKI/JSON-4.03.tar.gz)
Test::More (dist: E/EX/EXODIST/Test-Simple-1.302183.tar.gz)
File::Temp (dist: E/ET/ETHER/File-Temp-0.2311.tar.gz)
Carp (dist: X/XS/XSAWYERX/Carp-1.50.tar.gz)
Exporter (dist: T/TO/TODDR/Exporter-5.74.tar.gz)
IPC::Open3 (dist: S/SH/SHAY/perl-5.32.1.tar.gz)
File::Path (dist: J/JK/JKEENAN/File-Path-2.18.tar.gz)
File::Spec::Functions (dist: X/XS/XSAWYERX/PathTools-3.75.tar.gz)
Scalar::Util (dist: P/PE/PEVANS/Scalar-List-Utils-1.55.tar.gz)
parent (dist: C/CO/CORION/parent-0.238.tar.gz)
Storable (dist: X/XS/XSAWYERX/Storable-3.15.tar.gz)
XSLoader (dist: S/SA/SAPER/XSLoader-0.24.tar.gz)
Module::Metadata (dist: E/ET/ETHER/Module-Metadata-1.000037.tar.gz)
Encode (dist: D/DA/DANKOGAI/Encode-3.08.tar.gz)
lib (dist: S/SM/SMUELLER/lib-0.63.tar.gz)
version (dist: L/LE/LEONT/version-0.9928.tar.gz)
base (dist: R/RJ/RJBS/base-2.23.tar.gz)
Struct::Conditional (dist: L/LN/LNATION/Struct-Conditional-1.00.tar.gz)
Clone (dist: A/AT/ATOOMIC/Clone-0.45.tar.gz)
B::COW (dist: A/AT/ATOOMIC/B-COW-0.004.tar.gz)
You can also see the JSON::Conditional deps (here for perl 5.26.1) on deps.cpantester.org:
Or a nice view (configurable) on cpandeps.grinnz.com:
None of these 2 pages give the exact same result than the command line, I haven't checked why, we could discuss in comments (maybe something with dynamic/static).
List system requirements
Several modules require libraries or development kit that CPAN can't satisfy (even if Alien modules can often fill this gap). Having a CPAN module installation failing because a dependency is missing is "normal". It is like when you compile something, it fails while reporting a missing header because you need to install it before. To help you and automatic tests, Slaven Reziฤ gathered system dependencies for us in the tool cpan-sysdeps
$ cpan-sysdeps --cpanmod Imager
libfreetype6-dev
libgif-dev
libpng-dev
libjpeg-dev
libtiff5-dev
I was mad when I discovered this module, come on MetaCPAN and hit the "++" button!
Conclusion
If you have more to add to this list, please share! ๐
Top comments (5)
I use
cpan-outdated
along with cpm to update my modules in parallel, saving time.Didn't know about cpan-listchanges and cpan-sysdeps, very cool :)
The differences in CPAN deps reported is likely because of whether core modules are excluded for a particular Perl version, and whether recommends/suggests are included.
FYI the CPANdeps website will go away soon.
Thank you. I see it's back to life now ๐ ๐
Nice. I was unaware of almost all of them (except cpandeps.grinnz.com)