brad@SSD.CSD.HARRIS.COM (Brad Appleton) (03/28/91)
I just released parseargs on comp.sources.misc. Parseargs contains a perl
function as a perl-interface to parseargs(1). I was hoping some of you
could help me to write better perl code.
How would you improve the following (make it faster, prettier, etc...)?
PS - To the perl-user that requested parseargs from me by e-mail:
I lost your e-mail address, please resend your request!!!
;#########################################################################
;# ^FILE: parseargs.pl - parseargs for perl programs
;#
;# ^DESCRIPTION:
;# This file defines a perl function named parseargs to parse
;# command-line arguments for perl scripts.
;#
;# ^HISTORY:
;# 02/25/91 Brad Appleton <brad@ssd.csd.harris.com> Created
;##^^#####################################################################
;########
;# ^FUNCTION: parseargs - parse command-line argument vectors
;#
;# ^SYNOPSIS:
;# rc = &parseargs( @argv, $argd )
;#
;# ^PARAMETERS:
;# argv -- the vector of command-line arguments (usually ARGV).
;# argd -- the argument-description string
;#
;# ^DESCRIPTION:
;# Parseargs will invoke parseargs(1) to parse the command-line given
;# in <argv> for the command defined by <argd>. The resulting values
;# will be assigned to the variables indicated by the argument-description
;# string.
;#
;# ^REQUIREMENTS:
;# Any desired initial values for variables from the argument-description
;# string should be assigned BEFORE calling this function.
;#
;# The following global variables may be assigned before calling parseargs:
;#
;# PARSEOPTS -- any extra options to pass to parseargs(1) (default="-u")
;#
;# ^SIDE-EFFECTS:
;# The global variable PARSEARGS will contain the command-line used to
;# invoke parseargs(1).
;#
;# ARGV and ARGC may be reset, all other values are (re)set in <arr>.
;#
;# ^RETURN-VALUE:
;# The exit code returned by parseargs(1).
;#
;# ^ALGORITHM:
;# - set defaults for PARSEOPTS
;# - build the parseargs command (dont forget to quote arguments).
;# - run parseargs(1) and evaluate the output unless $?
;##^^####
sub parseargs {
local(@argv) = @_;
local($argd);
local($parse_output);
local($_);
local($[) = 0;
local($i);
$argd = pop( @argv ); ## get last arg and remove it
if ( $PARSEOPTS == "" ) {
$PARSEOPTS = '-u';
}
$PARSEARGS = 'parseargs -s perl ' . $PARSEOPTS . " -- '" . $0 . "'";
## need to put each element of @argv in single quotes
for ( $i = $[ ; $i <= $#argv ; $i++ ) {
$argv[$i] =~ s/'/'\\''/g;
$PARSEARGS .= " '" . $argv[$i] . "'";
}
$parse_output = `echo \'$argd\' | $PARSEARGS`;
eval $parse_output unless $?;
if ( $? ) {
$! = 0;
die "\n";
}
}
1;
______________________ "And miles to go before I sleep." ______________________
Brad Appleton brad@ssd.csd.harris.com Harris Computer Systems
uunet!hcx1!brad Fort Lauderdale, FL USA
~~~~~~~~~~~~~~~~~~~~ Disclaimer: I said it, not my company! ~~~~~~~~~~~~~~~~~~~