Extraordinarily cute. ++ for creative use of splice. However, it borders on the obfuscatory, and I'd personally take a straightforward approach with the entire thing.
Note that if you want to throw out the current and parent directory entries you should generally use \A and \z instead of ^ and $ though (the latter will match in front of a terminating newline in the filename) or simply use good oldfashioned eq.
#!/usr/bin/perl -w
use strict;
use CGI qw/:standard/;
my $columns = param('cols') || 4;
my $offset = 0;
# untested
my (@dir, @file);
push @{ -d ? \@dir : \@file }, a({-href=>$_},$_) for do {
opendir my($dh), "." or die "cannot opendir: $!";
sort grep $_ ne '.' && $_ ne '..' && !/~\z/, readdir $dh;
};
$_ = "[ $_ ]" for @dir;
for (\@file, \@dir) {
my @result;
push @result, td([map b($_), splice(@$_,0,$columns)]) while @$_;
@$_ = @result;
}
print
header(-expires=>'now'),
start_html('Directory Listing'),
h1('Directory Listing'),
table(
{-border=>0,-cellpadding=>5,-cellspacing=>5},
map Tr($_), @dir, @file;
),
end_html;
__END__
Makeshifts last the longest.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.