I am going to take a guess that given sort do_nothing(@in), do_nothing is being parsed as the name of the sort sub, and the (@in) is being parsed as the list to sort on. That's what it appears to be doing from the Deparse output, anyway.
Update: maybe not. this code does the same thing, and it doesn't use a named sub at all:
print sort sub { print "Args: @_\n"; @_ }->(qw(one two three))
Another update: using a named sub, it acts differently than the anonymous sub, though it returns the same thing and the anonymous sub gets sorted, but this one doesn't:
sub byfoo { print "Args: $a $b\n"; @_ } print sort byfoo(qw(one two three));
So perhaps my initial guess was correct, and I got tricked by the anonymous sub. I eagerly await a response from someone who can explain this! :-)
Final update: Ah, Tanktalus' post cleared it all up for me. How silly that I had forgotten sort can take a list and use the default comparison function! That explains why my anonymous coderef gets all the values at once, and they subsequently get sorted.
In reply to Re: Perversity of sorts
by Mugatu
in thread Perversity of sorts
by tlm
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |