Hi namespace keepers,

I'm requesting the new module name: Getargs::Long (by analogy with
Getopt::Long).

It allows one to easily parse/extract information from routines called
with a set of -argument => value pairs.

Here's the interface I came up with:

 use Getargs::Long;                 # case sensitive, exports [cx]+getargs
 use Getargs::Long qw(ignorecase);  # case insensitive

 sub myroutine {
     my (@x) = @_;      # (-val => something, -other => xxx)

     # Simple, args mandatory
     my ($val, $other) = getargs(\@x, qw(val other));

     # Simple, args optional (in [] means optional)
     my ($val, $other) = getargs(\@x, [qw(val other)]);

     # Simple with typechecking, args mandatory
     my ($val, $other) = getargs(\@x, qw(val=Class::X other=ARRAY));

     # Simple with typechecking, args optional
     my ($val, $other) = getargs(\@x, [qw(val=Class::X other=ARRAY)]);

     # Extract remainaing unparsed args in @extra
     my ($val, $other, @extra) = getargs(\@x, qw(val other));

     # Other cases, use full specs:
     my ($x, $y, $z, $a, $b, $c) = xgetargs(\@x,

        # Non-mandatory, defaults to undef unless specified otherwise
        'x'     => ['i'],                   # integer, no default
        'y'     => ['ARRAY', ['a', 'b']],   # Has a default
        'z'     => [],                      # No typecheck, can be anything

        # Mandatory arguments
        'a'     => 'i',                     # integer (scalar)
        'b'     => 'TYPE',                  # TYPE or any ancestor of TYPE
        'c'     => undef,                   # unspecified type but mandatory
    );

     # Cache version -- parsing anonymous routine created and saved
     my ($val, $other) = cgetargs(\@x, qw(val other));
}

Raphael

Reply via email to