http://www.perlmonks.org?node_id=590879


in reply to Sorting result of function call

I can confirm the same result on cygwin with 5.8.7:

% stephan@armen (/home/stephan) % % perl -w sort_context.px get_keys called:array:13 called:array:13 called:array:13 called:array:13

deparse tells us:

% stephan@armen (/home/stephan) % % perl -MO=Deparse sort_context.px use warnings; use strict 'refs'; my(%h) = (1, 2, 3, 4); sub say { print @_, $/; } sub get_keys { print 'called:'; if (wantarray) { print 'array:'; } else { print defined wantarray ? 'scalar' : 'void'; } return keys %h; } say sort('get_keys'); say((sort get_keys ())); say sort(&get_keys); say sort(&get_keys()); say sort(@{[get_keys()];}); say sort(@{[get_keys()];}); sort_context.px syntax OK
so in the first case get_keys gets interpreted as a string. seems like a bug (an old one...) with use strict; (especially if one follows the principle of least surprise) still it's true that it is quite ambiguous... hth --stephan