<%PERL>
my $dirname = File::Basename::dirname($INC{'RT.pm'});
my $localdir = $dirname."/../local/lib";
my @found;
File::Find::find(
    { untaint => 1,
      wanted => sub {
        return unless /(\w+)\.pm$/;
        return if $1 =~ /_/;
        my $name = $File::Find::name;
        $name =~ s/.*lib\b.//;
        $name =~ s!\.pm!!i;
        $name =~ s!\W!::!g;
        push @found, $name;
    },follow => ($^O ne 'MSWin32') },
    $dirname,$localdir
);
my ($prev, $indent);
foreach my $file (sort @found) {
    my ($parent, $name) = ($1, $2) if $file =~ /(?:(.*)::)?(\w+)$/;
    if ($file =~ /^$prev\::(.*)/) {
        my $foo = $1;
        while ($foo =~ s/(\w+):://) {
            $indent++;
            $m->print(('   ' x $indent));
            $m->print("$1
");
        }
        $indent++;
    } elsif ($prev !~ /^$parent\::/) {
        while ($parent =~ s/(\w+)//) {
            next if $prev =~ s/\b$1:://;
            while ($prev =~ s/:://) {
                $indent--;
            }
            $m->print(('   ' x $indent));
            $m->print("$1
");
            $indent++;
        }
    } elsif ($prev =~ /^$parent\::(.*::)/) {
        my $foo = $1;
        while ($foo =~ s/:://) {
            $indent--;
        }
    }
    $m->print( ( '   ' x $indent )
      . '' . $name
      . '
' ."\n" );
    $prev = $file;
}
%PERL>