I have a list of files I want to case-insensitive sort by extension, files
with no extension appearing first.  It should handle both Windows and Unix
directory separators.  I think I have working code, but I am interested in the
various syntax for this one - there MUST be a better way than my feeble attempt:

use strict;

my @input = ( '/path/to/file/with.ext', '/path/to/file/with.htm',
'/path/to/file/without', '/path/to/file/with.eml', '/path/to/file/with.pdf' );
my @output = sort
{
  my $ex1 = '';
  my $ex2 = '';

  if ( $a =~ m#[^\\/]\.([^\\/]+)$# )
  {
    $ex1 = $1;
  }

  if ( $b =~ m#[^\\/]\.([^\\/]+)$# )
  {
    $ex2 = $1;
  }

  return( lc( $ex1 ) cmp lc( $ex2 ));
} @input;

print join( $/, @output );

C:\temp>sortext.pl
/path/to/file/without
/path/to/file/with.eml
/path/to/file/with.ext
/path/to/file/with.htm
/path/to/file/with.pdf

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to