pmtools
view release on metacpan or search on metacpan
#!/usr/bin/env perl
# pmdesc -- show NAME section
# ------ pragmas
use strict;
use warnings;
use FindBin qw($Bin);
use Getopt::Long;
our $VERSION = '2.1.0';
# ------ define variables
my $errors; # error count
my $fullpath; # full module path
my $module; # module name
my $use_pod; # use .pod instead of .pm file for systems with split POD/pm
my $vers; # module version
BEGIN { $^W = 1 }
GetOptions ("splitpod" => \$use_pod);
$errors = 0;
MODULE: for $module (@ARGV) {
if ($use_pod) {
$fullpath = `$^X $Bin/podpath $module`;
} else {
$fullpath = `$^X $Bin/pmpath $module`;
}
if ($?) {
$errors++;
next;
}
chomp $fullpath;
unless (open(POD, "< $fullpath")) {
warn "$0: cannot open $fullpath: $!";
$errors++;
next;
}
local $/ = '';
local $_;
while (<POD>) {
if (/=head\d\s+NAME/) {
chomp($_ = <POD>);
s/^.*?-\s+//s;
s/\n/ /g;
#write;
my $v;
if (defined ($vers = getversion($module))) {
print "$module ($vers) ";
} else {
print "$module ";
}
print "- $_\n";
next MODULE;
}
}
print "no description found\n";
$errors++;
}
sub getversion {
my $module = shift;
my $vers;
if ( $^O eq "MSWin32" ) {
$vers = `$^X -S $Bin/pmvers $module 2>NUL`;
} else {
$vers = `$^X -S $Bin/pmvers $module 2>/dev/null`;
}
return if $?;
chomp $vers;
return $vers;
}
exit ($errors != 0);
__END__
=head1 NAME
pmdesc - print out version and whatis description of perl modules
=head1 DESCRIPTION
Given one or more module names, show the version number (if known)
and the 'whatis' line, that is, the NAME section's description,
typically used for generation of whatis databases.
=head1 EXAMPLES
$ pmdesc IO::Socket
IO::Socket (1.25) - Object interface to socket communications
$ oldperl pmdesc IO::Socket
IO::Socket (1.1603) - Object interface to socket communications
$ pmdesc `pminst -s | perl -lane 'print $F[1] if $F[0] =~ /site/'`
XML::Parser::Expat (2.19) - Lowlevel access to James Clark's expat XML parser
( run in 0.515 second using v1.01-cache-2.11-cpan-8dfa8b56332 )