http://qs321.pair.com?node_id=611600

Ananda has asked for the wisdom of the Perl Monks concerning the following question:

Is there a way already by which all included *pm files can be listed from a set of files/scripts in a folder/all scripts in general?
Ananda

Replies are listed 'Best First'.
Re: To list all *.pm files included in a set of pl scripts
by shigetsu (Hermit) on Apr 23, 2007 at 21:43 UTC

    I think Module::Info offers most of the functionality desired.

    Excerpt from the according SYNOPSIS bit:

    use Module::Info; my $mod = Module::Info->new_from_file('Some/Module.pm'); my $mod = Module::Info->new_from_module('Some::Module'); my $mod = Module::Info->new_from_loaded('Some::Module'); [...] # Only available in perl 5.6.1 and up. # These do compile the module. [...] my @used = $mod->modules_used;

Re: To list all *.pm files included in a set of pl scripts
by mreece (Friar) on Apr 24, 2007 at 02:33 UTC
    i cooked this up a few months ago using Module::Dependency::Indexer ...
    #!/usr/local/bin/perl ## Usage: # find_perl_dependencies.pl <DIR> # use strict; use warnings; use Module::Dependency::Indexer; use Module::Dependency::Info; my $start_dir = $ARGV[0] || '.'; Module::Dependency::Indexer::setIndex('/tmp/perl_dependencies.dat'); Module::Dependency::Indexer::makeIndex($start_dir); my $dpidx = Module::Dependency::Info::retrieveIndex(); my $all = $dpidx->{allobjects}; my @todo = map { @{ $all->{$_}->{depends_on} } } grep { exists $all->{$_}->{depends_on} } keys %$all; my @modules; my %seen; while (my $pm = shift @todo) { next if $seen{$pm}++; push @modules, $pm; next unless exists $all->{$pm} and exists $all->{$pm}->{depends_on +}; my @reqs = grep { !$seen{$_} } @{ $all->{$pm}->{depends_on} }; push @todo, @reqs; } print "$_\n" foreach sort @modules;
    comments welcome..
    updated to add sample output:

    when run in a directory containing only this script:

    % perl find_perl_dependencies.pl .
    Module::Dependency::Indexer
    Module::Dependency::Info
    strict
    warnings