in reply to Re: problem with Getopt::Long
in thread problem with Getopt::Long

Getopt eats up the values in @ARGV so it is alway empty

Just to be nitpicky -- not quite. Getopt eats the options in @ARGV. Anything else will remain. Consider the following:

#!/usr/bin/perl use Getopt::Long; GetOptions( "i" => \$options{i}, "o=s" => \$options{o}, "p=s" => \$options{p}, "h" => \$options{h} ); foreach $arg (@ARGV) { print "$arg is still in ARGV\n"; } foreach $opt (keys %options) { print "$opt is $options{$opt}\n" if $options{$opt}; }
and note the output:
nkuvu$ perl try.pl --i h --o=foo h is still in ARGV o is foo i is 1

I have used this to check some command line inputs. Specifically, for most of my scripts anything specified on the command line should be an option. Anything after that is an error. So I'd use it sort of like:

GetOptions( #whatever ); die "Gah! (with appropriate error message here)\n" if (@ARGV);

Replies are listed 'Best First'.
Re^3: problem with Getopt::Long
by Random_Walk (Prior) on Aug 20, 2004 at 10:15 UTC
    You are of course correct, I was trying to keep my posting brief and typed the short version of what was in my head. Then using a set of test cases whith only valid command line switches never made me think about it again.

    Cheers,
    R.

      Another thing to note is that a double dash will stop option processing, so if I enter
      perl try.pl --i -- h --o=foo
      to the script the (valid) o option won't be parsed either and will remain in ARGV.

      The only reason I bring it up now is that I find it amusing that in a nitpicky post, I didn't specify all cases.

        Actually, the double-dash actually tells Getopt::Long to consider anything following an argument, regardless of whether it looks like an option or not. (The parser simply stops looking at all.) So your original assertion that options are removed but arguments are left can be considered correct, and IMHO is more correct than your nitpick, though it is of course incomplete without mentioning the function of the double-dash.

        Sure, I am arguing semantics, but I wasn't the one who started nitpicking, now was I? ;-)

        Makeshifts last the longest.

        Nkuvu++ for self nitpicking