On Wed, Feb 21, 2001 at 02:45:02PM +0100, Lou Hevly wrote: > 1) If there's a last name, the program should sort first by that and then by the firstname (if there is one); > 2) If no last name, then sort by first name; > 3) If neither last nor first name, then sort by username > > So the desired result is: > > est > Evans > Evans, Anne > Evans, Helen > Evans, Louise > Peter > rwj > Sanchez I think the followign does what you want. #!/usr/bin/perl chomp( @u = <DATA> ); print join "\n", map { s/\|/, /g; s/^.*?[, ]+(\w)/$1/; s/[, ]+$//; $_ } sort { my @a = split '\|', lc $a; my @b = split '\|', lc $b; ( $a[1] and $a[1] eq $b[1] ) ? ( $a[2] cmp $b[2] ) : ( $a[1] || $a[0] ) cmp ( $b[1] || $b[0] ); } @u; __DATA__ ae|Evans|Anne le|Evans|Louise he|Evans|Helen pete||Peter xs|Sanchez| rwj|| est|| __END__ Joy, Yanick -- $,=' '; $\="\n"; @_= qw/a a a a/; @s= qw/17049 482466755 285075 95568295/; while( (sort @s)[-1] ){ map $s[$_]-->0&&++$_[$_], (0..$#_); print @_; } ### May take some time. :) ### ==== Want to unsubscribe from Fun With Perl? Well, if you insist... ==== Send email to <fwp-request@technofile.org> with message _body_ ==== unsubscribe