in reply to Searching for Perl Modules in Files

Take a look at Module::ScanDeps.

Update: Once you've got your script to scan for all of the perl scripts (using File::Find, or File::Find::Rule which has example code for this) use Module::ScanDeps to find dependencies.

  • Comment on Re: Searching for Perl Modules in Files

Replies are listed 'Best First'.
Re^2: Searching for Perl Modules in Files
by Anonymous Monk on Aug 27, 2010 at 17:28 UTC
    I can use "File::Find::Rule" that works good, any sample about how I could use "Module::ScanDeps" to scan these files for any Perl modules?
    use File::Find::Rule; my $directory="../mydir"; # find all the subdirectories of a given directory my @subdirs = File::Find::Rule->directory->in( $directory ); my $rule = File::Find::Rule->new; $rule->file; $rule->name( '*.pl' ); my @files = $rule->in( $directory ); foreach (@files) { print "$_\n"; }

      From the docs of Module::ScanDeps I'd try something like the following (untested):

      # using your @files array as the starting point... my $dependencies = scan_deps( files => \@files, recurse => 1, );
      I got to a point where I can search for "use" and print every line that uses "use" assuming that it is followed by a Perl module, can someone add to this so it can print the name of the file/script been searched and only "grep" a line that has "use modulename;". Otherwise it is grabbing lines with comments with the word "use" in it. That would take care of this, any help?
      Here is the code so far:

      use File::Find::Rule; my $directory="../yourdirectory"; # find all the subdirectories of a given directory my @subdirs = File::Find::Rule->directory->in( $directory ); my $rule = File::Find::Rule->new; $rule->file; $rule->name( '*.pl' ); my @files = $rule->in( $directory ); foreach my $files(@files) { open (FILE, "$files"); while($line= <FILE> ){ print "$line" if grep /\buse\b/, $line; } close FILE; }