3 BEGIN { pop @INC if $INC[-1] eq '.' }
6 use ExtUtils::Packlist;
7 use ExtUtils::Installed;
9 use vars qw($Inst @Modules);
14 instmodsh - A shell to examine installed modules
22 A little interface to ExtUtils::Installed to examine installed modules,
23 validate your packlists and even create a tarball from an installed module.
32 my $Module_Help = <<EOF;
33 Available commands are:
34 f [all|prog|doc] - List installed files of a given type
35 d [all|prog|doc] - List the directories used by a module
36 v - Validate the .packlist - check for missing files
37 t <tarfile> - Create a tar archive of the module
38 h - Display module help
42 my %Module_Commands = (
43 f => \&list_installed,
44 d => \&list_directories,
45 v => \&validate_packlist,
46 t => \&create_archive,
54 MODULE_CMD: while (1) {
55 print("$module cmd? ");
57 my $reply = <STDIN>; chomp($reply);
58 my($cmd) = $reply =~ /^(\w)\b/;
62 if( $Module_Commands{$cmd} ) {
63 $Module_Commands{$cmd}->($reply, $module);
65 elsif( $cmd eq 'q' ) {
76 my($reply, $module) = @_;
78 my $class = (split(' ', $reply))[1];
79 $class = 'all' unless $class;
82 if (eval { @files = $Inst->files($module, $class); }) {
83 print("$class files in $module are:\n ",
84 join("\n ", @files), "\n");
92 sub list_directories {
93 my($reply, $module) = @_;
95 my $class = (split(' ', $reply))[1];
96 $class = 'all' unless $class;
99 if (eval { @dirs = $Inst->directories($module, $class); }) {
100 print("$class directories in $module are:\n ",
101 join("\n ", @dirs), "\n");
110 my($reply, $module) = @_;
112 my $file = (split(' ', $reply))[1];
114 if( !(defined $file and length $file) ) {
115 print "No tar file specified\n";
117 elsif( eval { require Archive::Tar } ) {
118 Archive::Tar->create_archive($file, 0, $Inst->files($module));
121 my($first, @rest) = $Inst->files($module);
122 system('tar', 'cvf', $file, $first);
124 system('tar', 'rvf', $file, $f);
126 print "Can't use tar\n" if $?;
131 sub validate_packlist {
132 my($reply, $module) = @_;
134 if (my @missing = $Inst->validate($module)) {
135 print("Files missing from $module are:\n ",
136 join("\n ", @missing), "\n");
139 print("$module has no missing files\n");
149 ##############################################################################
154 Available commands are:
155 l - List all installed modules
156 m <module> - Select a module
163 my $reply = <STDIN>; chomp($reply);
168 print("Installed modules are:\n ", join("\n ", @Modules), "\n");
171 $reply =~ /^m\s+/ and do
173 do_module((split(' ', $reply))[1]);
187 ###############################################################################
189 $Inst = ExtUtils::Installed->new();
190 @Modules = $Inst->modules();
193 ###############################################################################