Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
More | Login | Reply
Loading... please wait.
  • I'm throwing in my vote for scalar sort just returning list length.

    But why, it seems so pointless and a waste of CPU.

    The answer is that from the OUTSIDE of the method call, the user doesn't necesarily know that it went through sort, or whether the data for the list came pre-sorted.

    All they know is that they called a method and it returned a list. And the general assumption will be that scalar of it returns the quantity.

    As for wasting CPU with the sort, who's to know that the sort doesn't create some form of
    • I’d say to skip sorting and return the number of elements efficiently. It would help the common case (return sort in scalar context), and I’ve never written a sort block with side effects, can’t imagine what it’d be useful for, or have seen any such thing in anyone else’s code, whether on PerlMonks or the CPAN.

      I believe that unlike being undefined in scalar context, not sorting in scalar context is a kind of surprise that’s not very surprising, and if anyone really needs to use side effects in the sort block, they can still enforce list context otherwise. Having to do that would warn onlookers that something really unusual is going on, too, which I consider the right Huffman coding/cost distribution for this feature.

      • Someone's going to bring up side effects and point out that we're swapping one gotcha for another. The new gotcha being "sort in scalar context will not execute your code block, so if it has side effects they will not occur".

        The defense to that is that side effects in sort are so rare that this is hardly a real world gotcha. Does anyone put side effects in their sort?
        • I wouldn’t worry about that.

          First: we’re not trading gotchas:

          $ perl -le'@x = sort {++$_; $a cmp $b} qw(foo bar baz); print $_ || "nada"'
          $ perl -le'$x = sort {++$_; $a cmp $b} qw(foo bar baz); print $_ || "nada"'

          This is already part of the “sort in scalar context is undefined” gotcha.

          Second – and as I’ve said –, I’ve never wanted to use side effects in a sort block, I can’t imagine a good reason that needs it, and I’ve never seen a