Help-Site Computer Manuals
Software
Hardware
Programming
Networking
  Algorithms & Data Structures   Programming Languages   Revision Control
  Protocols
  Cameras   Computers   Displays   Keyboards & Mice   Motherboards   Networking   Printers & Scanners   Storage
  Windows   Linux & Unix   Mac

Getopt::Easy
parses command line options in a simple but capable way.

Getopt::Easy - parses command line options in a simple but capable way.


NAME

Getopt::Easy - parses command line options in a simple but capable way.


SYNOPSIS


  use Getopt::Easy;

  get_options "v-verbose  f-fname=  D-debug=uSX",

              "usage => "usage: prog [-v] [-f fname] [-D [uSX]] [-H]",

              "H";

  print "reading $O{fname}\n" if $O{verbose};

  print "SQL: $sql\n" if $O{debug} =~ /S/;


DESCRIPTION

Perl puts the command line parameters in the array @ARGV allowing the user to examine and manipulate it like any other array. There is a long tradition of putting optional single character flags (preceded by a dash) in front of other parameters like so:


  % ls -ltr *.h *.c

  % tar -tvf all.tar

  % ps -ax -U jsmith

Many Getopt::* modules exist to help with the parsing of these flags out of @ARGV. For the author, Getopt::Std was visually too cryptic and Getopt::Long was too large and complex for most normal applications. Getopt::Easy is small, easy to understand, and provides a visual clarity.

There are two things exported: get_options() and %O.

get_options has 1 required parameter and 2 optional ones. The first is a string describing the kind of options that are expected. It is a space separated list of terms like this:


  get_options "v-verbose   f-fname=";

If the -v option is given on the command line %O{verbose} will be set to 1 (true). If the -f option is given then another argument is expected which will be assigned to $O{fname}.

Before parsing @ARGV, $O{verbose} will be initialized to 0 (false) and $O{fname} to ``'' (unless they already have a value).

If you give an unknown option get_options() will complain and exit:


  % prog -vX

  unknown option: -X

  %

These conventions are implemented by Getopt::Easy:

  • The options can come in any order.

  • Multiple boolean options can be bundled together.

  • A command line argument of '--' will cause argument parsing to stop so you can parse the rest of the options yourself.

  • Parsed arguments are removed from @ARGV.

These invocations are equivalent:


  % prog -v -f infile

  % prog -f infile -v     # different order

  % prog -v -finfile

  % prog -vf infile

  % prog -vfinfile

This shows that the space between -f and infile is optional and that you can bundle -f with -v but -f must be the last option in the bundle.

The optional second parameter to get_options() is a usage message to be printed when an illegal option is given.


  get_options "v-verbose   f-fname=",

              "usage: prog [-v] [-f fname]";

Now if an unknown option is given, the same error message will be printed, as above, followed by the usage message.




  % prog -vX

  unknown option: -X

  usage: prog [-v] [-f fname]

  %

HELP

Sometimes the usage message is not enough and the user needs more detailed and elaborate help. This is where the 3rd optional parameter comes in.


  get_options "v-verbose   f-fname=",

              "usage: prog [-v] [-f fname] [-H]",

              "H";

Giving the -H option will cause the POD for the module to be echoed to STDOUT - as if the user had typed 'perldoc prog'. See 'perldoc perlpod'.

DEBUGGING

There are various ways to implement a debugging option:

GOOD:


  get_options "d-debug";

  print "val = $val\n" if $O{debug};

BETTER:


  get_options "d-debug=";

  print "SQL = $sql\n" if $O{debug} >= 2;

  print "val = $val\n" if $O{debug} >= 3;

With this method there are various levels of debugging. Unfortunately, they often end up ranging from 'not enough' to 'too much' :(.

BEST:


  get_options "d-debug=eSvL";

  print "SQL = $sql\n" if $O{debug} =~ /S/;

  print "val = $val\n" if $O{debug }=~ /v/;

 

With this kind of term the letters after the equal sign '=' are the

debugging options that are valid.  Now the user can choose exactly

what kind of debugging output they wish to see.

  % prog -d SL

Giving an illegal debugging option will result in an error message:


  % prog -deXSf

  for -d: illegal options: Xf, valid ones are: eSvL

  %


ACCESS ELSEWHERE

If you want access to the %O hash from other files simply put:


  use Getopt::Easy;

at the top of those files; the %O hash will again be exported into the current package. You need to have:


  get_options ...;

only once in the main file before anyone needs to look at the %O hash.


STRICT

It is easy to misspell a key for the %O hash. Tie::StrictHash can help with this:


  use GetOpt::Easy;

  use Tie::StrictHash;

  get_options "v-verbose  f-fname=";

  strict_hash %O;

  print "file name is $O{filename}\n";

This will give a fatal error message:


  key 'filename' does not exist at prog line 6


SEE ALSO

Config::Easy allows configuration file entries to be overidden with command line arguments.

Tie::StrictHash protects against misspelling of key names.

Date::Simple is an elegant way of dealing with dates.


AUTHOR

Jon Bjornstad <jon@icogitate.com>

Programminig
Wy
Wy
yW
Wy
Programming
Wy
Wy
Wy
Wy