in reply to Preventing unintended list expansion inside hash literals.

If you want to force it to be a scalar, you can use the scalar keyword instead of a throwaway variable:
$ perl -MData::Printer -E 'sub some_sub { return 1 } ; %h = ( foo => s +ome_sub(), bar => 42 ); p %h' { bar 42, foo 1 } $ perl -MData::Printer -E 'sub some_sub { return } ; %h = ( foo => som +e_sub(), bar => 42 ); p %h' { 42 undef, foo "bar" } $ perl -MData::Printer -E 'sub some_sub { return } ; %h = ( foo => sca +lar some_sub(), bar => 42 ); p %h' { bar 42, foo undef }