#!/usr/bin/perl use strict; use warnings; use File::Temp qw(tempdir); use File::Find; use File::Spec; my $module_tgz = shift || die "usage: $0 pkgfile\n"; my $dir = tempdir(CLEANUP => 1); system "tar -C $dir -xzf $module_tgz" and die "untaring $module_tgz failed\n"; my ($pkg) = do { opendir my($dh),$dir; grep !/^\.\.?$/, readdir $dh }; my $pkgdir = File::Spec->catfile($dir,$pkg); my $libdir = File::Spec->catfile($dir,$pkg,'lib'); my $makefile = File::Spec->catfile($dir,$pkg,'Makefile.PL'); my $module; if ( -e $makefile) { open my $fh, '<', $makefile or die "Can't read $makefile\n"; FH: while(<$fh>) { if ( /WriteMakefile/ .. /\);/) { /NAME\S?\s*=>\s(?:["']|q+(.))([\w:]+)(?:["']|q+(.))/ and print "Module: ", ($module = $2),"\n" and last FH; } } } print "Module ",($module || '(unknown)')," provides:\n"; find(\&get_mods,$libdir); sub get_mods { if ((my $file = $File::Find::name) =~ s/\.pm$//) { $file =~ s{.*lib/}{}; $file =~ s{/}{::}g; print " $file\n"; } } #### NAME => q(Foo::Bar),