summaryrefslogtreecommitdiff
path: root/lib/getopts.pl
diff options
context:
space:
mode:
authorBill Campbell <bill@celestial.com>2000-10-05 11:04:51 -0700
committerJarkko Hietaniemi <jhi@iki.fi>2000-10-12 23:58:43 +0000
commita60e505a41cfa0425b60ae64a2076d7cebcdc0b3 (patch)
tree320e9692f6949c65b267e3161a7742413f954fa6 /lib/getopts.pl
parente4dfc136d9a3d82ffa8f71e721a4dfe58fd3bad2 (diff)
downloadperl-a60e505a41cfa0425b60ae64a2076d7cebcdc0b3.tar.gz
Two thirds of
Subject: Proposed patches, Install.pm getopts.pl termcap.pl Message-ID: <20001005180451.A22029@kstarr.celestial.com> The Install.pm changes will be submitted separately because they need some work and discussion still. p4raw-id: //depot/perl@7209
Diffstat (limited to 'lib/getopts.pl')
-rw-r--r--lib/getopts.pl65
1 files changed, 37 insertions, 28 deletions
diff --git a/lib/getopts.pl b/lib/getopts.pl
index 25958199a6..4a50b8f6c2 100644
--- a/lib/getopts.pl
+++ b/lib/getopts.pl
@@ -16,41 +16,50 @@ sub Getopts {
local($argumentative) = @_;
local(@args,$_,$first,$rest);
local($errs) = 0;
+ local($[) = 0;
@args = split( / */, $argumentative );
while(@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
- ($first,$rest) = ($1,$2);
- $pos = index($argumentative,$first);
- if($pos >= 0) {
- if($pos < $#args && $args[$pos+1] eq ':') {
- shift(@ARGV);
- if($rest eq '') {
- ++$errs unless @ARGV;
- $rest = shift(@ARGV);
- }
- ${"opt_$first"} = $rest;
- }
- else {
- ${"opt_$first"} = 1;
- if($rest eq '') {
- shift(@ARGV);
+ ($first,$rest) = ($1,$2);
+ $pos = index($argumentative,$first);
+ if($pos >= $[) {
+ if($args[$pos+1] eq ':') {
+ shift(@ARGV);
+ if($rest eq '') {
+ ++$errs unless(@ARGV);
+ $rest = shift(@ARGV);
+ }
+ eval "
+ push(\@opt_$first, \$rest);
+ if(\$opt_$first eq '') {
+ \$opt_$first = \$rest;
+ }
+ else {
+ \$opt_$first .= ' ' . \$rest;
+ }
+ ";
+ }
+ else {
+ eval "\$opt_$first = 1";
+ if($rest eq '') {
+ shift(@ARGV);
+ }
+ else {
+ $ARGV[0] = "-$rest";
+ }
+ }
}
else {
- $ARGV[0] = "-$rest";
+ print STDERR "Unknown option: $first\n";
+ ++$errs;
+ if($rest ne '') {
+ $ARGV[0] = "-$rest";
+ }
+ else {
+ shift(@ARGV);
+ }
}
- }
- }
- else {
- print STDERR "Unknown option: $first\n";
- ++$errs;
- if($rest ne '') {
- $ARGV[0] = "-$rest";
- }
- else {
- shift(@ARGV);
- }
}
- }
$errs == 0;
}