Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re: Perl parser gets confused with call to "sort" w/o parens

by choroba (Bishop)
on May 16, 2018 at 07:09 UTC ( #1214639=note: print w/replies, xml ) Need Help??

in reply to Perl parser gets confused with call to "sort" w/o parens

This is documented in sort:
Warning: syntactical care is required...

print sort uniq( qw( q w e r t y ));

Is interpreted as

print sort uniq qw( q w e r t y );

i.e. it uses uniq as the sorting function.


In Perl 5.18.2., I'm not getting the numeric behaviour, it just fails with

Sort subroutine didn't return single value at -e line 1.

In blead perl, though, I'm getting the same warning as you.

Update 2: The numeric context is forced even when I use uniqstr instead of uniq.

That's probably because Perl first calls

uniq 'q', 'w';
which returns 'q', 'w', and sort tries to use this value as -1, 0, or 1, etc. This enforces the scalar numeric context probably.

($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

Replies are listed 'Best First'.
Re^2: Perl parser gets confused with call to "sort" w/o parens
by vr (Hermit) on May 16, 2018 at 07:29 UTC

    :( Oh, indeed, it's documented, thanks. Yet, CL#1 works OK, and the reason why Perl can be confused here and care is required is neither clear nor explained, in documentation. How CL#4 can be parsed to what's printed out, is unclear. OK, just a thought...

    Edit: OK, CL#1 was parsed specially because there was single letter identifier:

    >perl -lwe "sub x{@_} print sort x(qw(q w e r t y))" eqrtwy >perl -lwe "sub xx{@_} print sort xx(qw(q w e r t y))" qwerty
      The paragraph that choroba cites, documents four acceptable ways to sort an array returned by a function. I think it is reasonable to assume that anything else is ambiguous and should be considered invalid. In this view, all of your cases are invalid. The fact that some of them appear to do what you intend is irrelevant. It would be helpful if the document explained the reason for this restriction.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2018-11-13 02:14 GMT
Find Nodes?
    Voting Booth?
    My code is most likely broken because:

    Results (149 votes). Check out past polls.