not a dumb question... I actually have the same problem.
I have version numbers that look like this:

V1.2.3
V1.2.20
V1.2.23

and it sorts it wrong with cmp and <=>

soo.. I had to come up with my own sort subroutine


here is very generic one that breaks up the elements by \w (word types
[a-Z0-9])
that I made and works like a champion.




to use it:
use strict;
use warnings;


my @sorted = sort { wordtype() } @your_array;

# for reverse
my @sorted = sort { wordtype($b, $a) } @your_array;


sub wordtype {
#
#  Inputs:      $a, $b (not required)
#
#  Globals:     $a $b
#
#  Subs called: NONE
#
#  Purpose:     sort \w chars in groups
#               numerically if numbers
#
#  Returns:     sort ordering (1,0,-1)
#
my ($a, $b);
if(exists $_[0]){
        $a = $_[0];
        } else {
        no strict 'refs';
        $a = ${caller()."::a"};
        }
if(exists $_[1]){
        $b = $_[1];
        } else {
        no strict 'refs';
        $b = ${caller()."::b"};
        }

my @first = split /\W/, $a;
my @second = split /\W/, $b;

for(my $n = 0; $n <= $#first; $n++){
        if($first[$n] =~ /^\d+$/ && $second[$n] =~ /^\d+$/){
                return $first[$n] <=> $second[$n] if $first[$n] <=>
$second[$n];
                } else {
                return $first[$n] cmp $second[$n] if $first[$n] cmp
$second[$n];
                }
        }
return 0;
} ################################################## END wordtype

> -----Original Message-----
> From: nkuipers [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, July 24, 2002 1:39 PM
> To: [EMAIL PROTECTED]
> Subject: another sort question (flame away)
> 
> 
> Hello all,
> 
> My hash keys look something like this:
> 
> >1234 x5
> 
> So I am thinking a cmp, as opposed to <=> is best.
> 
> What I want is for the keys to be sorted as follows:
> 
> >1 x....
> >2 x....
> >3 x....
> ..
> ..
> ..
> >n x....
> 
> This is what I have in my script at the moment:
> 
> my @sort_this = keys %final_list;
> my @sorted = sort { $a cmp $b } @sort_this;
> for (@sorted) { print OUT "$_\n$final_list{$_}\n" }
> 
> This gives
> 
> >1 x....
> >10 x....
> >100 x....
> >1000 x....
> >1001 x....
> 
> etc.
> 
> Any suggestions?  I'm not asking for you to spell it out for 
> me with code and 
> all unless you really want to.  Sorry if this is a dumb question.
> 
> cheers,
> 
> nathanael
> 
> "I think for my lunch tomorrow I'll make a tuna and pickle 
> triangle bunwich."
> 
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 

----------------------------------------------------------------------------
--------------------
The views and opinions expressed in this email message are the sender's
own, and do not necessarily represent the views and opinions of Summit
Systems Inc.


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to