Blog ← How to find CPAN deps in order of installation

Available translations: Русский

Sometimes we can't use CPAN, or we want to create single distribution to install all the modules without any need to connect to the net.

#!/usr/bin/env perl

use strict;
use warnings;

use CPAN::FindDependencies;

my $done = {};
my $list = {};
foreach my $module ( @ARGV ) {
    my @dependencies = CPAN::FindDependencies::finddeps( $module );
    foreach my $dep ( @dependencies ) {
        # we don't want to install perl core modules
        next if $dep->distribution() =~ m/perl-/;

        # skip if already processed
        next if exists $done->{ $dep->name() };

        push @{ $list->{ $dep->depth } }, $dep->name();

        $done->{ $dep->name() } = 1;
    }
}

my @keys = reverse sort keys %$list;

foreach my $key ( @keys ) {
    foreach my $module ( @{ $list->{ $key } } ) {
        print $module, "\n";
    }
}

24 Jun, 2008
0.04 »

Leave a comment

OpenID Login with OpenID
[u] [i] [url] [img] [code] [list]...
Won't be published
 
2008 GPL
This page takes 0.0291670000000001s to load
Powered by Catalyst