my $list = `find -L . -name '*.pm' -exec grep -PHn '\\b(use|require) *[A-Z]' \\{\\} \\; `; my %where; foreach (split("\n", $list)) { $_ =~ s/#.*$//; if ($_ =~ m/^(.*?):.*\b(?:use|require) ([A-Z][A-Za-z0-9:]*)/) { my $module = $2; my $file = $1; next if $module =~ /(Foswiki|TWiki)::/; # Edit out some noise next if $module =~ /^(Assert|Monitor|Benchmark|BuildContrib|ONLY|ERROR|PurePerl|Perl)/; $where{$module} ||= {}; if ($file =~ m{/Configure}) { $where{$module}->{configure} = $file; } elsif ($file =~ m{(?:Plugins|Contrib)/([^/.]*)}) { $where{$module}->{$1} = $file; } elsif ($file =~ m./Store/(Rcs|PlainFile).) { $where{$module}->{"${1}StoreContrib"} = $1; } elsif ($file =~ m{TWiki}) { $where{$module}->{'TWikiCompatibilityPlugin'} = $file; } else { $where{$module}->{core} = $file; } } else { print "Ign $line\n"; next; } } foreach ( sort keys %where ) { print "$_ "; if ($where{$_}->{core}) { print 'core '; delete $where{$_}->{core}; delete $where{$_}->{configure}; } print join(",", keys %{$where{$_}}); print "\n"; } 1;