#!/usr/bin/env perl
use Modern::Perl '2009'; # Enable Perl 5.10 features
use strict; # Included so that perlcritic does not complain
use warnings; # ditto
use 5.010; # Only works under Perl 5.10 and later
use autodie qw( :all ); # Make system functions either succeed or die
use strictures 2; # Turn on strict and make most warnings fatal
use English;
# Determine the list of module names
my @module_names;
foreach my $inc_dir (@INC) {
my @file_names;
eval {
@file_names = `find $inc_dir -name '*.pm' 2>/dev/null`;
};
continue if ($EVAL_ERROR);
foreach my $found (@file_names) {
chomp $found; # remove the trailing newline
$found =~ s{ # substitute...
\A $inc_dir # ...a beginning dir name
}
{}xms; # replacing it with nothing
$found =~ s{ # substitute...
\.pm \z # ... an ending .pm
}
{}xms; # replacing it with nothing
$found =~ s{ # substitute...
/ # ... each slash (/)
}
{::}gxms; # replacing it with ::
$found =~ s{ # substitute...
\A :: # ... a beginning ::
}
{}xms; # replacing it with nothing
push @module_names, $found; # and add to the module names list
}
}
# Finally, print a lexicographically sorted list of the module names
for my $module_name ( sort @module_names ) {
say $module_name;
}
# vim: set filetype=perl smartindent autoindent smarttab expandtab tabstop=4 softtabstop=4 shiftwidth=4 autoread