This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl 4.0 patch 36: (combined patch)
[perl5.git] / lib / getopt.pl
CommitLineData
55204971 1;# $RCSfile: getopt.pl,v $$Revision: 4.0.1.1 $$Date: 91/11/05 17:53:01 $
378cc40b
LW
2
3;# Process single-character switches with switch clustering. Pass one argument
4;# which is a string containing all switches that take an argument. For each
5;# switch found, sets $opt_x (where x is the switch name) to the value of the
6;# argument, or 1 if no argument. Switches which take an argument don't care
7;# whether there is a space between the switch and the argument.
8
9;# Usage:
10;# do Getopt('oDI'); # -o, -D & -I take arg. Sets opt_* as a side effect.
11
12sub Getopt {
13 local($argumentative) = @_;
14 local($_,$first,$rest);
ac58e20f 15 local($[) = 0;
378cc40b 16
55204971 17 while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
378cc40b
LW
18 ($first,$rest) = ($1,$2);
19 if (index($argumentative,$first) >= $[) {
20 if ($rest ne '') {
a687059c 21 shift(@ARGV);
378cc40b
LW
22 }
23 else {
a687059c
LW
24 shift(@ARGV);
25 $rest = shift(@ARGV);
378cc40b
LW
26 }
27 eval "\$opt_$first = \$rest;";
28 }
29 else {
30 eval "\$opt_$first = 1;";
31 if ($rest ne '') {
32 $ARGV[0] = "-$rest";
33 }
34 else {
a687059c 35 shift(@ARGV);
378cc40b
LW
36 }
37 }
38 }
39}
a687059c
LW
40
411;