MDD, Module Dependency Disorder, the perl plague

There's a problem with more and more perl modules I'd like to call "Module Dependency Disorder", MDD. Many perl modules, especially the newer ones have so many dependencies - it's just a mess. In the old times you could install modules by using "perl Makefile.PL && make && sudo make install", under some OSes like Linux and FreeBSD most modules are packaged. But this is over.

Thanks goodness there's Perlbrew so I don't have to mess with my system in order to just test a new module. Today I wanted to play a little with Geo::GPX and GIS::Distance, so I installed them inside my perlbrew environment using 'cpanm'. This is what it looked like:

% cpanm GIS::Distance
--> Working on GIS::Distance
Fetching http://www.cpan.org/authors/id/B/BL/BLUEFEET/GIS-Distance-0.09.tar.gz ... OK
Configuring GIS-Distance-0.09 ... OK
==> Found dependencies: Type::Tiny, Moo, Class::Measure, namespace::clean, strictures
--> Working on Type::Tiny
Fetching http://www.cpan.org/authors/id/T/TO/TOBYINK/Type-Tiny-1.000005.tar.gz ... OK
Configuring Type-Tiny-1.000005 ... OK
Building and testing Type-Tiny-1.000005 ... OK
Successfully installed Type-Tiny-1.000005
--> Working on Moo
Fetching http://www.cpan.org/authors/id/H/HA/HAARG/Moo-2.000002.tar.gz ... OK
Configuring Moo-2.000002 ... OK
==> Found dependencies: Module::Runtime, Role::Tiny, Devel::GlobalDestruction, Class::Method::Modifiers
--> Working on Module::Runtime
Fetching http://www.cpan.org/authors/id/Z/ZE/ZEFRAM/Module-Runtime-0.014.tar.gz ... OK
Configuring Module-Runtime-0.014 ... OK
Building and testing Module-Runtime-0.014 ... OK
Successfully installed Module-Runtime-0.014
--> Working on Role::Tiny
Fetching http://www.cpan.org/authors/id/H/HA/HAARG/Role-Tiny-2.000001.tar.gz ... OK
Configuring Role-Tiny-2.000001 ... OK
Building and testing Role-Tiny-2.000001 ... OK
Successfully installed Role-Tiny-2.000001
--> Working on Devel::GlobalDestruction
Fetching http://www.cpan.org/authors/id/H/HA/HAARG/Devel-GlobalDestruction-0.13.tar.gz ... OK
Configuring Devel-GlobalDestruction-0.13 ... OK
==> Found dependencies: Sub::Exporter::Progressive
--> Working on Sub::Exporter::Progressive
Fetching http://www.cpan.org/authors/id/F/FR/FREW/Sub-Exporter-Progressive-0.001011.tar.gz ... OK
Configuring Sub-Exporter-Progressive-0.001011 ... OK
Building and testing Sub-Exporter-Progressive-0.001011 ... OK
Successfully installed Sub-Exporter-Progressive-0.001011
Building and testing Devel-GlobalDestruction-0.13 ... OK
Successfully installed Devel-GlobalDestruction-0.13
--> Working on Class::Method::Modifiers
Fetching http://www.cpan.org/authors/id/E/ET/ETHER/Class-Method-Modifiers-2.11.tar.gz ... OK
Configuring Class-Method-Modifiers-2.11 ... OK
Building and testing Class-Method-Modifiers-2.11 ... OK
Successfully installed Class-Method-Modifiers-2.11
Building and testing Moo-2.000002 ... OK
Successfully installed Moo-2.000002
--> Working on Class::Measure
Fetching http://www.cpan.org/authors/id/B/BL/BLUEFEET/Class-Measure-0.05.tar.gz ... OK
Configuring Class-Measure-0.05 ... OK
==> Found dependencies: Sub::Exporter
--> Working on Sub::Exporter
Fetching http://www.cpan.org/authors/id/R/RJ/RJBS/Sub-Exporter-0.987.tar.gz ... OK
Configuring Sub-Exporter-0.987 ... OK
==> Found dependencies: Data::OptList, Sub::Install, Params::Util
--> Working on Data::OptList
Fetching http://www.cpan.org/authors/id/R/RJ/RJBS/Data-OptList-0.109.tar.gz ... OK
Configuring Data-OptList-0.109 ... OK
==> Found dependencies: Params::Util, Sub::Install
--> Working on Params::Util
Fetching http://www.cpan.org/authors/id/A/AD/ADAMK/Params-Util-1.07.tar.gz ... OK
Configuring Params-Util-1.07 ... OK
Building and testing Params-Util-1.07 ... OK
Successfully installed Params-Util-1.07
--> Working on Sub::Install
Fetching http://www.cpan.org/authors/id/R/RJ/RJBS/Sub-Install-0.928.tar.gz ... OK
Configuring Sub-Install-0.928 ... OK
Building and testing Sub-Install-0.928 ... OK
Successfully installed Sub-Install-0.928
Building and testing Data-OptList-0.109 ... OK
Successfully installed Data-OptList-0.109
Building and testing Sub-Exporter-0.987 ... OK
Successfully installed Sub-Exporter-0.987
Building and testing Class-Measure-0.05 ... OK
Successfully installed Class-Measure-0.05
--> Working on namespace::clean
Fetching http://www.cpan.org/authors/id/R/RI/RIBASUSHI/namespace-clean-0.26.tar.gz ... OK
Configuring namespace::clean-0.26 ... OK
==> Found dependencies: Package::Stash, B::Hooks::EndOfScope
--> Working on Package::Stash
Fetching http://www.cpan.org/authors/id/D/DO/DOY/Package-Stash-0.37.tar.gz ... OK
==> Found dependencies: Dist::CheckConflicts
--> Working on Dist::CheckConflicts
Fetching http://www.cpan.org/authors/id/D/DO/DOY/Dist-CheckConflicts-0.11.tar.gz ... OK
Configuring Dist-CheckConflicts-0.11 ... OK
Building and testing Dist-CheckConflicts-0.11 ... OK
Successfully installed Dist-CheckConflicts-0.11
Configuring Package-Stash-0.37 ... OK
==> Found dependencies: Package::Stash::XS, Module::Implementation
--> Working on Package::Stash::XS
Fetching http://www.cpan.org/authors/id/D/DO/DOY/Package-Stash-XS-0.28.tar.gz ... OK
Configuring Package-Stash-XS-0.28 ... OK
Building and testing Package-Stash-XS-0.28 ... OK
Successfully installed Package-Stash-XS-0.28
--> Working on Module::Implementation
Fetching http://www.cpan.org/authors/id/D/DR/DROLSKY/Module-Implementation-0.09.tar.gz ... OK
Configuring Module-Implementation-0.09 ... OK
Building and testing Module-Implementation-0.09 ... OK
Successfully installed Module-Implementation-0.09
Building and testing Package-Stash-0.37 ... OK
Successfully installed Package-Stash-0.37
--> Working on B::Hooks::EndOfScope
Fetching http://www.cpan.org/authors/id/E/ET/ETHER/B-Hooks-EndOfScope-0.15.tar.gz ... OK
Configuring B-Hooks-EndOfScope-0.15 ... OK
==> Found dependencies: Variable::Magic
--> Working on Variable::Magic
Fetching http://www.cpan.org/authors/id/V/VP/VPIT/Variable-Magic-0.59.tar.gz ... OK
Configuring Variable-Magic-0.59 ... OK
Building and testing Variable-Magic-0.59 ... OK
Successfully installed Variable-Magic-0.59
Building and testing B-Hooks-EndOfScope-0.15 ... OK
Successfully installed B-Hooks-EndOfScope-0.15
Building and testing namespace::clean-0.26 ... OK
Successfully installed namespace::clean-0.26
--> Working on strictures
Fetching http://www.cpan.org/authors/id/H/HA/HAARG/strictures-2.000001.tar.gz ... OK
Configuring strictures-2.000001 ... OK
==> Found dependencies: indirect, bareword::filehandles, multidimensional
--> Working on indirect
Fetching http://www.cpan.org/authors/id/V/VP/VPIT/indirect-0.36.tar.gz ... OK
Configuring indirect-0.36 ... OK
Building and testing indirect-0.36 ... OK
Successfully installed indirect-0.36
--> Working on bareword::filehandles
Fetching http://www.cpan.org/authors/id/I/IL/ILMARI/bareword-filehandles-0.003.tar.gz ... OK
==> Found dependencies: B::Hooks::OP::Check, ExtUtils::Depends
--> Working on B::Hooks::OP::Check
Fetching http://www.cpan.org/authors/id/Z/ZE/ZEFRAM/B-Hooks-OP-Check-0.19.tar.gz ... OK
==> Found dependencies: ExtUtils::Depends
--> Working on ExtUtils::Depends
Fetching http://www.cpan.org/authors/id/X/XA/XAOC/ExtUtils-Depends-0.404.tar.gz ... OK
Configuring ExtUtils-Depends-0.404 ... OK
Building and testing ExtUtils-Depends-0.404 ... OK
Successfully installed ExtUtils-Depends-0.404
Configuring B-Hooks-OP-Check-0.19 ... OK
Building and testing B-Hooks-OP-Check-0.19 ... OK
Successfully installed B-Hooks-OP-Check-0.19
Configuring bareword-filehandles-0.003 ... OK
==> Found dependencies: Lexical::SealRequireHints
--> Working on Lexical::SealRequireHints
Fetching http://www.cpan.org/authors/id/Z/ZE/ZEFRAM/Lexical-SealRequireHints-0.009.tar.gz ... OK
Configuring Lexical-SealRequireHints-0.009 ... OK
Building and testing Lexical-SealRequireHints-0.009 ... OK
Successfully installed Lexical-SealRequireHints-0.009
Building and testing bareword-filehandles-0.003 ... OK
Successfully installed bareword-filehandles-0.003
--> Working on multidimensional
Fetching http://www.cpan.org/authors/id/I/IL/ILMARI/multidimensional-0.011.tar.gz ... OK
Configuring multidimensional-0.011 ... OK
Building and testing multidimensional-0.011 ... OK
Successfully installed multidimensional-0.011
Building and testing strictures-2.000001 ... OK
Successfully installed strictures-2.000001
Building and testing GIS-Distance-0.09 ... OK
Successfully installed GIS-Distance-0.09
27 distributions installed

% cpanm Geo::Gpx –> Working on Geo::Gpx Fetching http://www.cpan.org/authors/id/A/AN/ANDYA/Geo-Gpx-0.26.tar.gz … OK Configuring Geo-Gpx-0.26 … OK ==> Found dependencies: XML::Descent, DateTime, DateTime::Format::ISO8601 –> Working on XML::Descent Fetching http://www.cpan.org/authors/id/A/AN/ANDYA/XML-Descent-1.04.tar.gz … OK Configuring XML-Descent-1.04 … OK ==> Found dependencies: XML::TokeParser, Test::Differences –> Working on XML::TokeParser Fetching http://www.cpan.org/authors/id/P/PO/PODMASTER/XML-TokeParser-0.05.tar.gz … OK Configuring XML-TokeParser-0.05 … OK ==> Found dependencies: XML::Parser –> Working on XML::Parser Fetching http://www.cpan.org/authors/id/T/TO/TODDR/XML-Parser-2.44.tar.gz … OK Configuring XML-Parser-2.44 … OK ==> Found dependencies: LWP::UserAgent –> Working on LWP::UserAgent Fetching http://www.cpan.org/authors/id/E/ET/ETHER/libwww-perl-6.13.tar.gz … OK Configuring libwww-perl-6.13 … OK ==> Found dependencies: File::Listing, HTTP::Cookies, HTTP::Request::Common, WWW::RobotRules,
HTTP::Request, URI, URI::Escape, HTTP::Daemon, HTTP::Date, LWP::MediaTypes, HTTP::Negotiate,
Net::HTTP, HTTP::Status, HTTP::Response –> Working on File::Listing Fetching http://www.cpan.org/authors/id/G/GA/GAAS/File-Listing-6.04.tar.gz … OK Configuring File-Listing-6.04 … OK ==> Found dependencies: HTTP::Date –> Working on HTTP::Date Fetching http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Date-6.02.tar.gz … OK Configuring HTTP-Date-6.02 … OK Building and testing HTTP-Date-6.02 … OK Successfully installed HTTP-Date-6.02 Building and testing File-Listing-6.04 … OK Successfully installed File-Listing-6.04 –> Working on HTTP::Cookies Fetching http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Cookies-6.01.tar.gz … OK Configuring HTTP-Cookies-6.01 … OK ==> Found dependencies: HTTP::Headers::Util –> Working on HTTP::Headers::Util Fetching http://www.cpan.org/authors/id/E/ET/ETHER/HTTP-Message-6.11.tar.gz … OK Configuring HTTP-Message-6.11 … OK ==> Found dependencies: URI, IO::HTML, LWP::MediaTypes –> Working on URI Fetching http://www.cpan.org/authors/id/E/ET/ETHER/URI-1.69.tar.gz … OK Configuring URI-1.69 … OK Building and testing URI-1.69 … OK Successfully installed URI-1.69 –> Working on IO::HTML Fetching http://www.cpan.org/authors/id/C/CJ/CJM/IO-HTML-1.001.tar.gz … OK Configuring IO-HTML-1.001 … OK Building and testing IO-HTML-1.001 … OK Successfully installed IO-HTML-1.001 –> Working on LWP::MediaTypes Fetching http://www.cpan.org/authors/id/G/GA/GAAS/LWP-MediaTypes-6.02.tar.gz … OK Configuring LWP-MediaTypes-6.02 … OK Building and testing LWP-MediaTypes-6.02 … OK Successfully installed LWP-MediaTypes-6.02 Building and testing HTTP-Message-6.11 … OK Successfully installed HTTP-Message-6.11 Building and testing HTTP-Cookies-6.01 … OK Successfully installed HTTP-Cookies-6.01 –> Working on WWW::RobotRules Fetching http://www.cpan.org/authors/id/G/GA/GAAS/WWW-RobotRules-6.02.tar.gz … OK Configuring WWW-RobotRules-6.02 … OK Building and testing WWW-RobotRules-6.02 … OK Successfully installed WWW-RobotRules-6.02 –> Working on HTTP::Daemon Fetching http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Daemon-6.01.tar.gz … OK Configuring HTTP-Daemon-6.01 … OK Building and testing HTTP-Daemon-6.01 … OK Successfully installed HTTP-Daemon-6.01 –> Working on HTTP::Negotiate Fetching http://www.cpan.org/authors/id/G/GA/GAAS/HTTP-Negotiate-6.01.tar.gz … OK Configuring HTTP-Negotiate-6.01 … OK Building and testing HTTP-Negotiate-6.01 … OK Successfully installed HTTP-Negotiate-6.01 –> Working on Net::HTTP Fetching http://www.cpan.org/authors/id/E/ET/ETHER/Net-HTTP-6.09.tar.gz … OK Configuring Net-HTTP-6.09 … OK Building and testing Net-HTTP-6.09 … OK Successfully installed Net-HTTP-6.09 Building and testing libwww-perl-6.13 … OK Successfully installed libwww-perl-6.13 Building and testing XML-Parser-2.44 … OK Successfully installed XML-Parser-2.44 Building and testing XML-TokeParser-0.05 … OK Successfully installed XML-TokeParser-0.05 –> Working on Test::Differences Fetching http://www.cpan.org/authors/id/D/DC/DCANTRELL/Test-Differences-0.63.tar.gz … OK Configuring Test-Differences-0.63 … OK Building and testing Test-Differences-0.63 … OK Successfully installed Test-Differences-0.63 Building and testing XML-Descent-1.04 … OK Successfully installed XML-Descent-1.04 –> Working on DateTime Fetching http://www.cpan.org/authors/id/D/DR/DROLSKY/DateTime-1.21.tar.gz … OK Configuring DateTime-1.21 … OK ==> Found dependencies: Test::Warnings, DateTime::TimeZone, DateTime::Locale, Params::Validate –> Working on Test::Warnings Fetching http://www.cpan.org/authors/id/E/ET/ETHER/Test-Warnings-0.021.tar.gz … OK Configuring Test-Warnings-0.021 … OK ==> Found dependencies: CPAN::Meta::Check –> Working on CPAN::Meta::Check Fetching http://www.cpan.org/authors/id/L/LE/LEONT/CPAN-Meta-Check-0.012.tar.gz … OK Configuring CPAN-Meta-Check-0.012 … OK ==> Found dependencies: Module::Metadata –> Working on Module::Metadata Fetching http://www.cpan.org/authors/id/E/ET/ETHER/Module-Metadata-1.000027.tar.gz … OK Configuring Module-Metadata-1.000027 … OK Building and testing Module-Metadata-1.000027 … OK Successfully installed Module-Metadata-1.000027 (upgraded from 1.000011) Building and testing CPAN-Meta-Check-0.012 … OK Successfully installed CPAN-Meta-Check-0.012 Building and testing Test-Warnings-0.021 … OK Successfully installed Test-Warnings-0.021 –> Working on DateTime::TimeZone Fetching http://www.cpan.org/authors/id/D/DR/DROLSKY/DateTime-TimeZone-1.94.tar.gz … OK Configuring DateTime-TimeZone-1.94 … OK ==> Found dependencies: Class::Singleton, Params::Validate, List::Util –> Working on Class::Singleton Fetching http://www.cpan.org/authors/id/S/SH/SHAY/Class-Singleton-1.5.tar.gz … OK Configuring Class-Singleton-1.5 … OK Building and testing Class-Singleton-1.5 … OK Successfully installed Class-Singleton-1.5 –> Working on Params::Validate Fetching http://www.cpan.org/authors/id/D/DR/DROLSKY/Params-Validate-1.21.tar.gz … OK Configuring Params-Validate-1.21 … OK Building and testing Params-Validate-1.21 … OK Successfully installed Params-Validate-1.21 –> Working on List::Util Fetching http://www.cpan.org/authors/id/P/PE/PEVANS/Scalar-List-Utils-1.42.tar.gz … OK Configuring Scalar-List-Utils-1.42 … OK Building and testing Scalar-List-Utils-1.42 … OK Successfully installed Scalar-List-Utils-1.42 (upgraded from 1.27) Building and testing DateTime-TimeZone-1.94 … OK Successfully installed DateTime-TimeZone-1.94 –> Working on DateTime::Locale Fetching http://www.cpan.org/authors/id/D/DR/DROLSKY/DateTime-Locale-0.92.tar.gz … OK Configuring DateTime-Locale-0.92 … OK Building and testing DateTime-Locale-0.92 … OK Successfully installed DateTime-Locale-0.92 Building and testing DateTime-1.21 … OK Successfully installed DateTime-1.21 –> Working on DateTime::Format::ISO8601 Fetching http://www.cpan.org/authors/id/J/JH/JHOBLITT/DateTime-Format-ISO8601-0.08.tar.gz … OK Configuring DateTime-Format-ISO8601-0.08 … OK ==> Found dependencies: DateTime::Format::Builder –> Working on DateTime::Format::Builder Fetching http://www.cpan.org/authors/id/D/DR/DROLSKY/DateTime-Format-Builder-0.81.tar.gz … OK Configuring DateTime-Format-Builder-0.81 … OK ==> Found dependencies: DateTime::Format::Strptime, Class::Factory::Util –> Working on DateTime::Format::Strptime Fetching http://www.cpan.org/authors/id/D/DR/DROLSKY/DateTime-Format-Strptime-1.57.tar.gz … OK Configuring DateTime-Format-Strptime-1.57 … OK Building and testing DateTime-Format-Strptime-1.57 … OK Successfully installed DateTime-Format-Strptime-1.57 –> Working on Class::Factory::Util Fetching http://www.cpan.org/authors/id/D/DR/DROLSKY/Class-Factory-Util-1.7.tar.gz … OK Configuring Class-Factory-Util-1.7 … OK Building and testing Class-Factory-Util-1.7 … OK Successfully installed Class-Factory-Util-1.7 Building and testing DateTime-Format-Builder-0.81 … OK Successfully installed DateTime-Format-Builder-0.81 Building and testing DateTime-Format-ISO8601-0.08 … OK Successfully installed DateTime-Format-ISO8601-0.08 Building and testing Geo-Gpx-0.26 … OK Successfully installed Geo-Gpx-0.26 30 distributions installed

Yes that's right. 55 perlmodules were installed as dependencies, which doesn't take the ones I already had installed into account.Of course the most of them are recursive dependencies. But these days developers don't look at the dependency tree when they decide which module to use.

This is just shit. Fucking shit. Stinking shit. Idiotic shit. No wonder most people think perl is dead. Perl itself might be alive but the founding idea behind it is surely dead. What a nightmare.

#source

↷ 30.10.2015