In that case, changing the comparison operator has changed the way your sort works (effectively breaking it).
To demonstrate, try this code:
($a, $b) = ( '16:46:36', '16:00:00'); print 'cmp : ', $a cmp $b, "\n"; print '<=> : ', $a <=> $b, "\n";
This prints
cmp : 1 <=> : 0
Which shows that Perl thinks that the two strings are the same when using <=>. When doing a string comparison, Perl uses all of the characters in the string, but when doing a numeric comparison, it can only use the digits at the start of the string. It stops when it finds the first non-digit. Had you been using -w then you would have got a warning explaining what you were doing wrong.
Also, doing a string comparison on dates in the format "Jun 28, 2001" is a bad idea as it will do an alphabetical sort - not in date order.
I'd recommend doing a first pass on the data and converting it to YYYYMMDDhhmm, which you can then do a numeric sort on.
--Perl Training in the UK <http://www.iterative-software.com>
In reply to Re: Re: Re: Speeding up sort routines
by davorg
in thread Speeding up sort routines
by nysus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |