Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: List of installed modules

by lemming (Priest)
on Dec 28, 2000 at 21:54 UTC ( [id://48647]=note: print w/replies, xml ) Need Help??


in reply to List of installed modules

use warnings; use strict; use File::Find; foreach my $dir (@INC) { File::Find::find (\&wanted,"$dir"); } sub wanted { if ($File::Find::name =~ /\.pm$/) { print "$File::Find::name\n"; } }
Hmmm. I could do better. Instead of the full path, we should print the module as it would be called and print the version number if found.
Update: Forgot to search perlmonks. Did a search on cpan and it was quicker to whip out the above code.

Replies are listed 'Best First'.
Re: Re: List of installed modules
by jynx (Priest) on Dec 29, 2000 at 01:01 UTC
    the code's already been posted, and the other solutions are obviously better, but i wanted to do more useless one-lining...

    #!/usr/local/bin/perl -w use strict; use File::Find; find { wanted => sub {print if /\.pm$/}, no_chdir=>1} $dir foreach my +$dir (@INC);
    hmmm, there are probably subdirectories in @INC that we've already searched since it recursively goes through the directories. Which would be faster: a search through all the directories using find or a prune using a hash to not re-search directories we've been through? The following is untested (ok, so was the above code), but it's an example...

    # same guidelines as above, use strict and that ilk my %been_at; sub wanted { return if $been_at{$dir}; $been_at{$dir} = 1; print if /\.pm$/; } find { wanted => \&wanted, no_chdir => 1 } $dir foreach my $dir (@INC) +;
    So the question i now have is would it be faster to make a hash or recurse possibly the same directories? i don't think this example is a significantly large enough search space to make much of a difference, but if it were would the latter method be faster? i think so but maybe someone can point out something i'm missing...


    Also while i'm at it, is no_chdir a hit to performance when recursing directories? Is it better to allow it to change directories? Please comment, i'm still new to File::Find.

    jynx

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://48647]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (3)
As of 2025-07-08 21:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.