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

... the script still does nothing.
[root@wsprod01 myperl]# ./ --domain --client google Usage: ./ --domain --client company [--job-co +de 12345] [--help].

In the code shown in the OP, in the statement

GetOptions ( 'domain=s' => \$domain, 'client=s' => \$client, 'job-code:i' => \$job_code, 'help' => &usage() ) or &usage();
the  'help' key is given the value of whatever is returned by a call to the  usage() function. Problem is, this function returns nothing; rather, it calls die to print a usage message, so program execution will never get past the  GetOptions() function call. Is this what you intend?


  1. If you want to assign the  'help' key a reference to the  usage() function,
        'help' => \&usage,
    would be the correct expression.
  2. Added italic emphasis in "... a call to the  usage() function."

Replies are listed 'Best First'.
Re^4: Use of uninitialized value $_ in string
by juanpablo (Novice) on Apr 06, 2014 at 09:08 UTC

    Hi AnomalousMonk,

    Thanks for pointing it out. Yes, I admit I missed adding the backslash before the &usage(). The script works fine as of now but I'm still trying to improve its features and hopefully I don't get new errors. :)

    Thanks a lot for the help!



      ... 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.)

Re^4: Use of uninitialized value $_ in string
by Bloodnok (Vicar) on Apr 05, 2014 at 15:21 UTC
    I suspect that is what's intended AnomalousMonk - I've yet to write/encounter a script or command that generates usage/help ... and then proceeds onwards.

    A user level that continues to overstate my experience :-))

      But the problem I see is not so much with what happens when the  usage() function is called as with the initialization of the  'help' key when the  GetOptions() function is called.  usage() is called during this initialization, so script execution never gets beyond the  GetOptions() call.

        Ah, ok, didn't spot that meaning at all - my excuse being that it was Saturday and I was girding my loins to go and watch my team.

        A user level that continues to overstate my experience :-))