#!/usr/bin/perl -w
use strict;
use Carp;
use ExtUtils::MakeMaker;
use File::Find qw(find);
$|++;
sub get_module_name {
my ($path, $relative_to) = @_;
local $_ = $path;
s!\A\Q$relative_to\E/?!!;
s! \.p(?:m|od) \z!!x;
s!/!::!g;
return $_;
}
sub get_module_description {
my ($file) = @_;
open my $pod, "<", $file
or (warn("\tCannot open $file: $!"), return);
local $_;
local $/ = '';
while (<$pod>) {
if (/=head\d\s+NAME/) {
$_ = <$pod>;
return unless $_; # $_ may be undefined
chomp;
s/ \A .*? - \s+ //sx;
tr/\n/ /;
return $_;
}
}
return;
}
sub get_module_version {
local $_; # MM->parse_version is naughty
my $vers_code = MM->parse_version($File::Find::name) || '';
return eval $vers_code || undef;
}
my %visited;
if(@ARGV) {
if($ARGV[0] eq '-h') {
print while <DATA>;
exit;
}
shift if $ARGV[0] eq '--';
}
else {
@ARGV = @INC;
}
for my $inc_dir (sort { length $b <=> length $a } @ARGV) {
find({
wanted => sub {
return unless /\.p(?:m|od)\z/ && -f;
my $module = get_module_name($File::Find::name, $inc_dir)
+;
my $version = get_module_version($_);
my $desc = get_module_description($_);
$version = defined $version ? "($version)" : "";
$desc = defined $desc ? "- $desc" : "";
print join (" ", $module, grep $_, $version, $desc), "\n";
},
preprocess => sub {
my ($dev, $inode) = stat $File::Find::dir or return;
$visited{"$dev:$inode"}++ ? () : @_;
},
},
$inc_dir);
}
__DATA__
Usage: pmdesc2 [-h] [--] [dir [dir dir ...]]
Options: -h print this cruft
If no parameters given, searches @INC
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|