[ol]
[li][gray]#! /usr/bin/perl[/gray][/li]
[li][url=http://perldoc.perl.org/functions/use.html][black][b]use[/b][/black][/url] [green]strict[/green][red];[/red][/li]
[li][black][b]use[/b][/black] [green]CGI[/green] [red]'[/red][purple]:standard[/purple][red]'[/red][red];[/red][/li]
[li][black][b]use[/b][/black] [green]Cwd[/green][red];[/red][/li]
[li][black][b]use[/b][/black] [green]File::Basename[/green][red];[/red][/li]
[li][url=http://perldoc.perl.org/functions/print.html][black][b]print[/b][/black][/url] [red]"[/red][purple]Content-type: text/html[purple][b]\n[/b][/purple][purple][b]\n[/b][/purple][/purple][red]"[/red][red];[/red][/li]
[li][/li]
[li][black][b]print[/b][/black] [red]qq([/red][purple][/purple][/li]
[li][purple]<style type="text/css">[/purple][/li]
[li][purple]body,table,td{font-family:Arial;font-size:10pt;border:1px solid grey;}[/purple][/li]
[li][purple]tr.top_row td{text-align: center;font-weight: bold;}[/purple][/li]
[li][purple].base_path{width: 600px;}[/purple][/li]
[li][purple]</style>[/purple][/li]
[li][purple][/purple][red])[/red][red];[/red][/li]
[li][/li]
[li][url=http://perldoc.perl.org/functions/my.html][black][b]my[/b][/black][/url] [blue]$program_url[/blue] = [red]'[/red][purple]script.pl[/purple][red]'[/red][red];[/red][/li]
[li][black][b]my[/b][/black] [blue]$dir_url[/blue] = [red]'[/red][purple][URL unfurl="true"]http://www.domain.com[/URL][/purple][red]'[/red][red];[/red][/li]
[li][black][b]my[/b][/black] [blue]$base_path[/blue] = [maroon]param[/maroon][red]([/red][red]'[/red][purple]base_path[/purple][red]'[/red][red])[/red][red];[/red][/li]
[li][olive][b]if[/b][/olive][red]([/red][red]([/red][blue]$base_path[/blue] eq [red]"[/red][purple][/purple][red]"[/red][red])[/red] || [red]([/red][maroon]param[/maroon][red]([/red][red]'[/red][purple]action[/purple][red]'[/red][red])[/red] eq [red]'[/red][purple]tl[/purple][red]'[/red][red])[/red][red])[/red][red]{[/red] [blue]$base_path[/blue] = [red]'[/red][purple]/[/purple][red]'[/red][red];[/red] [red]}[/red][/li]
[li][olive][b]if[/b][/olive][red]([/red][maroon]param[/maroon][red]([/red][red]'[/red][purple]action[/purple][red]'[/red][red])[/red] eq [red]'[/red][purple]uol[/purple][red]'[/red][red])[/red][red]{[/red] [blue]$base_path[/blue] = [maroon]dirname[/maroon][red]([/red][blue]$base_path[/blue][red])[/red][red];[/red] [red]}[/red][/li]
[li][blue]$base_path[/blue] = [maroon]rem_extra_slash[/maroon][red]([/red][blue]$base_path[/blue][red])[/red][red];[/red][/li]
[li][black][b]my[/b][/black] [blue]$dir_path[/blue] = getcwd.[blue]$base_path[/blue][red];[/red][/li]
[li][/li]
[li][url=http://perldoc.perl.org/functions/opendir.html][black][b]opendir[/b][/black][/url][red]([/red]DIR,[blue]$dir_path[/blue][red])[/red] || [url=http://perldoc.perl.org/functions/die.html][black][b]die[/b][/black][/url] [red]"[/red][purple]Open directory failed >>> [blue]$dir_path[/blue] >>> [blue]$![/blue][/purple][red]"[/red][red];[/red][/li]
[li][black][b]my[/b][/black] [blue]@files[/blue] = [url=http://perldoc.perl.org/functions/grep.html][black][b]grep[/b][/black][/url] [red]{[/red]![red]/[/red][purple]^[purple][b]\.[/b][/purple]{1,2}$[/purple][red]/[/red][red]}[/red] [url=http://perldoc.perl.org/functions/readdir.html][black][b]readdir[/b][/black][/url][red]([/red]DIR[red])[/red][red];[/red][/li]
[li][url=http://perldoc.perl.org/functions/closedir.html][black][b]closedir[/b][/black][/url][red]([/red]DIR[red])[/red][red];[/red][/li]
[li][/li]
[li][black][b]my[/b][/black] [red]([/red][blue]%hash[/blue][red])[/red][red];[/red][/li]
[li][olive][b]foreach[/b][/olive][red]([/red][blue]@files[/blue][red])[/red][red]{[/red][/li]
[li] [olive][b]if[/b][/olive] [red]([/red][url=http://perldoc.perl.org/functions/-X.html][black][b]-d[/b][/black][/url] [red]"[/red][purple][blue]$dir_path[/blue]/[blue]$_[/blue][/purple][red]"[/red][red])[/red] [red]{[/red] [url=http://perldoc.perl.org/functions/push.html][black][b]push[/b][/black][/url][red]([/red][blue]@[/blue][red]{[/red][blue]$hash[/blue][red]{[/red][red]'[/red][purple]Dir[/purple][red]'[/red][red]}[/red][red]}[/red],[blue]$_[/blue][red])[/red][red];[/red] [red]}[/red][/li]
[li] [olive][b]elsif[/b][/olive] [red]([/red][url=http://perldoc.perl.org/functions/-X.html][black][b]-f[/b][/black][/url] [red]"[/red][purple][blue]$dir_path[/blue]/[blue]$_[/blue][/purple][red]"[/red][red])[/red] [red]{[/red] [black][b]push[/b][/black][red]([/red][blue]@[/blue][red]{[/red][blue]$hash[/blue][red]{[/red][red]'[/red][purple]File[/purple][red]'[/red][red]}[/red][red]}[/red],[blue]$_[/blue][red])[/red][red];[/red] [red]}[/red][/li]
[li][red]}[/red][/li]
[li][/li]
[li][black][b]print[/b][/black] [red]qq([/red][purple]<p><input class="base_path" type="text" name="p" value="$base_path" /><br/><a href="$dir_url$base_path" target="_blank">$dir_url$base_path</a></p>[/purple][red])[/red][red];[/red][/li]
[li][black][b]print[/b][/black] [red]qq([/red][purple]<p>| <a href="$program_url?base_path=$base_path&action=tl">Top Level</a> | <a href="$program_url?base_path=$base_path&action=uol">Up One Level</a> |</p>[/purple][red])[/red][red];[/red][/li]
[li][/li]
[li][black][b]my[/b][/black][red]([/red][blue]$dir_count[/blue],[blue]$file_count[/blue][red])[/red] = [red]([/red][fuchsia]0[/fuchsia],[fuchsia]0[/fuchsia][red])[/red][red];[/red][/li]
[li][black][b]print[/b][/black] [red]qq([/red][purple]<table>[/purple][red])[/red][red];[/red][/li]
[li][black][b]print[/b][/black] [red]qq([/red][purple]<tr class="top_row"><td>Type:</td><td>Name:</td><td>Ext:</td></tr>[/purple][red])[/red][red];[/red][/li]
[li][olive][b]foreach[/b][/olive] [black][b]my[/b][/black] [blue]$type[/blue][red]([/red][url=http://perldoc.perl.org/functions/sort.html][black][b]sort[/b][/black][/url] [url=http://perldoc.perl.org/functions/keys.html][black][b]keys[/b][/black][/url] [blue]%hash[/blue][red])[/red][red]{[/red][/li]
[li] [olive][b]foreach[/b][/olive] [black][b]my[/b][/black] [blue]$name[/blue][red]([/red][black][b]sort[/b][/black] [maroon]case_sort[/maroon][red]([/red][blue]@[/blue][red]{[/red][blue]$hash[/blue][red]{[/red][blue]$type[/blue][red]}[/red][red]}[/red][red])[/red][red])[/red][red]{[/red][/li]
[li] [olive][b]if[/b][/olive][red]([/red][blue]$type[/blue] eq [red]'[/red][purple]Dir[/purple][red]'[/red][red])[/red][red]{[/red][/li]
[li] [black][b]my[/b][/black] [blue]$dir[/blue] = [maroon]rem_extra_slash[/maroon][red]([/red][red]"[/red][purple][blue]$program_url[/blue]?base_path=[blue]$base_path[/blue]/[blue]$name[/blue][/purple][red]"[/red][red])[/red][red];[/red][/li]
[li] [black][b]print[/b][/black] [red]qq([/red][purple]<tr><td>$type</td><td><a href="$dir"><b>$name</b></a></td><td>-</td></tr>[/purple][red])[/red][red];[/red][/li]
[li] [blue]$dir_count[/blue]++[red];[/red][/li]
[li] [red]}[/red][/li]
[li] [olive][b]elsif[/b][/olive][red]([/red][blue]$type[/blue] eq [red]'[/red][purple]File[/purple][red]'[/red][red])[/red][red]{[/red][/li]
[li] [blue]$name[/blue] =~ [red]/[/red][purple]^(.*)([purple][b]\.[/b][/purple])([^.]*)$[/purple][red]/[/red][red];[/red][/li]
[li] [black][b]my[/b][/black] [blue]$file[/blue] = [maroon]rem_extra_slash[/maroon][red]([/red][red]"[/red][purple][blue]$dir_url[/blue][blue]$base_path[/blue]/[blue]$name[/blue][/purple][red]"[/red][red])[/red][red];[/red][/li]
[li] [black][b]print[/b][/black] [red]qq([/red][purple]<tr><td>$type</td><td><a href="$file" target="_blank">$name</a></td><td>$3</td></tr>[/purple][red])[/red][red];[/red][/li]
[li] [blue]$file_count[/blue]++[red];[/red][/li]
[li] [red]}[/red][/li]
[li] [red]}[/red][/li]
[li][red]}[/red][/li]
[li][black][b]print[/b][/black] [red]qq([/red][purple]</table>[/purple][red])[/red][red];[/red][/li]
[li][black][b]print[/b][/black] [red]"[/red][purple]<p>><b>Directories...</b> [blue]$dir_count[/blue]< --- ><b>Files...</b> [blue]$file_count[/blue]<</p>[/purple][red]"[/red][red];[/red][/li]
[li][/li]
[li][url=http://perldoc.perl.org/functions/sub.html][black][b]sub[/b][/black][/url] [maroon]rem_extra_slash[/maroon][red]{[/red][/li]
[li] [blue]$_[/blue][red][[/red][fuchsia]0[/fuchsia][red]][/red] =~ [red]s/[/red][purple][purple][b]\/[/b][/purple]+[/purple][red]/[/red][purple][purple][b]\/[/b][/purple][/purple][red]/[/red][red]g[/red][red];[/red][/li]
[li] [blue]$_[/blue][red][[/red][fuchsia]0[/fuchsia][red]][/red] =~ [red]s/[/red][purple]^(http:[purple][b]\/[/b][/purple])[/purple][red]/[/red][purple][blue]$1[/blue][purple][b]\/[/b][/purple][/purple][red]/[/red][red];[/red][/li]
[li] [url=http://perldoc.perl.org/functions/return.html][black][b]return[/b][/black][/url] [blue]$_[/blue][red][[/red][fuchsia]0[/fuchsia][red]][/red][red];[/red][/li]
[li][red]}[/red][/li]
[li][/li]
[li][black][b]sub[/b][/black] [maroon]case_sort[/maroon][red]{[/red][/li]
[li] [url=http://perldoc.perl.org/functions/lc.html][black][b]lc[/b][/black][/url][red]([/red][blue]$a[/blue][red])[/red] cmp [black][b]lc[/b][/black][red]([/red][blue]$b[/blue][red])[/red][red];[/red][/li]
[li][red]}[/red][/li]
[/ol]