I have this script to find out where a perl module is on my machine:

[unkn...@knowme:~/bin]$ cat findmodule
#!/usr/bin/perl -w
use File::Find;
use strict;
if ($ENV{"INC"} ) {                     # INC=PATH1:PATH2 ./getmodule
<module1> <module2> <module3> ...
        for my $toadd (split(/:/,$ENV{"INC"})) {
                push(@INC,"$toadd");
        }
}
while (my $module = shift) {
        print "=====> Looking for module $module <=====\n";
        my $modpath = "";
        $module .= '.pm' if $module !~ /pm$/;
        if ($module =~ /^([\d\w:]+)::([\d\w]+.pm)$/) {
                $modpath = $1;
                $module = $2;
        }
        $modpath =~ s!::!/!g;
        &findmodule($modpath,$module);
}

sub findmodule() {
        my $modpath = $_[0];
        my $module = $_[1];
        for my $path (@INC) {
                $path .= "/$modpath";
                if ( -d "$path" ) {
                        find( sub { print "$File::Find::name\n" if 
$File::Find::name =~
m!$modpath/$module$!} , $path);
                }
        }
}

The problem is, for successive iterations of the module name in the
while loop, it does not appear to check in the correct paths, i assume
this is because File::Find needs to be reset every time.

[unkn...@knowme:~/bin]$ getmodule  IO::Socket IO::Socket  Socket
=====> Looking for module IO::Socket <=====
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/IO/Socket.pm
=====> Looking for module IO::Socket <=====
=====> Looking for module Socket <=====
[unkn...@knowme:~/bin]$

Please let me know how i can fix it.

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to