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.
In reply to Re: Ordered Directory Listing CGI
by Aristotle
in thread Ordered Directory Listing CGI
by hiseldl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |