use strict; use warnings; 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; } # Output: say sort get_keys; # get_keys say sort get_keys(); # say sort &get_keys; # called:array:13 say sort &get_keys(); # called:array:13 say sort @{[get_keys]}; # called:array:13 say sort @{[get_keys()]}; # called:array:13