gkramm has asked for the wisdom of the Perl Monks concerning the following question:

I would like to be able to pass multipule -v as input to a script using getopts. Such that ./script.pl -v gives $opt_v a value of 1 and ./script.pl -v -v gives $opt_v a value of 2, and so on. Is this possible? Should I even be using getops?

Replies are listed 'Best First'.
Re: passing multipule -v to a script
by mkmcconn (Chaplain) on Jul 29, 2002 at 22:36 UTC

    from perldoc Getopt::Long

          An incremental option is specified with a plus "+" after
           the option name:
    
               my $verbose = '';   # option variable with default value (false)
               GetOptions ('verbose+' => \$verbose);
    
           Using "--verbose" on the command line will increment the
           value of "$verbose". This way the program can keep track
           of how many times the option occurred on the command line.
           For example, each occurrence of "--verbose" could increase
           the verbosity level of the program.
    

    mkmcconn

      To amplify mkmcconn's neat RTM answer, Getopt::Long does do exactly what you need.

      I'm used to the very C-ish Getopt::Std, which is pretty much a reimplementation of the C function, so expected the same out of Getopt::Long, only word-oriented and using the BSDish -- flag indicator. Wrongo.

      Getopt::Long has all sorts of DWIMmery to accept flags with one or two dashes, increment, and anything else. So, you can just use:

      GetOptions('v+', \$verbose);

      and you will get the behavior you desire from

      scriptname -v -v -v

      Thanks, mkmcconn!