The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
NAME
    CmdArguments - Module to process arguments passed on command line

SYNOPSIS
        # program name args.pl
        use CmdArguments;

        my $var1 = 10;          # initialize variable
        my $var2 = 0;           # with default values.
        my @var3 = ( 1, 2, 3);  # well, if you like to.
        my @var4;               # but, not necessary

        my $parse_ref = [
                         [ "arg1", \$var1 ], # argTypeScalar is assumed
                         [ "arg2", \$var2,
                           {TYPE => argTypeSwitch}], # explicit argTypeSwitch
                         [ "arg3", \@var3 ], # argTypeArray assumed
                         [ "arg4", \@var4,
                           {UNIQUE => 1}], # argTypeArray assumed
                        ];

        CmdArguments::parse(@ARGV, $parse_ref);

        print "var1 = $var1\n";
        print "var2 = $var2\n";
        print "var3 = @var3\n";
        print "var4 = @var4\n";

        exit 0;

    test command ...

        args.pl -arg1 23 -arg2 -arg3 2 4 3 2 5 -arg4 2 4 3 2 4

    should generate following output...

        var1 = 23
        var2 = 1
        var3 = 2 4 3 2 5
        var4 = 2 4 3

DESCRIPTION
    This module provides some handy functions to process command line
    options.

    When this module is included it introduces following constants in the
    calling program namespace...

        argTypeScalar = 0
        argTypeArray  = 1
        argTypeSwitch = 2

    CmdArguments::parse
     Simplest way to use this program is to call parse (static function).

     Calling syntax is...

     *parse(@arguments, $array_ref, *$text_or_func1*, *$text_or_func2*)*

     *@arguments*
       array of command line arguments. So, @ARGV could be passed instead.

     *$array_ref*
       reference to an array containing information about how to parse data
       in @arguments.

       basic structure of $array_ref is...

       $array_ref = [ *$array_ref_for_individual_tag*, ...];

       $array_ref_for_individual_tag = [*$option_tag* , *$ref_of_variable*,
       *$hash_ref*]; # $hash_ref is optional

       *$hash_ref*
          reference to a hash containing supplementary information about
          $option_tag

            $hash_ref = {
              TYPE   => argType..., # argTypeSwitch
                                    # argTypeArray or argTypeScalar

              UNIQUE => 1,          # 1 or 0

              USAGE  => "help information", # try giving -h or -help
                                            # on command line

              FUNC   => sub { eval $_[0] }
            };

          TYPE
              this specifies what kind of variable reference is passed in
              $ref_of_variable. If TYPE is argTypeScalar or argTypeSwitch it
              assumes reference to a scalar. If TYPE is argTypeArray it
              assumes reference to an array.

              if TYPE tag is not provided then ...

              1. *argTypeScalar* is assumed if $ref_of_variable is a scalar
              reference

              2. *argTypeArray* is assumed if $ref_of_variable is an array
              reference

              What is argType...?

                   argTypeSwitch
                         on command line you can not provide value for an
                         option.

                   argTypeScalar
                         on command line you must provide one and only one
                         value

                   argTypeArray
                         on command line you can provide zero or more values

          UNIQUE
              this tag is applicable for option type *argTypeArray* only. it
              can be 0 or 1. 1 means make unique array. So, if an option is
              defined as UNIQUE then on command line if you give say 2 3 4 5
              3 4 6 7 then array will hold 2 3 4 5 6 7. If it was not unique
              then it will hold 2 3 4 5 3 4 6 7.

          FUNC
              Holds a reference to a function. Function should take a scalar
              argument and return a scalar if option is argTypeScalar and
              return an array if option is argTypeArray. This is not used
              for option type argTypeSwitch.

              Example: if option type is an argTypeArray. and function is
              defined like

              FUNC => sub { eval $_[0] }

              and if on the command line something like 1..3 or 1,2,3 is
              passed then it will generate an array having values 1 2 3.

       *$ref_of_variable*
          Can pass reference of a scalar or an array variable depending on
          what require from command line.

       *$option_tag*
          It is the name of the option tag. if option tag is *opt* then on
          command line you have to specify option like *-opt*.

     $text_or_func1
     $text_or_func2
       pass text or reference to a function. If function is passed it should
       return text or should itself print message on STDERR. Try
       experimenting by passing -h or -help in the argument. $text_or_func1
       is printed after the help text is printed and $text_or_func1 is used
       before printing helptext.

AUTHOR
    Navneet Kumar, <navneet_k@hotmail.com>