I’m trying to recreate a Perl script in Ruby and have run into a problem.
The perl script has several layered subroutines. The main entry point
has code like this:
Getopt::Long::Configure(pass_through, no_auto_abbrev);
GetOptions('logfile' => \$logfile, 'log' => \$log, 'leave_tempfiles'
=> $leave_tempfiles, ‘batch_length=i’ => $batch_length);
Getopt::Long::Configure(no_pass_through, auto_abbrev);
This sets some global flags that the user may (optionally) set on the
command line. Other subroutines called after this perform a straight
GetOptions call
ie: GetOptions(“a” => $added, “e” => $edited, “d” => $deleted,
“c” => $change);
Well, with Ruby, if I try to have my entry code scan the command-line
arguments for a --log / -log argument, then when it sees say, a '-c’
instead, it raises an exception (which I can toss) since it’s not part
of that GetoptLong argument array.
That’s all fine and well, but unfortunately, it’s also removed the
argument from ARGV at this point, so the next method that wants to scan
for >its< command-line arguments (perhaps to parse the -c) won’t have
anything there.
Additionally, the exception thrown by GetoptLang doesn’t even contain
information about what didn’t match (or what was removed from ARGV), so
that I can add it back into argv.
Any suggestions on how I can implement ‘passthrough’ command-line
arguments with Ruby?
Thanks,
Patrick Bennett