diff options
Diffstat (limited to 'lib/getopt.pl')
-rw-r--r-- | lib/getopt.pl | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/getopt.pl b/lib/getopt.pl new file mode 100644 index 0000000000..4832233ed2 --- /dev/null +++ b/lib/getopt.pl @@ -0,0 +1,38 @@ +;# $Header: getopt.pl,v 2.0 88/06/05 00:16:22 root Exp $ + +;# Process single-character switches with switch clustering. Pass one argument +;# which is a string containing all switches that take an argument. For each +;# switch found, sets $opt_x (where x is the switch name) to the value of the +;# argument, or 1 if no argument. Switches which take an argument don't care +;# whether there is a space between the switch and the argument. + +;# Usage: +;# do Getopt('oDI'); # -o, -D & -I take arg. Sets opt_* as a side effect. + +sub Getopt { + local($argumentative) = @_; + local($_,$first,$rest); + + while (($_ = $ARGV[0]) =~ /^-(.)(.*)/) { + ($first,$rest) = ($1,$2); + if (index($argumentative,$first) >= $[) { + if ($rest ne '') { + shift; + } + else { + shift; + $rest = shift; + } + eval "\$opt_$first = \$rest;"; + } + else { + eval "\$opt_$first = 1;"; + if ($rest ne '') { + $ARGV[0] = "-$rest"; + } + else { + shift; + } + } + } +} |