Perl Code‎ > ‎

pmsearch.pl

A script for searching @INC for particular modules. If you don't pass it any parameters, it will list all modules it can find in alphabetical order. Handy for seeing just what you have installed.

#!/usr/bin/perl
################################################################################
# $Id: pmsearch.pl 75 2010-04-09 17:58:38Z v89326 $
# $URL: file:///S:/svn/utilities/trunk/pmsearch.pl $
################################################################################
#
# Title:   pmsearch
# Author:  Kurt Kincaid
# VERSION: 0.0.2
#
################################################################################

use strict;
use File::Find;

$| = 1;
our ( %mods, $pattern );
chomp @ARGV;

my @mods = perlMods( $ARGV[ 0 ] );
foreach my $mod ( @mods ) {
    print $mod, "\n";
}

sub perlMods {
    $pattern = shift || ".";
    $pattern =~ s/::/\//g;
    foreach my $startDir ( @INC ) {
        $main::startDir = $startDir;
        find( \&modFind, $startDir );
    }
    my @mods = sort { lc( $a ) cmp lc( $b ) } keys %mods;
    chomp @mods;
    return @mods;
}

sub modFind {
    if ( -d && /^[a-z]/ ) {
        $File::Find::prune = 1;
        return;
    }
    local $_ = $File::Find::name;
    return unless $_ =~ /\.pm$/;
    my $tmpname;
    ( $tmpname = $_ ) =~ s{^\Q$main::startDir/}{};
    return unless $tmpname =~ /$pattern/;
    $tmpname =~ s/\.pm$//;
    $tmpname =~ s{/}{::}g;
    $mods{ $tmpname } = 1;
    return 1;
}

################################################################################
# EOF

Comments