You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.4 KiB
66 lines
1.4 KiB
;# getopts.pl - a better getopt.pl
|
|
#
|
|
# This library is no longer being maintained, and is included for backward
|
|
# compatibility with Perl 4 programs which may require it.
|
|
#
|
|
# In particular, this should not be used as an example of modern Perl
|
|
# programming techniques.
|
|
#
|
|
# Suggested alternatives: Getopt::Long or Getopt::Std
|
|
#
|
|
;# Usage:
|
|
;# do Getopts('a:bc'); # -a takes arg. -b & -c not. Sets opt_* as a
|
|
;# # side effect.
|
|
|
|
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 >= $[) {
|
|
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 {
|
|
print STDERR "Unknown option: $first\n";
|
|
++$errs;
|
|
if($rest ne '') {
|
|
$ARGV[0] = "-$rest";
|
|
}
|
|
else {
|
|
shift(@ARGV);
|
|
}
|
|
}
|
|
}
|
|
$errs == 0;
|
|
}
|
|
|
|
1;
|