Re: [PATCH] 5.004_04 or 5.004_64: Benchmark.pm: add run-for-some-time
[p5sagit/p5-mst-13.2.git] / lib / Getopt / Long.pm
CommitLineData
a11f5414 1# GetOpt::Long.pm -- Universal options parsing
404cbe93 2
a11f5414 3package Getopt::Long;
4
bb40d378 5# RCS Status : $Id: GetoptLong.pm,v 2.13 1997-12-25 16:20:17+01 jv Exp $
404cbe93 6# Author : Johan Vromans
7# Created On : Tue Sep 11 15:00:12 1990
8# Last Modified By: Johan Vromans
bb40d378 9# Last Modified On: Thu Dec 25 16:18:08 1997
10# Update Count : 647
404cbe93 11# Status : Released
12
bb40d378 13################ Copyright ################
f06db76b 14
bb40d378 15# This program is Copyright 1990,1997 by Johan Vromans.
16# This program is free software; you can redistribute it and/or
17# modify it under the terms of the GNU General Public License
18# as published by the Free Software Foundation; either version 2
19# of the License, or (at your option) any later version.
20#
21# This program is distributed in the hope that it will be useful,
22# but WITHOUT ANY WARRANTY; without even the implied warranty of
23# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24# GNU General Public License for more details.
25#
26# If you do not have a copy of the GNU General Public License write to
27# the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
28# MA 02139, USA.
f06db76b 29
bb40d378 30################ Module Preamble ################
404cbe93 31
bb40d378 32use strict;
404cbe93 33
bb40d378 34BEGIN {
35 require 5.003;
36 use Exporter ();
37 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
38 $VERSION = sprintf("%d.%02d", q$Revision: 2.13 $ =~ /(\d+)\.(\d+)/);
404cbe93 39
bb40d378 40 @ISA = qw(Exporter);
41 @EXPORT = qw(&GetOptions $REQUIRE_ORDER $PERMUTE $RETURN_IN_ORDER);
42 %EXPORT_TAGS = ();
43 @EXPORT_OK = qw();
44}
404cbe93 45
bb40d378 46use vars @EXPORT, @EXPORT_OK;
47# User visible variables.
48use vars qw($error $debug $major_version $minor_version);
49# Deprecated visible variables.
50use vars qw($autoabbrev $getopt_compat $ignorecase $bundling $order
51 $passthrough);
404cbe93 52
bb40d378 53################ Local Variables ################
404cbe93 54
bb40d378 55my $gen_prefix; # generic prefix (option starters)
56my $argend; # option list terminator
57my %opctl; # table of arg.specs (long and abbrevs)
58my %bopctl; # table of arg.specs (bundles)
59my @opctl; # the possible long option names
60my $pkg; # current context. Needed if no linkage.
61my %aliases; # alias table
62my $genprefix; # so we can call the same module more
63my $opt; # current option
64my $arg; # current option value, if any
65my $array; # current option is array typed
66my $hash; # current option is hash typed
67my $key; # hash key for a hash option
68 # than once in differing environments
69my $config_defaults; # set config defaults
70my $find_option; # helper routine
71my $croak; # helper routine
404cbe93 72
bb40d378 73################ Subroutines ################
404cbe93 74
bb40d378 75sub GetOptions {
404cbe93 76
bb40d378 77 my @optionlist = @_; # local copy of the option descriptions
78 $argend = '--'; # option list terminator
79 %opctl = (); # table of arg.specs (long and abbrevs)
80 %bopctl = (); # table of arg.specs (bundles)
81 $pkg = (caller)[0]; # current context
82 # Needed if linkage is omitted.
83 %aliases= (); # alias table
84 my @ret = (); # accum for non-options
85 my %linkage; # linkage
86 my $userlinkage; # user supplied HASH
87 $genprefix = $gen_prefix; # so we can call the same module many times
88 $error = '';
404cbe93 89
bb40d378 90 print STDERR ('GetOptions $Revision: 2.13 $ ',
91 "[GetOpt::Long $Getopt::Long::VERSION] -- ",
92 "called from package \"$pkg\".\n",
93 " (@ARGV)\n",
94 " autoabbrev=$autoabbrev".
95 ",bundling=$bundling",
96 ",getopt_compat=$getopt_compat",
97 ",order=$order",
98 ",\n ignorecase=$ignorecase",
99 ",passthrough=$passthrough",
100 ",genprefix=\"$genprefix\"",
101 ".\n")
102 if $debug;
404cbe93 103
bb40d378 104 # Check for ref HASH as first argument.
105 # First argument may be an object. It's OK to use this as long
106 # as it is really a hash underneath.
107 $userlinkage = undef;
108 if ( ref($optionlist[0]) and
109 "$optionlist[0]" =~ /^(?:.*\=)?HASH\([^\(]*\)$/ ) {
110 $userlinkage = shift (@optionlist);
111 print STDERR ("=> user linkage: $userlinkage\n") if $debug;
112 }
404cbe93 113
bb40d378 114 # See if the first element of the optionlist contains option
115 # starter characters.
116 if ( $optionlist[0] =~ /^\W+$/ ) {
117 $genprefix = shift (@optionlist);
118 # Turn into regexp. Needs to be parenthesized!
119 $genprefix =~ s/(\W)/\\$1/g;
120 $genprefix = "([" . $genprefix . "])";
121 }
404cbe93 122
bb40d378 123 # Verify correctness of optionlist.
124 %opctl = ();
125 %bopctl = ();
126 while ( @optionlist > 0 ) {
127 my $opt = shift (@optionlist);
404cbe93 128
bb40d378 129 # Strip leading prefix so people can specify "--foo=i" if they like.
130 $opt = $2 if $opt =~ /^$genprefix+(.*)$/;
404cbe93 131
bb40d378 132 if ( $opt eq '<>' ) {
133 if ( (defined $userlinkage)
134 && !(@optionlist > 0 && ref($optionlist[0]))
135 && (exists $userlinkage->{$opt})
136 && ref($userlinkage->{$opt}) ) {
137 unshift (@optionlist, $userlinkage->{$opt});
138 }
139 unless ( @optionlist > 0
140 && ref($optionlist[0]) && ref($optionlist[0]) eq 'CODE' ) {
141 $error .= "Option spec <> requires a reference to a subroutine\n";
142 next;
143 }
144 $linkage{'<>'} = shift (@optionlist);
145 next;
146 }
404cbe93 147
bb40d378 148 # Match option spec. Allow '?' as an alias.
149 if ( $opt !~ /^((\w+[-\w]*)(\|(\?|\w[-\w]*)?)*)?(!|[=:][infse][@%]?)?$/ ) {
150 $error .= "Error in option spec: \"$opt\"\n";
151 next;
152 }
153 my ($o, $c, $a) = ($1, $5);
154 $c = '' unless defined $c;
404cbe93 155
bb40d378 156 if ( ! defined $o ) {
157 # empty -> '-' option
158 $opctl{$o = ''} = $c;
159 }
160 else {
161 # Handle alias names
162 my @o = split (/\|/, $o);
163 my $linko = $o = $o[0];
164 # Force an alias if the option name is not locase.
165 $a = $o unless $o eq lc($o);
166 $o = lc ($o)
167 if $ignorecase > 1
168 || ($ignorecase
169 && ($bundling ? length($o) > 1 : 1));
404cbe93 170
bb40d378 171 foreach ( @o ) {
172 if ( $bundling && length($_) == 1 ) {
173 $_ = lc ($_) if $ignorecase > 1;
174 if ( $c eq '!' ) {
175 $opctl{"no$_"} = $c;
176 warn ("Ignoring '!' modifier for short option $_\n");
177 $c = '';
178 }
179 $opctl{$_} = $bopctl{$_} = $c;
180 }
181 else {
182 $_ = lc ($_) if $ignorecase;
183 if ( $c eq '!' ) {
184 $opctl{"no$_"} = $c;
185 $c = '';
186 }
187 $opctl{$_} = $c;
188 }
189 if ( defined $a ) {
190 # Note alias.
191 $aliases{$_} = $a;
192 }
193 else {
194 # Set primary name.
195 $a = $_;
196 }
197 }
198 $o = $linko;
199 }
404cbe93 200
bb40d378 201 # If no linkage is supplied in the @optionlist, copy it from
202 # the userlinkage if available.
203 if ( defined $userlinkage ) {
204 unless ( @optionlist > 0 && ref($optionlist[0]) ) {
205 if ( exists $userlinkage->{$o} && ref($userlinkage->{$o}) ) {
206 print STDERR ("=> found userlinkage for \"$o\": ",
207 "$userlinkage->{$o}\n")
208 if $debug;
209 unshift (@optionlist, $userlinkage->{$o});
210 }
211 else {
212 # Do nothing. Being undefined will be handled later.
213 next;
214 }
215 }
216 }
404cbe93 217
bb40d378 218 # Copy the linkage. If omitted, link to global variable.
219 if ( @optionlist > 0 && ref($optionlist[0]) ) {
220 print STDERR ("=> link \"$o\" to $optionlist[0]\n")
221 if $debug;
222 if ( ref($optionlist[0]) =~ /^(SCALAR|CODE)$/ ) {
223 $linkage{$o} = shift (@optionlist);
224 }
225 elsif ( ref($optionlist[0]) =~ /^(ARRAY)$/ ) {
226 $linkage{$o} = shift (@optionlist);
227 $opctl{$o} .= '@'
228 if $opctl{$o} ne '' and $opctl{$o} !~ /\@$/;
229 $bopctl{$o} .= '@'
230 if $bundling and defined $bopctl{$o} and
231 $bopctl{$o} ne '' and $bopctl{$o} !~ /\@$/;
232 }
233 elsif ( ref($optionlist[0]) =~ /^(HASH)$/ ) {
234 $linkage{$o} = shift (@optionlist);
235 $opctl{$o} .= '%'
236 if $opctl{$o} ne '' and $opctl{$o} !~ /\%$/;
237 $bopctl{$o} .= '%'
238 if $bundling and defined $bopctl{$o} and
239 $bopctl{$o} ne '' and $bopctl{$o} !~ /\%$/;
240 }
241 else {
242 $error .= "Invalid option linkage for \"$opt\"\n";
243 }
244 }
245 else {
246 # Link to global $opt_XXX variable.
247 # Make sure a valid perl identifier results.
248 my $ov = $o;
249 $ov =~ s/\W/_/g;
250 if ( $c =~ /@/ ) {
251 print STDERR ("=> link \"$o\" to \@$pkg","::opt_$ov\n")
252 if $debug;
253 eval ("\$linkage{\$o} = \\\@".$pkg."::opt_$ov;");
254 }
255 elsif ( $c =~ /%/ ) {
256 print STDERR ("=> link \"$o\" to \%$pkg","::opt_$ov\n")
257 if $debug;
258 eval ("\$linkage{\$o} = \\\%".$pkg."::opt_$ov;");
259 }
260 else {
261 print STDERR ("=> link \"$o\" to \$$pkg","::opt_$ov\n")
262 if $debug;
263 eval ("\$linkage{\$o} = \\\$".$pkg."::opt_$ov;");
264 }
265 }
266 }
267
268 # Bail out if errors found.
269 die ($error) if $error;
270 $error = 0;
271
272 # Sort the possible long option names.
273 @opctl = sort(keys (%opctl)) if $autoabbrev;
274
275 # Show the options tables if debugging.
276 if ( $debug ) {
277 my ($arrow, $k, $v);
278 $arrow = "=> ";
279 while ( ($k,$v) = each(%opctl) ) {
280 print STDERR ($arrow, "\$opctl{\"$k\"} = \"$v\"\n");
281 $arrow = " ";
282 }
283 $arrow = "=> ";
284 while ( ($k,$v) = each(%bopctl) ) {
285 print STDERR ($arrow, "\$bopctl{\"$k\"} = \"$v\"\n");
286 $arrow = " ";
287 }
288 }
289
290 # Process argument list
291 while ( @ARGV > 0 ) {
292
293 #### Get next argument ####
294
295 $opt = shift (@ARGV);
296 $arg = undef;
297 $array = $hash = 0;
298 print STDERR ("=> option \"", $opt, "\"\n") if $debug;
299
300 #### Determine what we have ####
301
302 # Double dash is option list terminator.
303 if ( $opt eq $argend ) {
304 # Finish. Push back accumulated arguments and return.
305 unshift (@ARGV, @ret)
306 if $order == $PERMUTE;
307 return ($error == 0);
308 }
309
310 my $tryopt = $opt;
311
312 # find_option operates on the GLOBAL $opt and $arg!
313 if ( &$find_option () ) {
314
315 # find_option undefines $opt in case of errors.
316 next unless defined $opt;
317
318 if ( defined $arg ) {
319 $opt = $aliases{$opt} if defined $aliases{$opt};
320
321 if ( defined $linkage{$opt} ) {
322 print STDERR ("=> ref(\$L{$opt}) -> ",
323 ref($linkage{$opt}), "\n") if $debug;
324
325 if ( ref($linkage{$opt}) eq 'SCALAR' ) {
326 print STDERR ("=> \$\$L{$opt} = \"$arg\"\n") if $debug;
327 ${$linkage{$opt}} = $arg;
328 }
329 elsif ( ref($linkage{$opt}) eq 'ARRAY' ) {
330 print STDERR ("=> push(\@{\$L{$opt}, \"$arg\")\n")
331 if $debug;
332 push (@{$linkage{$opt}}, $arg);
333 }
334 elsif ( ref($linkage{$opt}) eq 'HASH' ) {
335 print STDERR ("=> \$\$L{$opt}->{$key} = \"$arg\"\n")
336 if $debug;
337 $linkage{$opt}->{$key} = $arg;
338 }
339 elsif ( ref($linkage{$opt}) eq 'CODE' ) {
340 print STDERR ("=> &L{$opt}(\"$opt\", \"$arg\")\n")
341 if $debug;
342 &{$linkage{$opt}}($opt, $arg);
343 }
344 else {
345 print STDERR ("Invalid REF type \"", ref($linkage{$opt}),
346 "\" in linkage\n");
347 &$croak ("Getopt::Long -- internal error!\n");
348 }
349 }
350 # No entry in linkage means entry in userlinkage.
351 elsif ( $array ) {
352 if ( defined $userlinkage->{$opt} ) {
353 print STDERR ("=> push(\@{\$L{$opt}}, \"$arg\")\n")
354 if $debug;
355 push (@{$userlinkage->{$opt}}, $arg);
356 }
357 else {
358 print STDERR ("=>\$L{$opt} = [\"$arg\"]\n")
359 if $debug;
360 $userlinkage->{$opt} = [$arg];
361 }
362 }
363 elsif ( $hash ) {
364 if ( defined $userlinkage->{$opt} ) {
365 print STDERR ("=> \$L{$opt}->{$key} = \"$arg\"\n")
366 if $debug;
367 $userlinkage->{$opt}->{$key} = $arg;
368 }
369 else {
370 print STDERR ("=>\$L{$opt} = {$key => \"$arg\"}\n")
371 if $debug;
372 $userlinkage->{$opt} = {$key => $arg};
373 }
374 }
375 else {
376 print STDERR ("=>\$L{$opt} = \"$arg\"\n") if $debug;
377 $userlinkage->{$opt} = $arg;
378 }
379 }
380 }
381
382 # Not an option. Save it if we $PERMUTE and don't have a <>.
383 elsif ( $order == $PERMUTE ) {
384 # Try non-options call-back.
385 my $cb;
386 if ( (defined ($cb = $linkage{'<>'})) ) {
387 &$cb ($tryopt);
388 }
389 else {
390 print STDERR ("=> saving \"$tryopt\" ",
391 "(not an option, may permute)\n") if $debug;
392 push (@ret, $tryopt);
393 }
394 next;
395 }
396
397 # ...otherwise, terminate.
398 else {
399 # Push this one back and exit.
400 unshift (@ARGV, $tryopt);
401 return ($error == 0);
402 }
403
404 }
405
406 # Finish.
407 if ( $order == $PERMUTE ) {
408 # Push back accumulated arguments
409 print STDERR ("=> restoring \"", join('" "', @ret), "\"\n")
410 if $debug && @ret > 0;
411 unshift (@ARGV, @ret) if @ret > 0;
412 }
413
414 return ($error == 0);
415}
416
417sub config (@) {
418 my (@options) = @_;
419 my $opt;
420 foreach $opt ( @options ) {
421 my $try = lc ($opt);
422 my $action = 1;
423 if ( $try =~ /^no_?(.*)$/ ) {
424 $action = 0;
425 $try = $1;
426 }
427 if ( $try eq 'default' or $try eq 'defaults' ) {
428 &$config_defaults () if $action;
429 }
430 elsif ( $try eq 'auto_abbrev' or $try eq 'autoabbrev' ) {
431 $autoabbrev = $action;
432 }
433 elsif ( $try eq 'getopt_compat' ) {
434 $getopt_compat = $action;
435 }
436 elsif ( $try eq 'ignorecase' or $try eq 'ignore_case' ) {
437 $ignorecase = $action;
438 }
439 elsif ( $try eq 'ignore_case_always' ) {
440 $ignorecase = $action ? 2 : 0;
441 }
442 elsif ( $try eq 'bundling' ) {
443 $bundling = $action;
444 }
445 elsif ( $try eq 'bundling_override' ) {
446 $bundling = $action ? 2 : 0;
447 }
448 elsif ( $try eq 'require_order' ) {
449 $order = $action ? $REQUIRE_ORDER : $PERMUTE;
450 }
451 elsif ( $try eq 'permute' ) {
452 $order = $action ? $PERMUTE : $REQUIRE_ORDER;
453 }
454 elsif ( $try eq 'pass_through' or $try eq 'passthrough' ) {
455 $passthrough = $action;
456 }
457 elsif ( $try eq 'debug' ) {
458 $debug = $action;
459 }
460 else {
461 &$croak ("Getopt::Long: unknown config parameter \"$opt\"")
462 }
463 }
464}
465
466# To prevent Carp from being loaded unnecessarily.
467$croak = sub {
468 require 'Carp.pm';
469 $Carp::CarpLevel = 1;
470 Carp::croak(@_);
471};
472
473################ Private Subroutines ################
474
475$find_option = sub {
476
477 print STDERR ("=> find \"$opt\", genprefix=\"$genprefix\"\n") if $debug;
478
479 return 0 unless $opt =~ /^$genprefix(.*)$/;
480
481 $opt = $2;
482 my ($starter) = $1;
483
484 print STDERR ("=> split \"$starter\"+\"$opt\"\n") if $debug;
485
486 my $optarg = undef; # value supplied with --opt=value
487 my $rest = undef; # remainder from unbundling
488
489 # If it is a long option, it may include the value.
490 if (($starter eq "--" || ($getopt_compat && !$bundling))
491 && $opt =~ /^([^=]+)=(.*)$/ ) {
492 $opt = $1;
493 $optarg = $2;
494 print STDERR ("=> option \"", $opt,
495 "\", optarg = \"$optarg\"\n") if $debug;
496 }
497
498 #### Look it up ###
499
500 my $tryopt = $opt; # option to try
501 my $optbl = \%opctl; # table to look it up (long names)
502 my $type;
503
504 if ( $bundling && $starter eq '-' ) {
505 # Unbundle single letter option.
506 $rest = substr ($tryopt, 1);
507 $tryopt = substr ($tryopt, 0, 1);
508 $tryopt = lc ($tryopt) if $ignorecase > 1;
509 print STDERR ("=> $starter$tryopt unbundled from ",
510 "$starter$tryopt$rest\n") if $debug;
511 $rest = undef unless $rest ne '';
512 $optbl = \%bopctl; # look it up in the short names table
513
514 # If bundling == 2, long options can override bundles.
515 if ( $bundling == 2 and
516 defined ($type = $opctl{$tryopt.$rest}) ) {
517 print STDERR ("=> $starter$tryopt rebundled to ",
518 "$starter$tryopt$rest\n") if $debug;
519 $tryopt .= $rest;
520 undef $rest;
521 }
522 }
523
524 # Try auto-abbreviation.
525 elsif ( $autoabbrev ) {
526 # Downcase if allowed.
527 $tryopt = $opt = lc ($opt) if $ignorecase;
528 # Turn option name into pattern.
529 my $pat = quotemeta ($opt);
530 # Look up in option names.
531 my @hits = grep (/^$pat/, @opctl);
532 print STDERR ("=> ", scalar(@hits), " hits (@hits) with \"$pat\" ",
533 "out of ", scalar(@opctl), "\n") if $debug;
534
535 # Check for ambiguous results.
536 unless ( (@hits <= 1) || (grep ($_ eq $opt, @hits) == 1) ) {
537 # See if all matches are for the same option.
538 my %hit;
539 foreach ( @hits ) {
540 $_ = $aliases{$_} if defined $aliases{$_};
541 $hit{$_} = 1;
542 }
543 # Now see if it really is ambiguous.
544 unless ( keys(%hit) == 1 ) {
545 return 0 if $passthrough;
546 warn ("Option ", $opt, " is ambiguous (",
547 join(", ", @hits), ")\n");
548 $error++;
549 undef $opt;
550 return 1;
551 }
552 @hits = keys(%hit);
553 }
554
555 # Complete the option name, if appropriate.
556 if ( @hits == 1 && $hits[0] ne $opt ) {
557 $tryopt = $hits[0];
558 $tryopt = lc ($tryopt) if $ignorecase;
559 print STDERR ("=> option \"$opt\" -> \"$tryopt\"\n")
560 if $debug;
561 }
562 }
563
564 # Map to all lowercase if ignoring case.
565 elsif ( $ignorecase ) {
566 $tryopt = lc ($opt);
567 }
568
569 # Check validity by fetching the info.
570 $type = $optbl->{$tryopt} unless defined $type;
571 unless ( defined $type ) {
572 return 0 if $passthrough;
573 warn ("Unknown option: ", $opt, "\n");
574 $error++;
575 return 1;
576 }
577 # Apparently valid.
578 $opt = $tryopt;
579 print STDERR ("=> found \"$type\" for ", $opt, "\n") if $debug;
580
581 #### Determine argument status ####
582
583 # If it is an option w/o argument, we're almost finished with it.
584 if ( $type eq '' || $type eq '!' ) {
585 if ( defined $optarg ) {
586 return 0 if $passthrough;
587 warn ("Option ", $opt, " does not take an argument\n");
588 $error++;
589 undef $opt;
590 }
591 elsif ( $type eq '' ) {
592 $arg = 1; # supply explicit value
593 }
594 else {
595 substr ($opt, 0, 2) = ''; # strip NO prefix
596 $arg = 0; # supply explicit value
597 }
598 unshift (@ARGV, $starter.$rest) if defined $rest;
599 return 1;
600 }
601
602 # Get mandatory status and type info.
603 my $mand;
604 ($mand, $type, $array, $hash) = $type =~ /^(.)(.)(@?)(%?)$/;
605
606 # Check if there is an option argument available.
607 if ( defined $optarg ? ($optarg eq '')
608 : !(defined $rest || @ARGV > 0) ) {
609 # Complain if this option needs an argument.
610 if ( $mand eq "=" ) {
611 return 0 if $passthrough;
612 warn ("Option ", $opt, " requires an argument\n");
613 $error++;
614 undef $opt;
615 }
616 if ( $mand eq ":" ) {
617 $arg = $type eq "s" ? '' : 0;
618 }
619 return 1;
620 }
621
622 # Get (possibly optional) argument.
623 $arg = (defined $rest ? $rest
624 : (defined $optarg ? $optarg : shift (@ARGV)));
625
626 # Get key if this is a "name=value" pair for a hash option.
627 $key = undef;
628 if ($hash && defined $arg) {
629 ($key, $arg) = ($arg =~ /^(.*)=(.*)$/o) ? ($1, $2) : ($arg, 1);
630 }
631
632 #### Check if the argument is valid for this option ####
633
634 if ( $type eq "s" ) { # string
635 # A mandatory string takes anything.
636 return 1 if $mand eq "=";
637
638 # An optional string takes almost anything.
639 return 1 if defined $optarg || defined $rest;
640 return 1 if $arg eq "-"; # ??
641
642 # Check for option or option list terminator.
643 if ($arg eq $argend ||
644 $arg =~ /^$genprefix.+/) {
645 # Push back.
646 unshift (@ARGV, $arg);
647 # Supply empty value.
648 $arg = '';
649 }
650 }
651
652 elsif ( $type eq "n" || $type eq "i" ) { # numeric/integer
653 if ( $bundling && defined $rest && $rest =~ /^(-?[0-9]+)(.*)$/ ) {
654 $arg = $1;
655 $rest = $2;
656 unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
657 }
658 elsif ( $arg !~ /^-?[0-9]+$/ ) {
659 if ( defined $optarg || $mand eq "=" ) {
660 if ( $passthrough ) {
661 unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
662 unless defined $optarg;
663 return 0;
664 }
665 warn ("Value \"", $arg, "\" invalid for option ",
666 $opt, " (number expected)\n");
667 $error++;
668 undef $opt;
669 # Push back.
670 unshift (@ARGV, $starter.$rest) if defined $rest;
671 }
672 else {
673 # Push back.
674 unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
675 # Supply default value.
676 $arg = 0;
677 }
678 }
679 }
680
681 elsif ( $type eq "f" ) { # real number, int is also ok
682 # We require at least one digit before a point or 'e',
683 # and at least one digit following the point and 'e'.
684 # [-]NN[.NN][eNN]
685 if ( $bundling && defined $rest &&
686 $rest =~ /^(-?[0-9]+(\.[0-9]+)?([eE]-?[0-9]+)?)(.*)$/ ) {
687 $arg = $1;
688 $rest = $4;
689 unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
690 }
691 elsif ( $arg !~ /^-?[0-9.]+(\.[0-9]+)?([eE]-?[0-9]+)?$/ ) {
692 if ( defined $optarg || $mand eq "=" ) {
693 if ( $passthrough ) {
694 unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
695 unless defined $optarg;
696 return 0;
697 }
698 warn ("Value \"", $arg, "\" invalid for option ",
699 $opt, " (real number expected)\n");
700 $error++;
701 undef $opt;
702 # Push back.
703 unshift (@ARGV, $starter.$rest) if defined $rest;
704 }
705 else {
706 # Push back.
707 unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
708 # Supply default value.
709 $arg = 0.0;
710 }
711 }
712 }
713 else {
714 &$croak ("GetOpt::Long internal error (Can't happen)\n");
715 }
716 return 1;
717};
718
719$config_defaults = sub {
720 # Handle POSIX compliancy.
721 if ( defined $ENV{"POSIXLY_CORRECT"} ) {
722 $gen_prefix = "(--|-)";
723 $autoabbrev = 0; # no automatic abbrev of options
724 $bundling = 0; # no bundling of single letter switches
725 $getopt_compat = 0; # disallow '+' to start options
726 $order = $REQUIRE_ORDER;
727 }
728 else {
729 $gen_prefix = "(--|-|\\+)";
730 $autoabbrev = 1; # automatic abbrev of options
731 $bundling = 0; # bundling off by default
732 $getopt_compat = 1; # allow '+' to start options
733 $order = $PERMUTE;
734 }
735 # Other configurable settings.
736 $debug = 0; # for debugging
737 $error = 0; # error tally
738 $ignorecase = 1; # ignore case when matching options
739 $passthrough = 0; # leave unrecognized options alone
740};
741
742################ Initialization ################
743
744# Values for $order. See GNU getopt.c for details.
745($REQUIRE_ORDER, $PERMUTE, $RETURN_IN_ORDER) = (0..2);
746# Version major/minor numbers.
747($major_version, $minor_version) = $VERSION =~ /^(\d+)\.(\d+)/;
748
749# Set defaults.
750&$config_defaults ();
751
752################ Package return ################
753
7541;
755
756__END__
757
758=head1 NAME
759
760GetOptions - extended processing of command line options
761
762=head1 SYNOPSIS
763
764 use Getopt::Long;
765 $result = GetOptions (...option-descriptions...);
766
767=head1 DESCRIPTION
768
769The Getopt::Long module implements an extended getopt function called
770GetOptions(). This function adheres to the POSIX syntax for command
771line options, with GNU extensions. In general, this means that options
772have long names instead of single letters, and are introduced with a
773double dash "--". Support for bundling of command line options, as was
774the case with the more traditional single-letter approach, is provided
775but not enabled by default. For example, the UNIX "ps" command can be
776given the command line "option"
777
778 -vax
779
780which means the combination of B<-v>, B<-a> and B<-x>. With the new
781syntax B<--vax> would be a single option, probably indicating a
782computer architecture.
783
784Command line options can be used to set values. These values can be
785specified in one of two ways:
786
787 --size 24
788 --size=24
789
790GetOptions is called with a list of option-descriptions, each of which
791consists of two elements: the option specifier and the option linkage.
792The option specifier defines the name of the option and, optionally,
793the value it can take. The option linkage is usually a reference to a
794variable that will be set when the option is used. For example, the
795following call to GetOptions:
796
797 GetOptions("size=i" => \$offset);
798
799will accept a command line option "size" that must have an integer
800value. With a command line of "--size 24" this will cause the variable
801$offset to get the value 24.
802
803Alternatively, the first argument to GetOptions may be a reference to
804a HASH describing the linkage for the options, or an object whose
805class is based on a HASH. The following call is equivalent to the
806example above:
807
808 %optctl = ("size" => \$offset);
809 GetOptions(\%optctl, "size=i");
810
811Linkage may be specified using either of the above methods, or both.
812Linkage specified in the argument list takes precedence over the
813linkage specified in the HASH.
814
815The command line options are taken from array @ARGV. Upon completion
816of GetOptions, @ARGV will contain the rest (i.e. the non-options) of
817the command line.
818
819Each option specifier designates the name of the option, optionally
820followed by an argument specifier.
821
822Options that do not take arguments will have no argument specifier.
823The option variable will be set to 1 if the option is used.
824
825For the other options, the values for argument specifiers are:
826
827=over 8
828
829=item !
830
831Option does not take an argument and may be negated, i.e. prefixed by
832"no". E.g. "foo!" will allow B<--foo> (with value 1) and B<-nofoo>
833(with value 0).
834The option variable will be set to 1, or 0 if negated.
835
836=item =s
837
838Option takes a mandatory string argument.
839This string will be assigned to the option variable.
840Note that even if the string argument starts with B<-> or B<-->, it
841will not be considered an option on itself.
842
843=item :s
844
845Option takes an optional string argument.
846This string will be assigned to the option variable.
847If omitted, it will be assigned "" (an empty string).
848If the string argument starts with B<-> or B<-->, it
849will be considered an option on itself.
850
851=item =i
852
853Option takes a mandatory integer argument.
854This value will be assigned to the option variable.
855Note that the value may start with B<-> to indicate a negative
856value.
857
858=item :i
859
860Option takes an optional integer argument.
861This value will be assigned to the option variable.
862If omitted, the value 0 will be assigned.
863Note that the value may start with B<-> to indicate a negative
864value.
865
866=item =f
867
868Option takes a mandatory real number argument.
404cbe93 869This value will be assigned to the option variable.
870Note that the value may start with B<-> to indicate a negative
871value.
872
873=item :f
874
875Option takes an optional real number argument.
876This value will be assigned to the option variable.
877If omitted, the value 0 will be assigned.
878
879=back
880
881A lone dash B<-> is considered an option, the corresponding option
882name is the empty string.
883
884A double dash on itself B<--> signals end of the options list.
885
886=head2 Linkage specification
887
888The linkage specifier is optional. If no linkage is explicitly
889specified but a ref HASH is passed, GetOptions will place the value in
890the HASH. For example:
891
892 %optctl = ();
02a7d5cb 893 GetOptions (\%optctl, "size=i");
404cbe93 894
895will perform the equivalent of the assignment
896
897 $optctl{"size"} = 24;
898
899For array options, a reference to an array is used, e.g.:
900
901 %optctl = ();
02a7d5cb 902 GetOptions (\%optctl, "sizes=i@");
404cbe93 903
904with command line "-sizes 24 -sizes 48" will perform the equivalent of
905the assignment
906
907 $optctl{"sizes"} = [24, 48];
908
381319f7 909For hash options (an option whose argument looks like "name=value"),
910a reference to a hash is used, e.g.:
911
912 %optctl = ();
02a7d5cb 913 GetOptions (\%optctl, "define=s%");
381319f7 914
915with command line "--define foo=hello --define bar=world" will perform the
916equivalent of the assignment
917
918 $optctl{"define"} = {foo=>'hello', bar=>'world')
919
404cbe93 920If no linkage is explicitly specified and no ref HASH is passed,
921GetOptions will put the value in a global variable named after the
922option, prefixed by "opt_". To yield a usable Perl variable,
923characters that are not part of the syntax for variables are
924translated to underscores. For example, "--fpp-struct-return" will set
925the variable $opt_fpp_struct_return. Note that this variable resides
926in the namespace of the calling program, not necessarily B<main>.
927For example:
928
02a7d5cb 929 GetOptions ("size=i", "sizes=i@");
404cbe93 930
931with command line "-size 10 -sizes 24 -sizes 48" will perform the
932equivalent of the assignments
933
934 $opt_size = 10;
935 @opt_sizes = (24, 48);
936
937A lone dash B<-> is considered an option, the corresponding Perl
938identifier is $opt_ .
939
940The linkage specifier can be a reference to a scalar, a reference to
381319f7 941an array, a reference to a hash or a reference to a subroutine.
404cbe93 942
943If a REF SCALAR is supplied, the new value is stored in the referenced
944variable. If the option occurs more than once, the previous value is
945overwritten.
946
947If a REF ARRAY is supplied, the new value is appended (pushed) to the
948referenced array.
949
381319f7 950If a REF HASH is supplied, the option value should look like "key" or
951"key=value" (if the "=value" is omitted then a value of 1 is implied).
952In this case, the element of the referenced hash with the key "key"
953is assigned "value".
954
404cbe93 955If a REF CODE is supplied, the referenced subroutine is called with
956two arguments: the option name and the option value.
957The option name is always the true name, not an abbreviation or alias.
f06db76b 958
404cbe93 959=head2 Aliases and abbreviations
f06db76b 960
961The option name may actually be a list of option names, separated by
404cbe93 962"|"s, e.g. "foo|bar|blech=s". In this example, "foo" is the true name
5f05dabc 963of this option. If no linkage is specified, options "foo", "bar" and
bb40d378 964"blech" all will set $opt_foo. For convenience, the single character
965"?" is allowed as an alias, e.g. "help|?".
f06db76b 966
967Option names may be abbreviated to uniqueness, depending on
a11f5414 968configuration option B<auto_abbrev>.
f06db76b 969
404cbe93 970=head2 Non-option call-back routine
f06db76b 971
5f05dabc 972A special option specifier, E<lt>E<gt>, can be used to designate a subroutine
404cbe93 973to handle non-option arguments. GetOptions will immediately call this
974subroutine for every non-option it encounters in the options list.
975This subroutine gets the name of the non-option passed.
a11f5414 976This feature requires configuration option B<permute>, see section
977CONFIGURATION OPTIONS.
978
404cbe93 979See also the examples.
f06db76b 980
404cbe93 981=head2 Option starters
f06db76b 982
404cbe93 983On the command line, options can start with B<-> (traditional), B<-->
984(POSIX) and B<+> (GNU, now being phased out). The latter is not
985allowed if the environment variable B<POSIXLY_CORRECT> has been
986defined.
f06db76b 987
988Options that start with "--" may have an argument appended, separated
989with an "=", e.g. "--foo=bar".
990
bb40d378 991=head2 Return values and Errors
992
993Configuration errors and errors in the option definitions are
994signalled using C<die()> and will terminate the calling
995program unless the call to C<Getopt::Long::GetOptions()> was embedded
996in C<eval { ... }> or C<die()> was trapped using C<$SIG{__DIE__}>.
997
998A return value of 1 (true) indicates success.
f06db76b 999
bb40d378 1000A return status of 0 (false) indicates that the function detected one
1001or more errors during option parsing. These errors are signalled using
1002C<warn()> and can be trapped with C<$SIG{__WARN__}>.
1003
1004Errors that can't happen are signalled using C<Carp::croak()>.
f06db76b 1005
404cbe93 1006=head1 COMPATIBILITY
1007
1008Getopt::Long::GetOptions() is the successor of
1009B<newgetopt.pl> that came with Perl 4. It is fully upward compatible.
1010In fact, the Perl 5 version of newgetopt.pl is just a wrapper around
1011the module.
1012
1013If an "@" sign is appended to the argument specifier, the option is
381319f7 1014treated as an array. Value(s) are not set, but pushed into array
1015@opt_name. If explicit linkage is supplied, this must be a reference
1016to an ARRAY.
1017
1018If an "%" sign is appended to the argument specifier, the option is
1019treated as a hash. Value(s) of the form "name=value" are set by
1020setting the element of the hash %opt_name with key "name" to "value"
1021(if the "=value" portion is omitted it defaults to 1). If explicit
1022linkage is supplied, this must be a reference to a HASH.
404cbe93 1023
a11f5414 1024If configuration option B<getopt_compat> is set (see section
1025CONFIGURATION OPTIONS), options that start with "+" or "-" may also
1026include their arguments, e.g. "+foo=bar". This is for compatiblity
1027with older implementations of the GNU "getopt" routine.
404cbe93 1028
bb40d378 1029If the first argument to GetOptions is a string consisting of only
1030non-alphanumeric characters, it is taken to specify the option starter
1031characters. Everything starting with one of these characters from the
1032starter will be considered an option. B<Using a starter argument is
1033strongly deprecated.>
a11f5414 1034
bb40d378 1035For convenience, option specifiers may have a leading B<-> or B<-->,
1036so it is possible to write:
a11f5414 1037
bb40d378 1038 GetOptions qw(-foo=s --bar=i --ar=s);
a11f5414 1039
bb40d378 1040=head1 EXAMPLES
a11f5414 1041
bb40d378 1042If the option specifier is "one:i" (i.e. takes an optional integer
1043argument), then the following situations are handled:
381319f7 1044
bb40d378 1045 -one -two -> $opt_one = '', -two is next option
1046 -one -2 -> $opt_one = -2
f06db76b 1047
bb40d378 1048Also, assume specifiers "foo=s" and "bar:s" :
f06db76b 1049
bb40d378 1050 -bar -xxx -> $opt_bar = '', '-xxx' is next option
1051 -foo -bar -> $opt_foo = '-bar'
1052 -foo -- -> $opt_foo = '--'
f06db76b 1053
bb40d378 1054In GNU or POSIX format, option names and values can be combined:
a0d0e21e 1055
bb40d378 1056 +foo=blech -> $opt_foo = 'blech'
1057 --bar= -> $opt_bar = ''
1058 --bar=-- -> $opt_bar = '--'
a0d0e21e 1059
bb40d378 1060Example of using variable references:
404cbe93 1061
bb40d378 1062 $ret = GetOptions ('foo=s', \$foo, 'bar=i', 'ar=s', \@ar);
404cbe93 1063
bb40d378 1064With command line options "-foo blech -bar 24 -ar xx -ar yy"
1065this will result in:
a0d0e21e 1066
bb40d378 1067 $foo = 'blech'
1068 $opt_bar = 24
1069 @ar = ('xx','yy')
a11f5414 1070
bb40d378 1071Example of using the E<lt>E<gt> option specifier:
a0d0e21e 1072
bb40d378 1073 @ARGV = qw(-foo 1 bar -foo 2 blech);
1074 GetOptions("foo=i", \$myfoo, "<>", \&mysub);
a0d0e21e 1075
bb40d378 1076Results:
a0d0e21e 1077
bb40d378 1078 mysub("bar") will be called (with $myfoo being 1)
1079 mysub("blech") will be called (with $myfoo being 2)
a0d0e21e 1080
bb40d378 1081Compare this with:
a0d0e21e 1082
bb40d378 1083 @ARGV = qw(-foo 1 bar -foo 2 blech);
1084 GetOptions("foo=i", \$myfoo);
a11f5414 1085
bb40d378 1086This will leave the non-options in @ARGV:
404cbe93 1087
bb40d378 1088 $myfoo -> 2
1089 @ARGV -> qw(bar blech)
381319f7 1090
bb40d378 1091=head1 CONFIGURATION OPTIONS
a0d0e21e 1092
bb40d378 1093B<GetOptions> can be configured by calling subroutine
1094B<Getopt::Long::config>. This subroutine takes a list of quoted
1095strings, each specifying a configuration option to be set, e.g.
1096B<ignore_case>. Options can be reset by prefixing with B<no_>, e.g.
1097B<no_ignore_case>. Case does not matter. Multiple calls to B<config>
1098are possible.
a0d0e21e 1099
bb40d378 1100Previous versions of Getopt::Long used variables for the purpose of
1101configuring. Although manipulating these variables still work, it
1102is strongly encouraged to use the new B<config> routine. Besides, it
1103is much easier.
404cbe93 1104
bb40d378 1105The following options are available:
404cbe93 1106
bb40d378 1107=over 12
a0d0e21e 1108
bb40d378 1109=item default
a0d0e21e 1110
bb40d378 1111This option causes all configuration options to be reset to their
1112default values.
404cbe93 1113
bb40d378 1114=item auto_abbrev
404cbe93 1115
bb40d378 1116Allow option names to be abbreviated to uniqueness.
1117Default is set unless environment variable
1118POSIXLY_CORRECT has been set, in which case B<auto_abbrev> is reset.
404cbe93 1119
bb40d378 1120=item getopt_compat
a0d0e21e 1121
bb40d378 1122Allow '+' to start options.
1123Default is set unless environment variable
1124POSIXLY_CORRECT has been set, in which case B<getopt_compat> is reset.
88e49c4e 1125
bb40d378 1126=item require_order
404cbe93 1127
bb40d378 1128Whether non-options are allowed to be mixed with
1129options.
1130Default is set unless environment variable
1131POSIXLY_CORRECT has been set, in which case b<require_order> is reset.
404cbe93 1132
bb40d378 1133See also B<permute>, which is the opposite of B<require_order>.
a0d0e21e 1134
bb40d378 1135=item permute
404cbe93 1136
bb40d378 1137Whether non-options are allowed to be mixed with
1138options.
1139Default is set unless environment variable
1140POSIXLY_CORRECT has been set, in which case B<permute> is reset.
1141Note that B<permute> is the opposite of B<require_order>.
a0d0e21e 1142
bb40d378 1143If B<permute> is set, this means that
a0d0e21e 1144
bb40d378 1145 -foo arg1 -bar arg2 arg3
a0d0e21e 1146
bb40d378 1147is equivalent to
a0d0e21e 1148
bb40d378 1149 -foo -bar arg1 arg2 arg3
a0d0e21e 1150
bb40d378 1151If a non-option call-back routine is specified, @ARGV will always be
1152empty upon succesful return of GetOptions since all options have been
1153processed, except when B<--> is used:
a0d0e21e 1154
bb40d378 1155 -foo arg1 -bar arg2 -- arg3
404cbe93 1156
bb40d378 1157will call the call-back routine for arg1 and arg2, and terminate
1158leaving arg2 in @ARGV.
381319f7 1159
bb40d378 1160If B<require_order> is set, options processing
1161terminates when the first non-option is encountered.
a0d0e21e 1162
bb40d378 1163 -foo arg1 -bar arg2 arg3
381319f7 1164
bb40d378 1165is equivalent to
381319f7 1166
bb40d378 1167 -foo -- arg1 -bar arg2 arg3
404cbe93 1168
bb40d378 1169=item bundling (default: reset)
404cbe93 1170
bb40d378 1171Setting this variable to a non-zero value will allow single-character
1172options to be bundled. To distinguish bundles from long option names,
1173long options must be introduced with B<--> and single-character
1174options (and bundles) with B<->. For example,
a0d0e21e 1175
bb40d378 1176 ps -vax --vax
381319f7 1177
bb40d378 1178would be equivalent to
381319f7 1179
bb40d378 1180 ps -v -a -x --vax
381319f7 1181
bb40d378 1182provided "vax", "v", "a" and "x" have been defined to be valid
1183options.
1184
1185Bundled options can also include a value in the bundle; for strings
1186this value is the rest of the bundle, but integer and floating values
1187may be combined in the bundle, e.g.
1188
1189 scale -h24w80
1190
1191is equivalent to
a11f5414 1192
bb40d378 1193 scale -h 24 -w 80
a11f5414 1194
bb40d378 1195Note: resetting B<bundling> also resets B<bundling_override>.
a11f5414 1196
bb40d378 1197=item bundling_override (default: reset)
381319f7 1198
bb40d378 1199If B<bundling_override> is set, bundling is enabled as with
1200B<bundling> but now long option names override option bundles. In the
1201above example, B<-vax> would be interpreted as the option "vax", not
1202the bundle "v", "a", "x".
381319f7 1203
bb40d378 1204Note: resetting B<bundling_override> also resets B<bundling>.
381319f7 1205
bb40d378 1206B<Note:> Using option bundling can easily lead to unexpected results,
1207especially when mixing long options and bundles. Caveat emptor.
381319f7 1208
bb40d378 1209=item ignore_case (default: set)
381319f7 1210
bb40d378 1211If set, case is ignored when matching options.
381319f7 1212
bb40d378 1213Note: resetting B<ignore_case> also resets B<ignore_case_always>.
381319f7 1214
bb40d378 1215=item ignore_case_always (default: reset)
a11f5414 1216
bb40d378 1217When bundling is in effect, case is ignored on single-character
1218options also.
381319f7 1219
bb40d378 1220Note: resetting B<ignore_case_always> also resets B<ignore_case>.
381319f7 1221
bb40d378 1222=item pass_through (default: reset)
a0d0e21e 1223
bb40d378 1224Unknown options are passed through in @ARGV instead of being flagged
1225as errors. This makes it possible to write wrapper scripts that
1226process only part of the user supplied options, and passes the
1227remaining options to some other program.
a0d0e21e 1228
bb40d378 1229This can be very confusing, especially when B<permute> is also set.
16c18a90 1230
bb40d378 1231=item debug (default: reset)
a0d0e21e 1232
bb40d378 1233Enable copious debugging output.
a0d0e21e 1234
bb40d378 1235=back
a0d0e21e 1236
bb40d378 1237=head1 OTHER USEFUL VARIABLES
381319f7 1238
bb40d378 1239=over 12
a0d0e21e 1240
bb40d378 1241=item $Getopt::Long::VERSION
a0d0e21e 1242
bb40d378 1243The version number of this Getopt::Long implementation in the format
1244C<major>.C<minor>. This can be used to have Exporter check the
1245version, e.g.
a0d0e21e 1246
bb40d378 1247 use Getopt::Long 3.00;
a0d0e21e 1248
bb40d378 1249You can inspect $Getopt::Long::major_version and
1250$Getopt::Long::minor_version for the individual components.
a0d0e21e 1251
bb40d378 1252=item $Getopt::Long::error
a0d0e21e 1253
bb40d378 1254Internal error flag. May be incremented from a call-back routine to
1255cause options parsing to fail.
a0d0e21e 1256
bb40d378 1257=back
a0d0e21e 1258
bb40d378 1259=head1 AUTHOR
a11f5414 1260
bb40d378 1261Johan Vromans E<lt>jvromans@squirrel.nlE<gt>
a11f5414 1262
bb40d378 1263=head1 COPYRIGHT AND DISCLAIMER
a11f5414 1264
bb40d378 1265This program is Copyright 1990,1997 by Johan Vromans.
1266This program is free software; you can redistribute it and/or
1267modify it under the terms of the GNU General Public License
1268as published by the Free Software Foundation; either version 2
1269of the License, or (at your option) any later version.
a11f5414 1270
bb40d378 1271This program is distributed in the hope that it will be useful,
1272but WITHOUT ANY WARRANTY; without even the implied warranty of
1273MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1274GNU General Public License for more details.
a0d0e21e 1275
bb40d378 1276If you do not have a copy of the GNU General Public License write to
1277the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
1278MA 02139, USA.
a0d0e21e 1279
bb40d378 1280=cut