http://qs321.pair.com?node_id=1081330


in reply to Re^4: Use of uninitialized value $_ in string
in thread Use of uninitialized value $_ in string

... adding the backslash before the &usage().

I'm sure you understand this, but just in case...

Just adding a backslash in front of a subroutine invocation will cause a reference to be taken to whatever the subroutine happens to return when invoked.

c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "sub S { return uc $_[0]; } ;; my %hash = ( 'x' => \&S('foo'), 'y' => \S('bar') ); dd \%hash; " { x => \"FOO", y => \"BAR" }

Of course, the correct expression for assigning a code reference to a hash key would be
    'help' => \&usage,

(Also, it's better practice to invoke subroutines without the  & sigil due to certain occasional, unexpected side-effects. So rather than
    my $x = &function('argument', 'list');
it's better to write
    my $x = function('argument', 'list');
instead, thus preserving use of  & for taking code references and for those odd function invocation cases in which its use is critical. See perlsub.)