Bug#4505: Perl5.003-2 has wrong getopts.pl
The /usr/lib/perl5/getopts.pl is broken: it won't take more than one option
with an argument. More precisely: for Getopts('abcde:fghij'), only -e will care
about its argument, not -a, -b, -c or -d. The previous version had not this
problem. Here is the old one:
;# getopts.pl - a better getopt.pl
;# 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 >= $[) { # valid option
if($pos<index($argumentative,':')) { # takes an arg
shift(@ARGV);
if($rest eq '') {
++$errs unless @ARGV;
$rest = shift(@ARGV);
}
eval "\$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;
#############################
And now the new one, with the error:
;# getopts.pl - a better getopt.pl
;# 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 ':') {
#####################^^^^^^^^^^^^^^ only the last is correctly treated....
#####################
shift(@ARGV);
if($rest eq '') {
++$errs unless @ARGV;
$rest = shift(@ARGV);
}
eval "\$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;
Amities,
Jean Orloff
+++++++++ + + + + + + + ++++++
+Tel:(33)50.09.16.75 Fax:(33)50.09.94.95 http://lapphp0.in2p3.fr/~orloff/ +
+++++++++ + + + + + + + ++++++
"As I approached the intersection a sign suddenly appeared in a place
where no sign had ever appeared before, making me unable to avoid the
accident."
True accident report, from the Toronto News on July 26, 1977.
+++++++++ + + + + + + + ++++++
Reply to: