Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: Problem with a sort result

by uri (Acolyte)
on Jan 15, 2016 at 12:08 UTC ( [id://1152838]=note: print w/replies, xml ) Need Help??


in reply to Problem with a sort result

the issue is with signed vs unsigned. as the other comment said, using - instead of <=> is the main bug. this is not a perl bug. but if you do need speed, check out Sort::Maker as it will do that sort faster than your code as it will factor out all those hash lookups before the sort is done.

Replies are listed 'Best First'.
Re^2: Problem with a sort result
by kzwix (Sexton) on Jan 27, 2016 at 14:21 UTC

    Allow me to disagree.

    I mean, obviously, it's not "breaking specifications", as there does NOT seem to be available specifications (because the documentation does NOT seem to mention how "sort" orders elements), but still, it furiously looks like an unwanted behaviour, or, at the very least, a caveat worth mentioning.

    I'm guessing that adding a single paragraph to the documentation, telling that a positive result orders in the following way, a negative result orders in the other way, and a null result keeps the same order, and that it is STRONGLY RECOMMENDED to use the binary comparison operator for this, to avoid potential problems, would do the trick.

    Because, I'll be blunt, but I had no recollection whatsoever of having previously worked with the "comparison" operator. And if it's not explained why one should use it, then... why not use something more familiar, and doing the same thing ? I mean, this is Perl, and "There is more than one way to do it", right ?

      Perl often defers to C, or underlying platform, when it comes to specifications. (Sort of a hand-wave.) This seems to be the case here, as well. Read the page on qsort and compare to sort. Here's the pertinent quote:

      If SUBNAME is specified, it gives the name of a subroutine that returns an integer less than, equal to, or greater than 0, depending on how the elements of the list are to be ordered.

      So the behaviour is documented, and there is a discrepency in perl. You could try to fix the perl sources to address this issue. (But be sure then to run all tests. I've no clue why it's coded that way; there might be a reason.)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1152838]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (3)
As of 2024-04-20 09:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found