2 depend or not 2 depend

Paulo Edgar Castro pauloedgarcastro at gmail.com
Thu Feb 4 17:46:46 GMT 2010

Dear mongers,

I come to you in the hope of enlightenment....

At the place were I work we a have a perl software suite that depends on 
roughly 148 modules not counting of course on the dependencies that 
these 148 modules have.
Ignoring the fact that we currently have a perl binary which has all the 
modules necessary to run the application, let's supposed we're changing 
processor architecture and we'd like the same version of perl to run and 
we would require exactly the same module versions that we currently have 
on the old system. Let's assume that there are not architectural 
problems installing the modules in this new architecture.

Long story short as I think I'm making a bit of a mess with the question...
We want to install all the 148 modules with the exact version number of 
what we currently have installed. Preferably we want to install 
everything exactly as we have.

Our initial thought was to just run through the motions of the app 
Makefile which has defined these 148 modules with perl Makefile.PL 
--defaultdeps && make
and wait for the modules to install.
Then the penny droped and we realized that we were getting the latest 
versions of each module which was not what we wanted.

Sure we could go the route of installing/updating all the modules and 
QAing the app in order to prove that it still works.
But there are issues with some modules which don't play nicely nor pass 
almost none of the tests and might break everything when different 
versions of the modules they depend on are installed in the system.

We also though that we could force a specific version of a module 
installation with for example "install 
But then CPAN would go on installing the latest Test-0.69 when 
Test-Simple-0.62 explicitly depends on Test-0.66 and thus not ready yet 
for 0.69.

The problem is, there doesn't seem to be a way of defining explicit 
dependencies like I depend on module version 0.1 so go on and install me 
that module version 0.1 not higher or lower in case you have problems 
either die or get back to me with options.

Possible solutions:


    * Get a listing of all the modules installed in the system
    * Try to mirror that list using our own bastard version of CPAN with
      cpansite ?


    * Get a listing of all the modules installed in the system
    * ..and installed them by hand

We currently use our own compiled version of perl 5.8.8
Below follows a snippet of our Makefile.

It's very likely that I might be missing some obvious knowledge/tricks here.
Would there be a cleverer way to accomplish this ?



Makefile snippet....

     'Cache::Memcached::Managed'                     =>  '0.20',
     'Carp::Always'                                  =>  '0.09',
     'Carp::REPL'                                    =>  '0.14',
     'Catalyst::Action::RenderView'                  =>  '0.11',
     'Catalyst::Authentication::Store::LDAP'         =>  '0.1004',
     'Catalyst::Component::InstancePerContext'       =>  '0.001001',
     'Catalyst::Component::InstancePerContext' =>  '0.001001',
     'Catalyst::Engine::Stomp'        =>  '0.06',
     'Catalyst::Log::Log4perl'                       =>  '1.00',
     'Catalyst::Model::DBIC::Schema'                 =>  '0.29',
     'Catalyst::Model::File'                         =>  '0.08',
     'Catalyst::Plugin::Authentication'              =>  '0.10013',
     'Catalyst::Plugin::Authorization::ACL'          =>  '0.11',
     'Catalyst::Plugin::Authorization::Roles'        =>  '0.07',


More information about the london.pm mailing list