## Need to get rid of directories, such as 5.8.8 or i386-linux-thread-multi
## 5.8.8::URI.pm
## i386-linux-thread-multi::Net::DNS::RR::MG.pm
$file =~ s{^ +\d+\.\d+\.\d+::}{}g;
$file =~ s{^ ?[^A-Z]+::}{}g;
$file =~ s/^ +//g;
####
use File::Find 'find';
# Where to create this list...
my $LIST_DIR = "$ENV{HOME}/.vim_extras/"
my $LIST_FILE = "file_that_lists_every_installed_Perl_module";
# Make sure the directory is available...
unless (-e $LIST_DIR )
{
mkdir $LIST_DIR
or die "Couldn't create directory $LIST_DIR ($!)\\n";
}
# (Re)create the file...
open my $fh, '>', "$LIST_DIR$LIST_FILE"
or die "Couldn't create file '$LIST_FILE' ($!)\\n";
# Only report each module once (the first time it's seen)...
my %already_seen;
# Walk through the module include directories, finding .pm files...
for my $incl_dir (@INC)
{
find
{
wanted => sub
{
my $file = $_;
# They have to end in .pm...
return unless $file =~ /\\.pm\\z/;
# Convert the path name to a module name...
$file =~ s{^\\Q$incl_dir/\\E}{ };
$file =~ s{/}{::}g;
$file =~ s{\\.pm\\z}{ };
# Handle standard subdirectories (like site_perl/ or 5.8.6/)...
$file =~ s{^.*\\b[a-z_0-9]+::}{ };
$file =~ s{^\\d+\\.\\d+\\.\\d+::(?:[a-z_][a-z_0-9]*::)?}{ };
return if $file =~ m{^::};
# Print the module's name (once)...
print {$fh} $file, "\\n" unless $already_seen{$file}++;
},
no_chdir => 1,
}, $incl_dir;
}
##
##
for my $incl_dir (@INC)
{
find
{
wanted => sub
{
my $file = $_;
# They have to end in .pm...
return unless $file =~ /.+\.pm/;
# Convert the path name to a module name...
$file =~ s{^\Q$incl_dir/\E}{ };
$file =~ s{/}{::}g;
# Handle standard subdirectories (like site_perl/ or 5.8.6/)...
## 5.8.8::URI.pm
## i386-linux-thread-multi::Net::DNS::RR::MG.pm
$file =~ s{^ +\d+\.\d+\.\d+::}{}g;
$file =~ s{^ ?[^A-Z]+::}{}g;
$file =~ s/^ +//g;
return if $file =~ m{^::};
# Print the module's name (once)...
#print "printing\n";
print {$fh} $file, "\n" unless $already_seen{$file}++;
},
no_chdir => 1,
}, $incl_dir;