note
usemodperl
Excellent advice as usual stevieb, thanks for reminding me. I refactored with your lesson in mind and recycled the code to extract comments (which are actually interesting). Hopefully this version is easier to read:
<code>
#!/usr/bin/perl ##################################
# Check installed *CPAN* modules for COMMENTS! #
# Because CPAN modules have a lot of COMMENTS! #
# https://perlmonks.org/index.pl?node_id=1217408 #
##################################################
use strict;
use warnings;
use Config '%Config';
use ExtUtils::Installed;
for (split $Config{path_sep}, $ENV{PATH}) {
$|++ if -x "$_/grep"
}
die "you need grep" unless $|;
my $time = time;
my $perl = ExtUtils::Installed->new;
my @cpan = $perl->modules();
my @temp = ();
for (@cpan) {
my @cpan = $perl->files($_);
push @temp, @cpan;
}
@cpan = grep /site.*\.pm$/, @temp;
my $opt = 0;
if (@ARGV) { $opt = 1 }
else {
print qq~Checking CPAN modules for COMMENTS in Perl versio~.
qq~n $^V\n(Invoke with any arg to skip questions and gener~.
qq~ate a list of modules.)\n\n~;
print qq~The list may be big and printing progress makes i~.
qq~t a bit slower.\nDefault: display progress, format outp~.
qq~ut and print offending lines of code.\nPress return to ~.
qq~start or n for no progress and list output. y/N~;
chomp($opt = <STDIN>); $opt = 1 if $opt and lc $opt eq 'n';
}
my $INC = join '|', @INC;
my $acme = 0;
my $grep = 0;
for my $cpan (@cpan) {
print "\rChecking: ","$acme\tFound: $grep\t" unless $opt;
if(@_ =`grep '^#' $cpan`) {
@_ = grep !/^#(pod|[\-=~\*]|[#]{5,}|\s*\n)/,@_; # FAKE
next unless scalar @_;
(my $name = $cpan) =~ s/($INC)//;
$name =~ s,^/,,;
$name =~ s,/,::,g;
$name =~ s/\.pm$//;
s/^\s+/ / for @_;
$_{$name} = join "\n ", @_;
$grep++
}
$acme++
}
if ($opt) {
print "$_\n" for sort keys %_
}
else {
$perl = scalar keys %_;
$time = time - $time;
print qq~$perl CPAN modules (out of $acme) found with COMMENTS!\n~;
print "$_:\n $_{$_}","-"x60,"\n" for sort keys %_;
print qq~$perl CPAN modules (out of $acme) found with COMMENTS!\n~;
print "That took $time secs (grep searched ",sprintf("%0d",$perl/$time),
" modules/sec).\n";
}
</code>
<div class="pmsig"><div class="pmsig-1216830">
<sub><b>STOP REINVENTING WHEELS, START BUILDING SPACE ROCKETS!</b>—[https://www.cpan.org/|CPAN]</sub> 🐪
</div></div>
1217408
1217471