perl.org <[EMAIL PROTECTED]> wrote: : Thanks for the detailed response. I know the interspersed : comments won't make some members of the list happy, but : they're just opinions. : : James Edward Gray II wrote: : : Not a "fan" of map() and grep() or just don't understand them? : : Both, didn't understand them and still find them hard to : read. I have to worry about programmers with no Perl : experience maintaining the code, and since these structures : don't seem to exist in any other languages they are : intimidating. Plus, the Perl may need to get ported to : Java or C#, which is easiest if the logic structures can : be similar. I would only use them if they significantly : improve performance, not to reduce typing (since then I : would have to type a long comment reminding me what the : logic does - your explanation of this solution is precise : but lengthy).
There is another solution to this problem that involves only simple perl statements that should be easier to read than map and ?:. It is based on some slides by MJ Dominus about an Indirect Sort. http://perl.plover.com/yak/hw2/samples/slide003.html use File::Basename 'fileparse'; my @files = qw( /path/to/file/index.ext /path/to/another/file/with.htm /path/to/YA/file/small /path/to/file/foo.eml /path/to/file/bar.pdf /index.htm ); # create an array of extensions my @extensions; foreach my $file ( @files ) { push @extensions, ( fileparse( $file, '\..*' ) )[2]; } # sort the indices my @sorted_indices = sort { $extensions[$a] cmp $extensions[$b] } 0 .. $#extensions; my @sorted_files = @[EMAIL PROTECTED]; I used File::Basename's fileparse() subroutine to get the file extensions. You could expand this for clarity. my @extensions; foreach my $file ( @files ) { my( $base, $path, $type ) = fileparse( $file, '\..*' ); push @extensions, $type; } Note that you could easily create additional arrays for other sorts. # create an array of extensions and filenames my( @extensions, @filenames ); foreach my $file ( @files ) { my( $base, $path, $type ) = fileparse( $file, '\..*' ); push @extensions, $type; push @filenames, "$base.$type"; } # sort indices by extension my @extension_sorted_indices = sort { $extensions[$a] cmp $extensions[$b] } 0 .. $#extensions; # sort indices by filename my @filename_sorted_indices = sort { $filenames[$a] cmp $filenames[$b] } 0 .. $#filenames; my @extension_sorted_files = @[EMAIL PROTECTED]; my @filename_sorted_files = @[EMAIL PROTECTED]; HTH, Charles K. Clarkson -- Mobile Homes Specialist 254 968-8328 -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>