<%PERL> my @found; File::Find::find( { untaint => 1, wanted => sub { return unless /(\w+)\.(?:pm|pod)$/; my $name = $File::Find::name; $name =~ s/.*lib\b.//; $name =~ s!\.(?:pm|pod)!!i; $name =~ s!\W!::!g; push @found, $name; },follow => ($^O ne 'MSWin32') }, Jifty::Util->app_root ."/lib", ); File::Find::find( { untaint => 1, wanted => sub { return unless $File::Find::name =~ /^(?:.*?)(Jifty.*?\.(?:pm|pod))$/; my $name = $1; $name =~ s/.*lib\b.//; $name =~ s!\.(?:pm|pod)!!i; $name =~ s!\/!::!g; push @found, $name; },follow => ($^O ne 'MSWin32') }, Jifty::Util->jifty_root, ); my $indent = 0; my $prev = ''; foreach my $file (sort @found) { my ($parent, $name) = ($1, $2) if $file =~ /(?:(.*)::)?(\w+)$/; $parent = '' unless defined $parent; if ($file =~ /^$prev\::(.*)/) { my $foo = $1; while ($foo =~ s/(\w+):://) { $indent++; $m->print(('   ' x $indent)); $m->print("$1
"); } $indent++; } elsif ($prev !~ /^$parent\::/) { $indent = 0 unless length $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; } <%ARGS> $n => '' $method => '' $Target => '&method=content'