This is to announce a module which has actually been on CPAN for a while now:

Argv         bdph       Provide an OO interface to an ARGV         DSB

Argv is designed to model a command line as an object for the benefit of 
wrapper programs which may need to do lots of manipulation on it. I had 
written such a wrapper and it ended up doing a heinous amount of shifting, 
splicing, looping, mapping and grepping on @ARGV. In some cases I had to 
localize @ARGV in order that Getopt:Long could operate on a copy. And all 
of this had to be done differently for UNIX and Windows. The final result 
was hideous, so I wrote this module in response. After instantiating an 
Argv object, you can tell it to parse its options into as many user-defined 
"option sets" as you wish, then recombine them in any permutation and run 
them via the system, exec, and qx methods. Here's a non-real-world example 
from the POD:

# A demonstration of how to use option sets in a wrapper program.
# Instantiate an object using the current @ARGV and parse its
# flags into 3 different sets, of which we'll use one for 'who'
# and another for 'uname'.
@ARGV = qw(Who -a -y foo -r);
my $who = Argv->new(@ARGV);
$who->dbglevel(1);
$who->optset(qw(UNAME FOO WHO));
$who->parseUNAME(qw(a m n p));
$who->parseFOO(qw(y=s z));
$who->parseWHO('r');
warn "got -y flag in option set FOO\n" if $who->flagFOO('y');
print Argv->new('uname', $who->optsUNAME)->qx;
$who->prog(lc $who->prog);
$who->exec(qw(WHO));

A secondary value is for Unix/Windows interoperability. The system, exec, 
and qx methods automatically quote their arguments against the ^&@$ DOS 
shell and provide various other conveniences in aid of spawning new 
processes on either platform without a lot of special-casing. Thus, even 
users with no interest in advanced manipulation of argv's may find this 
module useful as a portability enhancer.

The README is at ftp://ftp.cleartool.com/pub/Argv/README, the full POD at 
ftp://ftp.cleartool.com/pub/Argv/Argv.html, and the latest full package is 
ftp://ftp.cleartool.com/pub/Argv/Argv-0.42.tar.gz.

And since I'm afraid it may figure in any ensuing discussions, here's a 
section from the README:

A NOTE ON THE NAME

I'm aware that single-level namespaces are generally deprecated, but there 
are many modern exceptions; see Memoize, Coy, and Interpolation among 
others. I tried hard to fit mine into an existing namespace as well as 
soliciting ideas at [EMAIL PROTECTED] But I couldn't find a natural place 
by myself and no one on the modules list was able to suggest a fitting spot 
either.

Considering the alternatives of putting it in a 'wrong' category just for 
the sake of having one, or creating a category ghetto for it to live in all 
alone, I decided there was a reasonable case for making an exception. IMHO 
"Argv" is just the natural name for this module. The [EMAIL PROTECTED] 
policies don't say that single-level names are forbidden, they simply have 
wording to the effect that one should think long and hard before using such 
a name. I'm here to say that I did think long (seven months) and hard.

Thanks in advance,
David Boyce 

Reply via email to