ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/staticperl/perl/lib/Getopt/Long.pm
Revision: 1.1
Committed: Thu Jun 30 14:27:12 2005 UTC (21 years, 4 months ago) by root
Branch: MAIN
CVS Tags: HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 # Getopt::Long.pm -- Universal options parsing
2    
3     package Getopt::Long;
4    
5     # RCS Status : $Id: GetoptLong.pm,v 2.68 2003-09-23 15:24:53+02 jv Exp $
6     # Author : Johan Vromans
7     # Created On : Tue Sep 11 15:00:12 1990
8     # Last Modified By: Johan Vromans
9     # Last Modified On: Tue Sep 23 15:21:23 2003
10     # Update Count : 1364
11     # Status : Released
12    
13     ################ Copyright ################
14    
15     # This program is Copyright 1990,2002 by Johan Vromans.
16     # This program is free software; you can redistribute it and/or
17     # modify it under the terms of the Perl Artistic License or the
18     # GNU General Public License as published by the Free Software
19     # Foundation; either version 2 of the License, or (at your option) any
20     # later version.
21     #
22     # This program is distributed in the hope that it will be useful,
23     # but WITHOUT ANY WARRANTY; without even the implied warranty of
24     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25     # GNU General Public License for more details.
26     #
27     # If you do not have a copy of the GNU General Public License write to
28     # the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
29     # MA 02139, USA.
30    
31     ################ Module Preamble ################
32    
33     use 5.004;
34    
35     use strict;
36    
37     use vars qw($VERSION);
38     $VERSION = 2.34;
39     # For testing versions only.
40     #use vars qw($VERSION_STRING);
41     #$VERSION_STRING = "2.33_03";
42    
43     use Exporter;
44     use vars qw(@ISA @EXPORT @EXPORT_OK);
45     @ISA = qw(Exporter);
46    
47     # Exported subroutines.
48     sub GetOptions(@); # always
49     sub Configure(@); # on demand
50     sub HelpMessage(@); # on demand
51     sub VersionMessage(@); # in demand
52    
53     BEGIN {
54     # Init immediately so their contents can be used in the 'use vars' below.
55     @EXPORT = qw(&GetOptions $REQUIRE_ORDER $PERMUTE $RETURN_IN_ORDER);
56     @EXPORT_OK = qw(&HelpMessage &VersionMessage &Configure);
57     }
58    
59     # User visible variables.
60     use vars @EXPORT, @EXPORT_OK;
61     use vars qw($error $debug $major_version $minor_version);
62     # Deprecated visible variables.
63     use vars qw($autoabbrev $getopt_compat $ignorecase $bundling $order
64     $passthrough);
65     # Official invisible variables.
66     use vars qw($genprefix $caller $gnu_compat $auto_help $auto_version);
67    
68     # Public subroutines.
69     sub config(@); # deprecated name
70    
71     # Private subroutines.
72     sub ConfigDefaults();
73     sub ParseOptionSpec($$);
74     sub OptCtl($);
75     sub FindOption($$$$);
76    
77     ################ Local Variables ################
78    
79     # $requested_version holds the version that was mentioned in the 'use'
80     # or 'require', if any. It can be used to enable or disable specific
81     # features.
82     my $requested_version = 0;
83    
84     ################ Resident subroutines ################
85    
86     sub ConfigDefaults() {
87     # Handle POSIX compliancy.
88     if ( defined $ENV{"POSIXLY_CORRECT"} ) {
89     $genprefix = "(--|-)";
90     $autoabbrev = 0; # no automatic abbrev of options
91     $bundling = 0; # no bundling of single letter switches
92     $getopt_compat = 0; # disallow '+' to start options
93     $order = $REQUIRE_ORDER;
94     }
95     else {
96     $genprefix = "(--|-|\\+)";
97     $autoabbrev = 1; # automatic abbrev of options
98     $bundling = 0; # bundling off by default
99     $getopt_compat = 1; # allow '+' to start options
100     $order = $PERMUTE;
101     }
102     # Other configurable settings.
103     $debug = 0; # for debugging
104     $error = 0; # error tally
105     $ignorecase = 1; # ignore case when matching options
106     $passthrough = 0; # leave unrecognized options alone
107     $gnu_compat = 0; # require --opt=val if value is optional
108     }
109    
110     # Override import.
111     sub import {
112     my $pkg = shift; # package
113     my @syms = (); # symbols to import
114     my @config = (); # configuration
115     my $dest = \@syms; # symbols first
116     for ( @_ ) {
117     if ( $_ eq ':config' ) {
118     $dest = \@config; # config next
119     next;
120     }
121     push(@$dest, $_); # push
122     }
123     # Hide one level and call super.
124     local $Exporter::ExportLevel = 1;
125     push(@syms, qw(&GetOptions)) if @syms; # always export GetOptions
126     $pkg->SUPER::import(@syms);
127     # And configure.
128     Configure(@config) if @config;
129     }
130    
131     ################ Initialization ################
132    
133     # Values for $order. See GNU getopt.c for details.
134     ($REQUIRE_ORDER, $PERMUTE, $RETURN_IN_ORDER) = (0..2);
135     # Version major/minor numbers.
136     ($major_version, $minor_version) = $VERSION =~ /^(\d+)\.(\d+)/;
137    
138     ConfigDefaults();
139    
140     ################ OO Interface ################
141    
142     package Getopt::Long::Parser;
143    
144     # Store a copy of the default configuration. Since ConfigDefaults has
145     # just been called, what we get from Configure is the default.
146     my $default_config = do {
147     Getopt::Long::Configure ()
148     };
149    
150     sub new {
151     my $that = shift;
152     my $class = ref($that) || $that;
153     my %atts = @_;
154    
155     # Register the callers package.
156     my $self = { caller_pkg => (caller)[0] };
157    
158     bless ($self, $class);
159    
160     # Process config attributes.
161     if ( defined $atts{config} ) {
162     my $save = Getopt::Long::Configure ($default_config, @{$atts{config}});
163     $self->{settings} = Getopt::Long::Configure ($save);
164     delete ($atts{config});
165     }
166     # Else use default config.
167     else {
168     $self->{settings} = $default_config;
169     }
170    
171     if ( %atts ) { # Oops
172     die(__PACKAGE__.": unhandled attributes: ".
173     join(" ", sort(keys(%atts)))."\n");
174     }
175    
176     $self;
177     }
178    
179     sub configure {
180     my ($self) = shift;
181    
182     # Restore settings, merge new settings in.
183     my $save = Getopt::Long::Configure ($self->{settings}, @_);
184    
185     # Restore orig config and save the new config.
186     $self->{settings} = Getopt::Long::Configure ($save);
187     }
188    
189     sub getoptions {
190     my ($self) = shift;
191    
192     # Restore config settings.
193     my $save = Getopt::Long::Configure ($self->{settings});
194    
195     # Call main routine.
196     my $ret = 0;
197     $Getopt::Long::caller = $self->{caller_pkg};
198    
199     eval {
200     # Locally set exception handler to default, otherwise it will
201     # be called implicitly here, and again explicitly when we try
202     # to deliver the messages.
203     local ($SIG{__DIE__}) = '__DEFAULT__';
204     $ret = Getopt::Long::GetOptions (@_);
205     };
206    
207     # Restore saved settings.
208     Getopt::Long::Configure ($save);
209    
210     # Handle errors and return value.
211     die ($@) if $@;
212     return $ret;
213     }
214    
215     package Getopt::Long;
216    
217     ################ Back to Normal ################
218    
219     # Indices in option control info.
220     # Note that ParseOptions uses the fields directly. Search for 'hard-wired'.
221     use constant CTL_TYPE => 0;
222     #use constant CTL_TYPE_FLAG => '';
223     #use constant CTL_TYPE_NEG => '!';
224     #use constant CTL_TYPE_INCR => '+';
225     #use constant CTL_TYPE_INT => 'i';
226     #use constant CTL_TYPE_INTINC => 'I';
227     #use constant CTL_TYPE_XINT => 'o';
228     #use constant CTL_TYPE_FLOAT => 'f';
229     #use constant CTL_TYPE_STRING => 's';
230    
231     use constant CTL_CNAME => 1;
232    
233     use constant CTL_MAND => 2;
234    
235     use constant CTL_DEST => 3;
236     use constant CTL_DEST_SCALAR => 0;
237     use constant CTL_DEST_ARRAY => 1;
238     use constant CTL_DEST_HASH => 2;
239     use constant CTL_DEST_CODE => 3;
240    
241     use constant CTL_DEFAULT => 4;
242    
243     # FFU.
244     #use constant CTL_RANGE => ;
245     #use constant CTL_REPEAT => ;
246    
247     sub GetOptions(@) {
248    
249     my @optionlist = @_; # local copy of the option descriptions
250     my $argend = '--'; # option list terminator
251     my %opctl = (); # table of option specs
252     my $pkg = $caller || (caller)[0]; # current context
253     # Needed if linkage is omitted.
254     my @ret = (); # accum for non-options
255     my %linkage; # linkage
256     my $userlinkage; # user supplied HASH
257     my $opt; # current option
258     my $prefix = $genprefix; # current prefix
259    
260     $error = '';
261    
262     if ( $debug ) {
263     # Avoid some warnings if debugging.
264     local ($^W) = 0;
265     print STDERR
266     ("Getopt::Long $Getopt::Long::VERSION (",
267     '$Revision: 2.68 $', ") ",
268     "called from package \"$pkg\".",
269     "\n ",
270     "ARGV: (@ARGV)",
271     "\n ",
272     "autoabbrev=$autoabbrev,".
273     "bundling=$bundling,",
274     "getopt_compat=$getopt_compat,",
275     "gnu_compat=$gnu_compat,",
276     "order=$order,",
277     "\n ",
278     "ignorecase=$ignorecase,",
279     "requested_version=$requested_version,",
280     "passthrough=$passthrough,",
281     "genprefix=\"$genprefix\".",
282     "\n");
283     }
284    
285     # Check for ref HASH as first argument.
286     # First argument may be an object. It's OK to use this as long
287     # as it is really a hash underneath.
288     $userlinkage = undef;
289     if ( @optionlist && ref($optionlist[0]) and
290     "$optionlist[0]" =~ /^(?:.*\=)?HASH\([^\(]*\)$/ ) {
291     $userlinkage = shift (@optionlist);
292     print STDERR ("=> user linkage: $userlinkage\n") if $debug;
293     }
294    
295     # See if the first element of the optionlist contains option
296     # starter characters.
297     # Be careful not to interpret '<>' as option starters.
298     if ( @optionlist && $optionlist[0] =~ /^\W+$/
299     && !($optionlist[0] eq '<>'
300     && @optionlist > 0
301     && ref($optionlist[1])) ) {
302     $prefix = shift (@optionlist);
303     # Turn into regexp. Needs to be parenthesized!
304     $prefix =~ s/(\W)/\\$1/g;
305     $prefix = "([" . $prefix . "])";
306     print STDERR ("=> prefix=\"$prefix\"\n") if $debug;
307     }
308    
309     # Verify correctness of optionlist.
310     %opctl = ();
311     while ( @optionlist ) {
312     my $opt = shift (@optionlist);
313    
314     # Strip leading prefix so people can specify "--foo=i" if they like.
315     $opt = $+ if $opt =~ /^$prefix+(.*)$/s;
316    
317     if ( $opt eq '<>' ) {
318     if ( (defined $userlinkage)
319     && !(@optionlist > 0 && ref($optionlist[0]))
320     && (exists $userlinkage->{$opt})
321     && ref($userlinkage->{$opt}) ) {
322     unshift (@optionlist, $userlinkage->{$opt});
323     }
324     unless ( @optionlist > 0
325     && ref($optionlist[0]) && ref($optionlist[0]) eq 'CODE' ) {
326     $error .= "Option spec <> requires a reference to a subroutine\n";
327     # Kill the linkage (to avoid another error).
328     shift (@optionlist)
329     if @optionlist && ref($optionlist[0]);
330     next;
331     }
332     $linkage{'<>'} = shift (@optionlist);
333     next;
334     }
335    
336     # Parse option spec.
337     my ($name, $orig) = ParseOptionSpec ($opt, \%opctl);
338     unless ( defined $name ) {
339     # Failed. $orig contains the error message. Sorry for the abuse.
340     $error .= $orig;
341     # Kill the linkage (to avoid another error).
342     shift (@optionlist)
343     if @optionlist && ref($optionlist[0]);
344     next;
345     }
346    
347     # If no linkage is supplied in the @optionlist, copy it from
348     # the userlinkage if available.
349     if ( defined $userlinkage ) {
350     unless ( @optionlist > 0 && ref($optionlist[0]) ) {
351     if ( exists $userlinkage->{$orig} &&
352     ref($userlinkage->{$orig}) ) {
353     print STDERR ("=> found userlinkage for \"$orig\": ",
354     "$userlinkage->{$orig}\n")
355     if $debug;
356     unshift (@optionlist, $userlinkage->{$orig});
357     }
358     else {
359     # Do nothing. Being undefined will be handled later.
360     next;
361     }
362     }
363     }
364    
365     # Copy the linkage. If omitted, link to global variable.
366     if ( @optionlist > 0 && ref($optionlist[0]) ) {
367     print STDERR ("=> link \"$orig\" to $optionlist[0]\n")
368     if $debug;
369     my $rl = ref($linkage{$orig} = shift (@optionlist));
370    
371     if ( $rl eq "ARRAY" ) {
372     $opctl{$name}[CTL_DEST] = CTL_DEST_ARRAY;
373     }
374     elsif ( $rl eq "HASH" ) {
375     $opctl{$name}[CTL_DEST] = CTL_DEST_HASH;
376     }
377     elsif ( $rl eq "SCALAR" ) {
378     # if ( $opctl{$name}[CTL_DEST] == CTL_DEST_ARRAY ) {
379     # my $t = $linkage{$orig};
380     # $$t = $linkage{$orig} = [];
381     # }
382     # elsif ( $opctl{$name}[CTL_DEST] == CTL_DEST_HASH ) {
383     # }
384     # else {
385     # Ok.
386     # }
387     }
388     elsif ( $rl eq "CODE" ) {
389     # Ok.
390     }
391     else {
392     $error .= "Invalid option linkage for \"$opt\"\n";
393     }
394     }
395     else {
396     # Link to global $opt_XXX variable.
397     # Make sure a valid perl identifier results.
398     my $ov = $orig;
399     $ov =~ s/\W/_/g;
400     if ( $opctl{$name}[CTL_DEST] == CTL_DEST_ARRAY ) {
401     print STDERR ("=> link \"$orig\" to \@$pkg","::opt_$ov\n")
402     if $debug;
403     eval ("\$linkage{\$orig} = \\\@".$pkg."::opt_$ov;");
404     }
405     elsif ( $opctl{$name}[CTL_DEST] == CTL_DEST_HASH ) {
406     print STDERR ("=> link \"$orig\" to \%$pkg","::opt_$ov\n")
407     if $debug;
408     eval ("\$linkage{\$orig} = \\\%".$pkg."::opt_$ov;");
409     }
410     else {
411     print STDERR ("=> link \"$orig\" to \$$pkg","::opt_$ov\n")
412     if $debug;
413     eval ("\$linkage{\$orig} = \\\$".$pkg."::opt_$ov;");
414     }
415     }
416     }
417    
418     # Bail out if errors found.
419     die ($error) if $error;
420     $error = 0;
421    
422     # Supply --version and --help support, if needed and allowed.
423     if ( defined($auto_version) ? $auto_version : ($requested_version >= 2.3203) ) {
424     if ( !defined($opctl{version}) ) {
425     $opctl{version} = ['','version',0,CTL_DEST_CODE,undef];
426     $linkage{version} = \&VersionMessage;
427     }
428     $auto_version = 1;
429     }
430     if ( defined($auto_help) ? $auto_help : ($requested_version >= 2.3203) ) {
431     if ( !defined($opctl{help}) && !defined($opctl{'?'}) ) {
432     $opctl{help} = $opctl{'?'} = ['','help',0,CTL_DEST_CODE,undef];
433     $linkage{help} = \&HelpMessage;
434     }
435     $auto_help = 1;
436     }
437    
438     # Show the options tables if debugging.
439     if ( $debug ) {
440     my ($arrow, $k, $v);
441     $arrow = "=> ";
442     while ( ($k,$v) = each(%opctl) ) {
443     print STDERR ($arrow, "\$opctl{$k} = $v ", OptCtl($v), "\n");
444     $arrow = " ";
445     }
446     }
447    
448     # Process argument list
449     my $goon = 1;
450     while ( $goon && @ARGV > 0 ) {
451    
452     # Get next argument.
453     $opt = shift (@ARGV);
454     print STDERR ("=> arg \"", $opt, "\"\n") if $debug;
455    
456     # Double dash is option list terminator.
457     if ( $opt eq $argend ) {
458     push (@ret, $argend) if $passthrough;
459     last;
460     }
461    
462     # Look it up.
463     my $tryopt = $opt;
464     my $found; # success status
465     my $key; # key (if hash type)
466     my $arg; # option argument
467     my $ctl; # the opctl entry
468    
469     ($found, $opt, $ctl, $arg, $key) =
470     FindOption ($prefix, $argend, $opt, \%opctl);
471    
472     if ( $found ) {
473    
474     # FindOption undefines $opt in case of errors.
475     next unless defined $opt;
476    
477     if ( defined $arg ) {
478    
479     # Get the canonical name.
480     print STDERR ("=> cname for \"$opt\" is ") if $debug;
481     $opt = $ctl->[CTL_CNAME];
482     print STDERR ("\"$ctl->[CTL_CNAME]\"\n") if $debug;
483    
484     if ( defined $linkage{$opt} ) {
485     print STDERR ("=> ref(\$L{$opt}) -> ",
486     ref($linkage{$opt}), "\n") if $debug;
487    
488     if ( ref($linkage{$opt}) eq 'SCALAR' ) {
489     if ( $ctl->[CTL_TYPE] eq '+' ) {
490     print STDERR ("=> \$\$L{$opt} += \"$arg\"\n")
491     if $debug;
492     if ( defined ${$linkage{$opt}} ) {
493     ${$linkage{$opt}} += $arg;
494     }
495     else {
496     ${$linkage{$opt}} = $arg;
497     }
498     }
499     elsif ( $ctl->[CTL_DEST] == CTL_DEST_ARRAY ) {
500     print STDERR ("=> ref(\$L{$opt}) auto-vivified",
501     " to ARRAY\n")
502     if $debug;
503     my $t = $linkage{$opt};
504     $$t = $linkage{$opt} = [];
505     print STDERR ("=> push(\@{\$L{$opt}, \"$arg\")\n")
506     if $debug;
507     push (@{$linkage{$opt}}, $arg);
508     }
509     elsif ( $ctl->[CTL_DEST] == CTL_DEST_HASH ) {
510     print STDERR ("=> ref(\$L{$opt}) auto-vivified",
511     " to HASH\n")
512     if $debug;
513     my $t = $linkage{$opt};
514     $$t = $linkage{$opt} = {};
515     print STDERR ("=> \$\$L{$opt}->{$key} = \"$arg\"\n")
516     if $debug;
517     $linkage{$opt}->{$key} = $arg;
518     }
519     else {
520     print STDERR ("=> \$\$L{$opt} = \"$arg\"\n")
521     if $debug;
522     ${$linkage{$opt}} = $arg;
523     }
524     }
525     elsif ( ref($linkage{$opt}) eq 'ARRAY' ) {
526     print STDERR ("=> push(\@{\$L{$opt}, \"$arg\")\n")
527     if $debug;
528     push (@{$linkage{$opt}}, $arg);
529     }
530     elsif ( ref($linkage{$opt}) eq 'HASH' ) {
531     print STDERR ("=> \$\$L{$opt}->{$key} = \"$arg\"\n")
532     if $debug;
533     $linkage{$opt}->{$key} = $arg;
534     }
535     elsif ( ref($linkage{$opt}) eq 'CODE' ) {
536     print STDERR ("=> &L{$opt}(\"$opt\"",
537     $ctl->[CTL_DEST] == CTL_DEST_HASH ? ", \"$key\"" : "",
538     ", \"$arg\")\n")
539     if $debug;
540     my $eval_error = do {
541     local $@;
542     local $SIG{__DIE__} = '__DEFAULT__';
543     eval {
544     &{$linkage{$opt}}($opt,
545     $ctl->[CTL_DEST] == CTL_DEST_HASH ? ($key) : (),
546     $arg);
547     };
548     $@;
549     };
550     print STDERR ("=> die($eval_error)\n")
551     if $debug && $eval_error ne '';
552     if ( $eval_error =~ /^!/ ) {
553     if ( $eval_error =~ /^!FINISH\b/ ) {
554     $goon = 0;
555     }
556     }
557     elsif ( $eval_error ne '' ) {
558     warn ($eval_error);
559     $error++;
560     }
561     }
562     else {
563     print STDERR ("Invalid REF type \"", ref($linkage{$opt}),
564     "\" in linkage\n");
565     die("Getopt::Long -- internal error!\n");
566     }
567     }
568     # No entry in linkage means entry in userlinkage.
569     elsif ( $ctl->[CTL_DEST] == CTL_DEST_ARRAY ) {
570     if ( defined $userlinkage->{$opt} ) {
571     print STDERR ("=> push(\@{\$L{$opt}}, \"$arg\")\n")
572     if $debug;
573     push (@{$userlinkage->{$opt}}, $arg);
574     }
575     else {
576     print STDERR ("=>\$L{$opt} = [\"$arg\"]\n")
577     if $debug;
578     $userlinkage->{$opt} = [$arg];
579     }
580     }
581     elsif ( $ctl->[CTL_DEST] == CTL_DEST_HASH ) {
582     if ( defined $userlinkage->{$opt} ) {
583     print STDERR ("=> \$L{$opt}->{$key} = \"$arg\"\n")
584     if $debug;
585     $userlinkage->{$opt}->{$key} = $arg;
586     }
587     else {
588     print STDERR ("=>\$L{$opt} = {$key => \"$arg\"}\n")
589     if $debug;
590     $userlinkage->{$opt} = {$key => $arg};
591     }
592     }
593     else {
594     if ( $ctl->[CTL_TYPE] eq '+' ) {
595     print STDERR ("=> \$L{$opt} += \"$arg\"\n")
596     if $debug;
597     if ( defined $userlinkage->{$opt} ) {
598     $userlinkage->{$opt} += $arg;
599     }
600     else {
601     $userlinkage->{$opt} = $arg;
602     }
603     }
604     else {
605     print STDERR ("=>\$L{$opt} = \"$arg\"\n") if $debug;
606     $userlinkage->{$opt} = $arg;
607     }
608     }
609     }
610     }
611    
612     # Not an option. Save it if we $PERMUTE and don't have a <>.
613     elsif ( $order == $PERMUTE ) {
614     # Try non-options call-back.
615     my $cb;
616     if ( (defined ($cb = $linkage{'<>'})) ) {
617     print STDERR ("=> &L{$tryopt}(\"$tryopt\")\n")
618     if $debug;
619     my $eval_error = do {
620     local $@;
621     local $SIG{__DIE__} = '__DEFAULT__';
622     eval { &$cb ($tryopt) };
623     $@;
624     };
625     print STDERR ("=> die($eval_error)\n")
626     if $debug && $eval_error ne '';
627     if ( $eval_error =~ /^!/ ) {
628     if ( $eval_error =~ /^!FINISH\b/ ) {
629     $goon = 0;
630     }
631     }
632     elsif ( $eval_error ne '' ) {
633     warn ($eval_error);
634     $error++;
635     }
636     }
637     else {
638     print STDERR ("=> saving \"$tryopt\" ",
639     "(not an option, may permute)\n") if $debug;
640     push (@ret, $tryopt);
641     }
642     next;
643     }
644    
645     # ...otherwise, terminate.
646     else {
647     # Push this one back and exit.
648     unshift (@ARGV, $tryopt);
649     return ($error == 0);
650     }
651    
652     }
653    
654     # Finish.
655     if ( @ret && $order == $PERMUTE ) {
656     # Push back accumulated arguments
657     print STDERR ("=> restoring \"", join('" "', @ret), "\"\n")
658     if $debug;
659     unshift (@ARGV, @ret);
660     }
661    
662     return ($error == 0);
663     }
664    
665     # A readable representation of what's in an optbl.
666     sub OptCtl ($) {
667     my ($v) = @_;
668     my @v = map { defined($_) ? ($_) : ("<undef>") } @$v;
669     "[".
670     join(",",
671     "\"$v[CTL_TYPE]\"",
672     "\"$v[CTL_CNAME]\"",
673     $v[CTL_MAND] ? "O" : "M",
674     ("\$","\@","\%","\&")[$v[CTL_DEST] || 0],
675     "\"$v[CTL_DEFAULT]\"",
676     # $v[CTL_RANGE] || '',
677     # $v[CTL_REPEAT] || '',
678     ). "]";
679     }
680    
681     # Parse an option specification and fill the tables.
682     sub ParseOptionSpec ($$) {
683     my ($opt, $opctl) = @_;
684    
685     # Match option spec.
686     if ( $opt !~ m;^
687     (
688     # Option name
689     (?: \w+[-\w]* )
690     # Alias names, or "?"
691     (?: \| (?: \? | \w[-\w]* )? )*
692     )?
693     (
694     # Either modifiers ...
695     [!+]
696     |
697     # ... or a value/dest specification
698     [=:] [ionfs] [@%]?
699     |
700     # ... or an optional-with-default spec
701     : (?: -?\d+ | \+ ) [@%]?
702     )?
703     $;x ) {
704     return (undef, "Error in option spec: \"$opt\"\n");
705     }
706    
707     my ($names, $spec) = ($1, $2);
708     $spec = '' unless defined $spec;
709    
710     # $orig keeps track of the primary name the user specified.
711     # This name will be used for the internal or external linkage.
712     # In other words, if the user specifies "FoO|BaR", it will
713     # match any case combinations of 'foo' and 'bar', but if a global
714     # variable needs to be set, it will be $opt_FoO in the exact case
715     # as specified.
716     my $orig;
717    
718     my @names;
719     if ( defined $names ) {
720     @names = split (/\|/, $names);
721     $orig = $names[0];
722     }
723     else {
724     @names = ('');
725     $orig = '';
726     }
727    
728     # Construct the opctl entries.
729     my $entry;
730     if ( $spec eq '' || $spec eq '+' || $spec eq '!' ) {
731     # Fields are hard-wired here.
732     $entry = [$spec,$orig,0,CTL_DEST_SCALAR,undef];
733     }
734     elsif ( $spec =~ /:(-?\d+|\+)([@%])?/ ) {
735     my $def = $1;
736     my $dest = $2;
737     my $type = $def eq '+' ? 'I' : 'i';
738     $dest ||= '$';
739     $dest = $dest eq '@' ? CTL_DEST_ARRAY
740     : $dest eq '%' ? CTL_DEST_HASH : CTL_DEST_SCALAR;
741     # Fields are hard-wired here.
742     $entry = [$type,$orig,0,$dest,$def eq '+' ? undef : $def];
743     }
744     else {
745     my ($mand, $type, $dest) = $spec =~ /([=:])([ionfs])([@%])?/;
746     $type = 'i' if $type eq 'n';
747     $dest ||= '$';
748     $dest = $dest eq '@' ? CTL_DEST_ARRAY
749     : $dest eq '%' ? CTL_DEST_HASH : CTL_DEST_SCALAR;
750     # Fields are hard-wired here.
751     $entry = [$type,$orig,$mand eq '=',$dest,undef];
752     }
753    
754     # Process all names. First is canonical, the rest are aliases.
755     my $dups = '';
756     foreach ( @names ) {
757    
758     $_ = lc ($_)
759     if $ignorecase > (($bundling && length($_) == 1) ? 1 : 0);
760    
761     if ( exists $opctl->{$_} ) {
762     $dups .= "Duplicate specification \"$opt\" for option \"$_\"\n";
763     }
764    
765     if ( $spec eq '!' ) {
766     $opctl->{"no$_"} = $entry;
767     $opctl->{"no-$_"} = $entry;
768     $opctl->{$_} = [@$entry];
769     $opctl->{$_}->[CTL_TYPE] = '';
770     }
771     else {
772     $opctl->{$_} = $entry;
773     }
774     }
775    
776     if ( $dups && $^W ) {
777     foreach ( split(/\n+/, $dups) ) {
778     warn($_."\n");
779     }
780     }
781     ($names[0], $orig);
782     }
783    
784     # Option lookup.
785     sub FindOption ($$$$) {
786    
787     # returns (1, $opt, $ctl, $arg, $key) if okay,
788     # returns (1, undef) if option in error,
789     # returns (0) otherwise.
790    
791     my ($prefix, $argend, $opt, $opctl) = @_;
792    
793     print STDERR ("=> find \"$opt\"\n") if $debug;
794    
795     return (0) unless $opt =~ /^$prefix(.*)$/s;
796     return (0) if $opt eq "-" && !defined $opctl->{''};
797    
798     $opt = $+;
799     my $starter = $1;
800    
801     print STDERR ("=> split \"$starter\"+\"$opt\"\n") if $debug;
802    
803     my $optarg; # value supplied with --opt=value
804     my $rest; # remainder from unbundling
805    
806     # If it is a long option, it may include the value.
807     # With getopt_compat, only if not bundling.
808     if ( ($starter eq "--"
809     || ($getopt_compat && ($bundling == 0 || $bundling == 2)))
810     && $opt =~ /^([^=]+)=(.*)$/s ) {
811     $opt = $1;
812     $optarg = $2;
813     print STDERR ("=> option \"", $opt,
814     "\", optarg = \"$optarg\"\n") if $debug;
815     }
816    
817     #### Look it up ###
818    
819     my $tryopt = $opt; # option to try
820    
821     if ( $bundling && $starter eq '-' ) {
822    
823     # To try overrides, obey case ignore.
824     $tryopt = $ignorecase ? lc($opt) : $opt;
825    
826     # If bundling == 2, long options can override bundles.
827     if ( $bundling == 2 && length($tryopt) > 1
828     && defined ($opctl->{$tryopt}) ) {
829     print STDERR ("=> $starter$tryopt overrides unbundling\n")
830     if $debug;
831     }
832     else {
833     $tryopt = $opt;
834     # Unbundle single letter option.
835     $rest = length ($tryopt) > 0 ? substr ($tryopt, 1) : '';
836     $tryopt = substr ($tryopt, 0, 1);
837     $tryopt = lc ($tryopt) if $ignorecase > 1;
838     print STDERR ("=> $starter$tryopt unbundled from ",
839     "$starter$tryopt$rest\n") if $debug;
840     $rest = undef unless $rest ne '';
841     }
842     }
843    
844     # Try auto-abbreviation.
845     elsif ( $autoabbrev ) {
846     # Sort the possible long option names.
847     my @names = sort(keys (%$opctl));
848     # Downcase if allowed.
849     $opt = lc ($opt) if $ignorecase;
850     $tryopt = $opt;
851     # Turn option name into pattern.
852     my $pat = quotemeta ($opt);
853     # Look up in option names.
854     my @hits = grep (/^$pat/, @names);
855     print STDERR ("=> ", scalar(@hits), " hits (@hits) with \"$pat\" ",
856     "out of ", scalar(@names), "\n") if $debug;
857    
858     # Check for ambiguous results.
859     unless ( (@hits <= 1) || (grep ($_ eq $opt, @hits) == 1) ) {
860     # See if all matches are for the same option.
861     my %hit;
862     foreach ( @hits ) {
863     $_ = $opctl->{$_}->[CTL_CNAME]
864     if defined $opctl->{$_}->[CTL_CNAME];
865     $hit{$_} = 1;
866     }
867     # Remove auto-supplied options (version, help).
868     if ( keys(%hit) == 2 ) {
869     if ( $auto_version && exists($hit{version}) ) {
870     delete $hit{version};
871     }
872     elsif ( $auto_help && exists($hit{help}) ) {
873     delete $hit{help};
874     }
875     }
876     # Now see if it really is ambiguous.
877     unless ( keys(%hit) == 1 ) {
878     return (0) if $passthrough;
879     warn ("Option ", $opt, " is ambiguous (",
880     join(", ", @hits), ")\n");
881     $error++;
882     return (1, undef);
883     }
884     @hits = keys(%hit);
885     }
886    
887     # Complete the option name, if appropriate.
888     if ( @hits == 1 && $hits[0] ne $opt ) {
889     $tryopt = $hits[0];
890     $tryopt = lc ($tryopt) if $ignorecase;
891     print STDERR ("=> option \"$opt\" -> \"$tryopt\"\n")
892     if $debug;
893     }
894     }
895    
896     # Map to all lowercase if ignoring case.
897     elsif ( $ignorecase ) {
898     $tryopt = lc ($opt);
899     }
900    
901     # Check validity by fetching the info.
902     my $ctl = $opctl->{$tryopt};
903     unless ( defined $ctl ) {
904     return (0) if $passthrough;
905     # Pretend one char when bundling.
906     if ( $bundling == 1) {
907     $opt = substr($opt,0,1);
908     unshift (@ARGV, $starter.$rest) if defined $rest;
909     }
910     warn ("Unknown option: ", $opt, "\n");
911     $error++;
912     return (1, undef);
913     }
914     # Apparently valid.
915     $opt = $tryopt;
916     print STDERR ("=> found ", OptCtl($ctl),
917     " for \"", $opt, "\"\n") if $debug;
918    
919     #### Determine argument status ####
920    
921     # If it is an option w/o argument, we're almost finished with it.
922     my $type = $ctl->[CTL_TYPE];
923     my $arg;
924    
925     if ( $type eq '' || $type eq '!' || $type eq '+' ) {
926     if ( defined $optarg ) {
927     return (0) if $passthrough;
928     warn ("Option ", $opt, " does not take an argument\n");
929     $error++;
930     undef $opt;
931     }
932     elsif ( $type eq '' || $type eq '+' ) {
933     # Supply explicit value.
934     $arg = 1;
935     }
936     else {
937     $opt =~ s/^no-?//i; # strip NO prefix
938     $arg = 0; # supply explicit value
939     }
940     unshift (@ARGV, $starter.$rest) if defined $rest;
941     return (1, $opt, $ctl, $arg);
942     }
943    
944     # Get mandatory status and type info.
945     my $mand = $ctl->[CTL_MAND];
946    
947     # Check if there is an option argument available.
948     if ( $gnu_compat && defined $optarg && $optarg eq '' ) {
949     return (1, $opt, $ctl, $type eq 's' ? '' : 0) unless $mand;
950     $optarg = 0 unless $type eq 's';
951     }
952    
953     # Check if there is an option argument available.
954     if ( defined $optarg
955     ? ($optarg eq '')
956     : !(defined $rest || @ARGV > 0) ) {
957     # Complain if this option needs an argument.
958     if ( $mand ) {
959     return (0) if $passthrough;
960     warn ("Option ", $opt, " requires an argument\n");
961     $error++;
962     return (1, undef);
963     }
964     if ( $type eq 'I' ) {
965     # Fake incremental type.
966     my @c = @$ctl;
967     $c[CTL_TYPE] = '+';
968     return (1, $opt, \@c, 1);
969     }
970     return (1, $opt, $ctl,
971     defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] :
972     $type eq 's' ? '' : 0);
973     }
974    
975     # Get (possibly optional) argument.
976     $arg = (defined $rest ? $rest
977     : (defined $optarg ? $optarg : shift (@ARGV)));
978    
979     # Get key if this is a "name=value" pair for a hash option.
980     my $key;
981     if ($ctl->[CTL_DEST] == CTL_DEST_HASH && defined $arg) {
982     ($key, $arg) = ($arg =~ /^([^=]*)=(.*)$/s) ? ($1, $2)
983     : ($arg, defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] :
984     ($mand ? undef : ($type eq 's' ? "" : 1)));
985     if (! defined $arg) {
986     warn ("Option $opt, key \"$key\", requires a value\n");
987     $error++;
988     # Push back.
989     unshift (@ARGV, $starter.$rest) if defined $rest;
990     return (1, undef);
991     }
992     }
993    
994     #### Check if the argument is valid for this option ####
995    
996     my $key_valid = $ctl->[CTL_DEST] == CTL_DEST_HASH ? "[^=]+=" : "";
997    
998     if ( $type eq 's' ) { # string
999     # A mandatory string takes anything.
1000     return (1, $opt, $ctl, $arg, $key) if $mand;
1001    
1002     # An optional string takes almost anything.
1003     return (1, $opt, $ctl, $arg, $key)
1004     if defined $optarg || defined $rest;
1005     return (1, $opt, $ctl, $arg, $key) if $arg eq "-"; # ??
1006    
1007     # Check for option or option list terminator.
1008     if ($arg eq $argend ||
1009     $arg =~ /^$prefix.+/) {
1010     # Push back.
1011     unshift (@ARGV, $arg);
1012     # Supply empty value.
1013     $arg = '';
1014     }
1015     }
1016    
1017     elsif ( $type eq 'i' # numeric/integer
1018     || $type eq 'I' # numeric/integer w/ incr default
1019     || $type eq 'o' ) { # dec/oct/hex/bin value
1020    
1021     my $o_valid =
1022     $type eq 'o' ? "[-+]?[1-9][0-9]*|0x[0-9a-f]+|0b[01]+|0[0-7]*"
1023     : "[-+]?[0-9]+";
1024    
1025     if ( $bundling && defined $rest
1026     && $rest =~ /^($key_valid)($o_valid)(.*)$/si ) {
1027     ($key, $arg, $rest) = ($1, $2, $+);
1028     chop($key) if $key;
1029     $arg = ($type eq 'o' && $arg =~ /^0/) ? oct($arg) : 0+$arg;
1030     unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
1031     }
1032     elsif ( $arg =~ /^($o_valid)$/si ) {
1033     $arg = ($type eq 'o' && $arg =~ /^0/) ? oct($arg) : 0+$arg;
1034     }
1035     else {
1036     if ( defined $optarg || $mand ) {
1037     if ( $passthrough ) {
1038     unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
1039     unless defined $optarg;
1040     return (0);
1041     }
1042     warn ("Value \"", $arg, "\" invalid for option ",
1043     $opt, " (",
1044     $type eq 'o' ? "extended " : '',
1045     "number expected)\n");
1046     $error++;
1047     # Push back.
1048     unshift (@ARGV, $starter.$rest) if defined $rest;
1049     return (1, undef);
1050     }
1051     else {
1052     # Push back.
1053     unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
1054     if ( $type eq 'I' ) {
1055     # Fake incremental type.
1056     my @c = @$ctl;
1057     $c[CTL_TYPE] = '+';
1058     return (1, $opt, \@c, 1);
1059     }
1060     # Supply default value.
1061     $arg = defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] : 0;
1062     }
1063     }
1064     }
1065    
1066     elsif ( $type eq 'f' ) { # real number, int is also ok
1067     # We require at least one digit before a point or 'e',
1068     # and at least one digit following the point and 'e'.
1069     # [-]NN[.NN][eNN]
1070     if ( $bundling && defined $rest &&
1071     $rest =~ /^($key_valid)([-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)?)(.*)$/s ) {
1072     ($key, $arg, $rest) = ($1, $2, $+);
1073     chop($key) if $key;
1074     unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
1075     }
1076     elsif ( $arg !~ /^[-+]?[0-9.]+(\.[0-9]+)?([eE][-+]?[0-9]+)?$/ ) {
1077     if ( defined $optarg || $mand ) {
1078     if ( $passthrough ) {
1079     unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
1080     unless defined $optarg;
1081     return (0);
1082     }
1083     warn ("Value \"", $arg, "\" invalid for option ",
1084     $opt, " (real number expected)\n");
1085     $error++;
1086     # Push back.
1087     unshift (@ARGV, $starter.$rest) if defined $rest;
1088     return (1, undef);
1089     }
1090     else {
1091     # Push back.
1092     unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
1093     # Supply default value.
1094     $arg = 0.0;
1095     }
1096     }
1097     }
1098     else {
1099     die("Getopt::Long internal error (Can't happen)\n");
1100     }
1101     return (1, $opt, $ctl, $arg, $key);
1102     }
1103    
1104     # Getopt::Long Configuration.
1105     sub Configure (@) {
1106     my (@options) = @_;
1107    
1108     my $prevconfig =
1109     [ $error, $debug, $major_version, $minor_version,
1110     $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
1111     $gnu_compat, $passthrough, $genprefix, $auto_version, $auto_help ];
1112    
1113     if ( ref($options[0]) eq 'ARRAY' ) {
1114     ( $error, $debug, $major_version, $minor_version,
1115     $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
1116     $gnu_compat, $passthrough, $genprefix, $auto_version, $auto_help ) =
1117     @{shift(@options)};
1118     }
1119    
1120     my $opt;
1121     foreach $opt ( @options ) {
1122     my $try = lc ($opt);
1123     my $action = 1;
1124     if ( $try =~ /^no_?(.*)$/s ) {
1125     $action = 0;
1126     $try = $+;
1127     }
1128     if ( ($try eq 'default' or $try eq 'defaults') && $action ) {
1129     ConfigDefaults ();
1130     }
1131     elsif ( ($try eq 'posix_default' or $try eq 'posix_defaults') ) {
1132     local $ENV{POSIXLY_CORRECT};
1133     $ENV{POSIXLY_CORRECT} = 1 if $action;
1134     ConfigDefaults ();
1135     }
1136     elsif ( $try eq 'auto_abbrev' or $try eq 'autoabbrev' ) {
1137     $autoabbrev = $action;
1138     }
1139     elsif ( $try eq 'getopt_compat' ) {
1140     $getopt_compat = $action;
1141     }
1142     elsif ( $try eq 'gnu_getopt' ) {
1143     if ( $action ) {
1144     $gnu_compat = 1;
1145     $bundling = 1;
1146     $getopt_compat = 0;
1147     $order = $PERMUTE;
1148     }
1149     }
1150     elsif ( $try eq 'gnu_compat' ) {
1151     $gnu_compat = $action;
1152     }
1153     elsif ( $try =~ /^(auto_?)?version$/ ) {
1154     $auto_version = $action;
1155     }
1156     elsif ( $try =~ /^(auto_?)?help$/ ) {
1157     $auto_help = $action;
1158     }
1159     elsif ( $try eq 'ignorecase' or $try eq 'ignore_case' ) {
1160     $ignorecase = $action;
1161     }
1162     elsif ( $try eq 'ignore_case_always' ) {
1163     $ignorecase = $action ? 2 : 0;
1164     }
1165     elsif ( $try eq 'bundling' ) {
1166     $bundling = $action;
1167     }
1168     elsif ( $try eq 'bundling_override' ) {
1169     $bundling = $action ? 2 : 0;
1170     }
1171     elsif ( $try eq 'require_order' ) {
1172     $order = $action ? $REQUIRE_ORDER : $PERMUTE;
1173     }
1174     elsif ( $try eq 'permute' ) {
1175     $order = $action ? $PERMUTE : $REQUIRE_ORDER;
1176     }
1177     elsif ( $try eq 'pass_through' or $try eq 'passthrough' ) {
1178     $passthrough = $action;
1179     }
1180     elsif ( $try =~ /^prefix=(.+)$/ && $action ) {
1181     $genprefix = $1;
1182     # Turn into regexp. Needs to be parenthesized!
1183     $genprefix = "(" . quotemeta($genprefix) . ")";
1184     eval { '' =~ /$genprefix/; };
1185     die("Getopt::Long: invalid pattern \"$genprefix\"") if $@;
1186     }
1187     elsif ( $try =~ /^prefix_pattern=(.+)$/ && $action ) {
1188     $genprefix = $1;
1189     # Parenthesize if needed.
1190     $genprefix = "(" . $genprefix . ")"
1191     unless $genprefix =~ /^\(.*\)$/;
1192     eval { '' =~ /$genprefix/; };
1193     die("Getopt::Long: invalid pattern \"$genprefix\"") if $@;
1194     }
1195     elsif ( $try eq 'debug' ) {
1196     $debug = $action;
1197     }
1198     else {
1199     die("Getopt::Long: unknown config parameter \"$opt\"")
1200     }
1201     }
1202     $prevconfig;
1203     }
1204    
1205     # Deprecated name.
1206     sub config (@) {
1207     Configure (@_);
1208     }
1209    
1210     # Issue a standard message for --version.
1211     #
1212     # The arguments are mostly the same as for Pod::Usage::pod2usage:
1213     #
1214     # - a number (exit value)
1215     # - a string (lead in message)
1216     # - a hash with options. See Pod::Usage for details.
1217     #
1218     sub VersionMessage(@) {
1219     # Massage args.
1220     my $pa = setup_pa_args("version", @_);
1221    
1222     my $v = $main::VERSION;
1223     my $fh = $pa->{-output} ||
1224     ($pa->{-exitval} eq "NOEXIT" || $pa->{-exitval} < 2) ? \*STDOUT : \*STDERR;
1225    
1226     print $fh (defined($pa->{-message}) ? $pa->{-message} : (),
1227     $0, defined $v ? " version $v" : (),
1228     "\n",
1229     "(", __PACKAGE__, "::", "GetOptions",
1230     " version ",
1231     defined($Getopt::Long::VERSION_STRING)
1232     ? $Getopt::Long::VERSION_STRING : $VERSION, ";",
1233     " Perl version ",
1234     $] >= 5.006 ? sprintf("%vd", $^V) : $],
1235     ")\n");
1236     exit($pa->{-exitval}) unless $pa->{-exitval} eq "NOEXIT";
1237     }
1238    
1239     # Issue a standard message for --help.
1240     #
1241     # The arguments are the same as for Pod::Usage::pod2usage:
1242     #
1243     # - a number (exit value)
1244     # - a string (lead in message)
1245     # - a hash with options. See Pod::Usage for details.
1246     #
1247     sub HelpMessage(@) {
1248     eval {
1249     require Pod::Usage;
1250     import Pod::Usage;
1251     1;
1252     } || die("Cannot provide help: cannot load Pod::Usage\n");
1253    
1254     # Note that pod2usage will issue a warning if -exitval => NOEXIT.
1255     pod2usage(setup_pa_args("help", @_));
1256    
1257     }
1258    
1259     # Helper routine to set up a normalized hash ref to be used as
1260     # argument to pod2usage.
1261     sub setup_pa_args($@) {
1262     my $tag = shift; # who's calling
1263    
1264     # If called by direct binding to an option, it will get the option
1265     # name and value as arguments. Remove these, if so.
1266     @_ = () if @_ == 2 && $_[0] eq $tag;
1267    
1268     my $pa;
1269     if ( @_ > 1 ) {
1270     $pa = { @_ };
1271     }
1272     else {
1273     $pa = shift || {};
1274     }
1275    
1276     # At this point, $pa can be a number (exit value), string
1277     # (message) or hash with options.
1278    
1279     if ( UNIVERSAL::isa($pa, 'HASH') ) {
1280     # Get rid of -msg vs. -message ambiguity.
1281     $pa->{-message} = $pa->{-msg};
1282     delete($pa->{-msg});
1283     }
1284     elsif ( $pa =~ /^-?\d+$/ ) {
1285     $pa = { -exitval => $pa };
1286     }
1287     else {
1288     $pa = { -message => $pa };
1289     }
1290    
1291     # These are _our_ defaults.
1292     $pa->{-verbose} = 0 unless exists($pa->{-verbose});
1293     $pa->{-exitval} = 0 unless exists($pa->{-exitval});
1294     $pa;
1295     }
1296    
1297     # Sneak way to know what version the user requested.
1298     sub VERSION {
1299     $requested_version = $_[1];
1300     shift->SUPER::VERSION(@_);
1301     }
1302    
1303     1;
1304    
1305     ################ Documentation ################
1306    
1307     =head1 NAME
1308    
1309     Getopt::Long - Extended processing of command line options
1310    
1311     =head1 SYNOPSIS
1312    
1313     use Getopt::Long;
1314     my $data = "file.dat";
1315     my $length = 24;
1316     my $verbose;
1317     $result = GetOptions ("length=i" => \$length, # numeric
1318     "file=s" => \$data, # string
1319     "verbose" => \$verbose); # flag
1320    
1321     =head1 DESCRIPTION
1322    
1323     The Getopt::Long module implements an extended getopt function called
1324     GetOptions(). This function adheres to the POSIX syntax for command
1325     line options, with GNU extensions. In general, this means that options
1326     have long names instead of single letters, and are introduced with a
1327     double dash "--". Support for bundling of command line options, as was
1328     the case with the more traditional single-letter approach, is provided
1329     but not enabled by default.
1330    
1331     =head1 Command Line Options, an Introduction
1332    
1333     Command line operated programs traditionally take their arguments from
1334     the command line, for example filenames or other information that the
1335     program needs to know. Besides arguments, these programs often take
1336     command line I<options> as well. Options are not necessary for the
1337     program to work, hence the name 'option', but are used to modify its
1338     default behaviour. For example, a program could do its job quietly,
1339     but with a suitable option it could provide verbose information about
1340     what it did.
1341    
1342     Command line options come in several flavours. Historically, they are
1343     preceded by a single dash C<->, and consist of a single letter.
1344    
1345     -l -a -c
1346    
1347     Usually, these single-character options can be bundled:
1348    
1349     -lac
1350    
1351     Options can have values, the value is placed after the option
1352     character. Sometimes with whitespace in between, sometimes not:
1353    
1354     -s 24 -s24
1355    
1356     Due to the very cryptic nature of these options, another style was
1357     developed that used long names. So instead of a cryptic C<-l> one
1358     could use the more descriptive C<--long>. To distinguish between a
1359     bundle of single-character options and a long one, two dashes are used
1360     to precede the option name. Early implementations of long options used
1361     a plus C<+> instead. Also, option values could be specified either
1362     like
1363    
1364     --size=24
1365    
1366     or
1367    
1368     --size 24
1369    
1370     The C<+> form is now obsolete and strongly deprecated.
1371    
1372     =head1 Getting Started with Getopt::Long
1373    
1374     Getopt::Long is the Perl5 successor of C<newgetopt.pl>. This was
1375     the first Perl module that provided support for handling the new style
1376     of command line options, hence the name Getopt::Long. This module
1377     also supports single-character options and bundling. In this case, the
1378     options are restricted to alphabetic characters only, and the
1379     characters C<?> and C<->.
1380    
1381     To use Getopt::Long from a Perl program, you must include the
1382     following line in your Perl program:
1383    
1384     use Getopt::Long;
1385    
1386     This will load the core of the Getopt::Long module and prepare your
1387     program for using it. Most of the actual Getopt::Long code is not
1388     loaded until you really call one of its functions.
1389    
1390     In the default configuration, options names may be abbreviated to
1391     uniqueness, case does not matter, and a single dash is sufficient,
1392     even for long option names. Also, options may be placed between
1393     non-option arguments. See L<Configuring Getopt::Long> for more
1394     details on how to configure Getopt::Long.
1395    
1396     =head2 Simple options
1397    
1398     The most simple options are the ones that take no values. Their mere
1399     presence on the command line enables the option. Popular examples are:
1400    
1401     --all --verbose --quiet --debug
1402    
1403     Handling simple options is straightforward:
1404    
1405     my $verbose = ''; # option variable with default value (false)
1406     my $all = ''; # option variable with default value (false)
1407     GetOptions ('verbose' => \$verbose, 'all' => \$all);
1408    
1409     The call to GetOptions() parses the command line arguments that are
1410     present in C<@ARGV> and sets the option variable to the value C<1> if
1411     the option did occur on the command line. Otherwise, the option
1412     variable is not touched. Setting the option value to true is often
1413     called I<enabling> the option.
1414    
1415     The option name as specified to the GetOptions() function is called
1416     the option I<specification>. Later we'll see that this specification
1417     can contain more than just the option name. The reference to the
1418     variable is called the option I<destination>.
1419    
1420     GetOptions() will return a true value if the command line could be
1421     processed successfully. Otherwise, it will write error messages to
1422     STDERR, and return a false result.
1423    
1424     =head2 A little bit less simple options
1425    
1426     Getopt::Long supports two useful variants of simple options:
1427     I<negatable> options and I<incremental> options.
1428    
1429     A negatable option is specified with an exclamation mark C<!> after the
1430     option name:
1431    
1432     my $verbose = ''; # option variable with default value (false)
1433     GetOptions ('verbose!' => \$verbose);
1434    
1435     Now, using C<--verbose> on the command line will enable C<$verbose>,
1436     as expected. But it is also allowed to use C<--noverbose>, which will
1437     disable C<$verbose> by setting its value to C<0>. Using a suitable
1438     default value, the program can find out whether C<$verbose> is false
1439     by default, or disabled by using C<--noverbose>.
1440    
1441     An incremental option is specified with a plus C<+> after the
1442     option name:
1443    
1444     my $verbose = ''; # option variable with default value (false)
1445     GetOptions ('verbose+' => \$verbose);
1446    
1447     Using C<--verbose> on the command line will increment the value of
1448     C<$verbose>. This way the program can keep track of how many times the
1449     option occurred on the command line. For example, each occurrence of
1450     C<--verbose> could increase the verbosity level of the program.
1451    
1452     =head2 Mixing command line option with other arguments
1453    
1454     Usually programs take command line options as well as other arguments,
1455     for example, file names. It is good practice to always specify the
1456     options first, and the other arguments last. Getopt::Long will,
1457     however, allow the options and arguments to be mixed and 'filter out'
1458     all the options before passing the rest of the arguments to the
1459     program. To stop Getopt::Long from processing further arguments,
1460     insert a double dash C<--> on the command line:
1461    
1462     --size 24 -- --all
1463    
1464     In this example, C<--all> will I<not> be treated as an option, but
1465     passed to the program unharmed, in C<@ARGV>.
1466    
1467     =head2 Options with values
1468    
1469     For options that take values it must be specified whether the option
1470     value is required or not, and what kind of value the option expects.
1471    
1472     Three kinds of values are supported: integer numbers, floating point
1473     numbers, and strings.
1474    
1475     If the option value is required, Getopt::Long will take the
1476     command line argument that follows the option and assign this to the
1477     option variable. If, however, the option value is specified as
1478     optional, this will only be done if that value does not look like a
1479     valid command line option itself.
1480    
1481     my $tag = ''; # option variable with default value
1482     GetOptions ('tag=s' => \$tag);
1483    
1484     In the option specification, the option name is followed by an equals
1485     sign C<=> and the letter C<s>. The equals sign indicates that this
1486     option requires a value. The letter C<s> indicates that this value is
1487     an arbitrary string. Other possible value types are C<i> for integer
1488     values, and C<f> for floating point values. Using a colon C<:> instead
1489     of the equals sign indicates that the option value is optional. In
1490     this case, if no suitable value is supplied, string valued options get
1491     an empty string C<''> assigned, while numeric options are set to C<0>.
1492    
1493     =head2 Options with multiple values
1494    
1495     Options sometimes take several values. For example, a program could
1496     use multiple directories to search for library files:
1497    
1498     --library lib/stdlib --library lib/extlib
1499    
1500     To accomplish this behaviour, simply specify an array reference as the
1501     destination for the option:
1502    
1503     GetOptions ("library=s" => \@libfiles);
1504    
1505     Alternatively, you can specify that the option can have multiple
1506     values by adding a "@", and pass a scalar reference as the
1507     destination:
1508    
1509     GetOptions ("library=s@" => \$libfiles);
1510    
1511     Used with the example above, C<@libfiles> (or C<@$libfiles>) would
1512     contain two strings upon completion: C<"lib/srdlib"> and
1513     C<"lib/extlib">, in that order. It is also possible to specify that
1514     only integer or floating point numbers are acceptible values.
1515    
1516     Often it is useful to allow comma-separated lists of values as well as
1517     multiple occurrences of the options. This is easy using Perl's split()
1518     and join() operators:
1519    
1520     GetOptions ("library=s" => \@libfiles);
1521     @libfiles = split(/,/,join(',',@libfiles));
1522    
1523     Of course, it is important to choose the right separator string for
1524     each purpose.
1525    
1526     =head2 Options with hash values
1527    
1528     If the option destination is a reference to a hash, the option will
1529     take, as value, strings of the form I<key>C<=>I<value>. The value will
1530     be stored with the specified key in the hash.
1531    
1532     GetOptions ("define=s" => \%defines);
1533    
1534     Alternatively you can use:
1535    
1536     GetOptions ("define=s%" => \$defines);
1537    
1538     When used with command line options:
1539    
1540     --define os=linux --define vendor=redhat
1541    
1542     the hash C<%defines> (or C<%$defines>) will contain two keys, C<"os">
1543     with value C<"linux> and C<"vendor"> with value C<"redhat">. It is
1544     also possible to specify that only integer or floating point numbers
1545     are acceptible values. The keys are always taken to be strings.
1546    
1547     =head2 User-defined subroutines to handle options
1548    
1549     Ultimate control over what should be done when (actually: each time)
1550     an option is encountered on the command line can be achieved by
1551     designating a reference to a subroutine (or an anonymous subroutine)
1552     as the option destination. When GetOptions() encounters the option, it
1553     will call the subroutine with two or three arguments. The first
1554     argument is the name of the option. For a scalar or array destination,
1555     the second argument is the value to be stored. For a hash destination,
1556     the second arguments is the key to the hash, and the third argument
1557     the value to be stored. It is up to the subroutine to store the value,
1558     or do whatever it thinks is appropriate.
1559    
1560     A trivial application of this mechanism is to implement options that
1561     are related to each other. For example:
1562    
1563     my $verbose = ''; # option variable with default value (false)
1564     GetOptions ('verbose' => \$verbose,
1565     'quiet' => sub { $verbose = 0 });
1566    
1567     Here C<--verbose> and C<--quiet> control the same variable
1568     C<$verbose>, but with opposite values.
1569    
1570     If the subroutine needs to signal an error, it should call die() with
1571     the desired error message as its argument. GetOptions() will catch the
1572     die(), issue the error message, and record that an error result must
1573     be returned upon completion.
1574    
1575     If the text of the error message starts with an exclamantion mark C<!>
1576     it is interpreted specially by GetOptions(). There is currently one
1577     special command implemented: C<die("!FINISH")> will cause GetOptions()
1578     to stop processing options, as if it encountered a double dash C<-->.
1579    
1580     =head2 Options with multiple names
1581    
1582     Often it is user friendly to supply alternate mnemonic names for
1583     options. For example C<--height> could be an alternate name for
1584     C<--length>. Alternate names can be included in the option
1585     specification, separated by vertical bar C<|> characters. To implement
1586     the above example:
1587    
1588     GetOptions ('length|height=f' => \$length);
1589    
1590     The first name is called the I<primary> name, the other names are
1591     called I<aliases>.
1592    
1593     Multiple alternate names are possible.
1594    
1595     =head2 Case and abbreviations
1596    
1597     Without additional configuration, GetOptions() will ignore the case of
1598     option names, and allow the options to be abbreviated to uniqueness.
1599    
1600     GetOptions ('length|height=f' => \$length, "head" => \$head);
1601    
1602     This call will allow C<--l> and C<--L> for the length option, but
1603     requires a least C<--hea> and C<--hei> for the head and height options.
1604    
1605     =head2 Summary of Option Specifications
1606    
1607     Each option specifier consists of two parts: the name specification
1608     and the argument specification.
1609    
1610     The name specification contains the name of the option, optionally
1611     followed by a list of alternative names separated by vertical bar
1612     characters.
1613    
1614     length option name is "length"
1615     length|size|l name is "length", aliases are "size" and "l"
1616    
1617     The argument specification is optional. If omitted, the option is
1618     considered boolean, a value of 1 will be assigned when the option is
1619     used on the command line.
1620    
1621     The argument specification can be
1622    
1623     =over 4
1624    
1625     =item !
1626    
1627     The option does not take an argument and may be negated, i.e. prefixed
1628     by "no". E.g. C<"foo!"> will allow C<--foo> (a value of 1 will be
1629     assigned) and C<--nofoo> and C<--no-foo> (a value of 0 will be assigned). If the
1630     option has aliases, this applies to the aliases as well.
1631    
1632     Using negation on a single letter option when bundling is in effect is
1633     pointless and will result in a warning.
1634    
1635     =item +
1636    
1637     The option does not take an argument and will be incremented by 1
1638     every time it appears on the command line. E.g. C<"more+">, when used
1639     with C<--more --more --more>, will increment the value three times,
1640     resulting in a value of 3 (provided it was 0 or undefined at first).
1641    
1642     The C<+> specifier is ignored if the option destination is not a scalar.
1643    
1644     =item = I<type> [ I<desttype> ]
1645    
1646     The option requires an argument of the given type. Supported types
1647     are:
1648    
1649     =over 4
1650    
1651     =item s
1652    
1653     String. An arbitrary sequence of characters. It is valid for the
1654     argument to start with C<-> or C<-->.
1655    
1656     =item i
1657    
1658     Integer. An optional leading plus or minus sign, followed by a
1659     sequence of digits.
1660    
1661     =item o
1662    
1663     Extended integer, Perl style. This can be either an optional leading
1664     plus or minus sign, followed by a sequence of digits, or an octal
1665     string (a zero, optionally followed by '0', '1', .. '7'), or a
1666     hexadecimal string (C<0x> followed by '0' .. '9', 'a' .. 'f', case
1667     insensitive), or a binary string (C<0b> followed by a series of '0'
1668     and '1').
1669    
1670     =item f
1671    
1672     Real number. For example C<3.14>, C<-6.23E24> and so on.
1673    
1674     =back
1675    
1676     The I<desttype> can be C<@> or C<%> to specify that the option is
1677     list or a hash valued. This is only needed when the destination for
1678     the option value is not otherwise specified. It should be omitted when
1679     not needed.
1680    
1681     =item : I<type> [ I<desttype> ]
1682    
1683     Like C<=>, but designates the argument as optional.
1684     If omitted, an empty string will be assigned to string values options,
1685     and the value zero to numeric options.
1686    
1687     Note that if a string argument starts with C<-> or C<-->, it will be
1688     considered an option on itself.
1689    
1690     =item : I<number> [ I<desttype> ]
1691    
1692     Like C<:i>, but if the value is omitted, the I<number> will be assigned.
1693    
1694     =item : + [ I<desttype> ]
1695    
1696     Like C<:i>, but if the value is omitted, the current value for the
1697     option will be incremented.
1698    
1699     =back
1700    
1701     =head1 Advanced Possibilities
1702    
1703     =head2 Object oriented interface
1704    
1705     Getopt::Long can be used in an object oriented way as well:
1706    
1707     use Getopt::Long;
1708     $p = new Getopt::Long::Parser;
1709     $p->configure(...configuration options...);
1710     if ($p->getoptions(...options descriptions...)) ...
1711    
1712     Configuration options can be passed to the constructor:
1713    
1714     $p = new Getopt::Long::Parser
1715     config => [...configuration options...];
1716    
1717     =head2 Thread Safety
1718    
1719     Getopt::Long is thread safe when using ithreads as of Perl 5.8. It is
1720     I<not> thread safe when using the older (experimental and now
1721     obsolete) threads implementation that was added to Perl 5.005.
1722    
1723     =head2 Documentation and help texts
1724    
1725     Getopt::Long encourages the use of Pod::Usage to produce help
1726     messages. For example:
1727    
1728     use Getopt::Long;
1729     use Pod::Usage;
1730    
1731     my $man = 0;
1732     my $help = 0;
1733    
1734     GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
1735     pod2usage(1) if $help;
1736     pod2usage(-exitstatus => 0, -verbose => 2) if $man;
1737    
1738     __END__
1739    
1740     =head1 NAME
1741    
1742     sample - Using Getopt::Long and Pod::Usage
1743    
1744     =head1 SYNOPSIS
1745    
1746     sample [options] [file ...]
1747    
1748     Options:
1749     -help brief help message
1750     -man full documentation
1751    
1752     =head1 OPTIONS
1753    
1754     =over 8
1755    
1756     =item B<-help>
1757    
1758     Print a brief help message and exits.
1759    
1760     =item B<-man>
1761    
1762     Prints the manual page and exits.
1763    
1764     =back
1765    
1766     =head1 DESCRIPTION
1767    
1768     B<This program> will read the given input file(s) and do someting
1769     useful with the contents thereof.
1770    
1771     =cut
1772    
1773     See L<Pod::Usage> for details.
1774    
1775     =head2 Storing options in a hash
1776    
1777     Sometimes, for example when there are a lot of options, having a
1778     separate variable for each of them can be cumbersome. GetOptions()
1779     supports, as an alternative mechanism, storing options in a hash.
1780    
1781     To obtain this, a reference to a hash must be passed I<as the first
1782     argument> to GetOptions(). For each option that is specified on the
1783     command line, the option value will be stored in the hash with the
1784     option name as key. Options that are not actually used on the command
1785     line will not be put in the hash, on other words,
1786     C<exists($h{option})> (or defined()) can be used to test if an option
1787     was used. The drawback is that warnings will be issued if the program
1788     runs under C<use strict> and uses C<$h{option}> without testing with
1789     exists() or defined() first.
1790    
1791     my %h = ();
1792     GetOptions (\%h, 'length=i'); # will store in $h{length}
1793    
1794     For options that take list or hash values, it is necessary to indicate
1795     this by appending an C<@> or C<%> sign after the type:
1796    
1797     GetOptions (\%h, 'colours=s@'); # will push to @{$h{colours}}
1798    
1799     To make things more complicated, the hash may contain references to
1800     the actual destinations, for example:
1801    
1802     my $len = 0;
1803     my %h = ('length' => \$len);
1804     GetOptions (\%h, 'length=i'); # will store in $len
1805    
1806     This example is fully equivalent with:
1807    
1808     my $len = 0;
1809     GetOptions ('length=i' => \$len); # will store in $len
1810    
1811     Any mixture is possible. For example, the most frequently used options
1812     could be stored in variables while all other options get stored in the
1813     hash:
1814    
1815     my $verbose = 0; # frequently referred
1816     my $debug = 0; # frequently referred
1817     my %h = ('verbose' => \$verbose, 'debug' => \$debug);
1818     GetOptions (\%h, 'verbose', 'debug', 'filter', 'size=i');
1819     if ( $verbose ) { ... }
1820     if ( exists $h{filter} ) { ... option 'filter' was specified ... }
1821    
1822     =head2 Bundling
1823    
1824     With bundling it is possible to set several single-character options
1825     at once. For example if C<a>, C<v> and C<x> are all valid options,
1826    
1827     -vax
1828    
1829     would set all three.
1830    
1831     Getopt::Long supports two levels of bundling. To enable bundling, a
1832     call to Getopt::Long::Configure is required.
1833    
1834     The first level of bundling can be enabled with:
1835    
1836     Getopt::Long::Configure ("bundling");
1837    
1838     Configured this way, single-character options can be bundled but long
1839     options B<must> always start with a double dash C<--> to avoid
1840     abiguity. For example, when C<vax>, C<a>, C<v> and C<x> are all valid
1841     options,
1842    
1843     -vax
1844    
1845     would set C<a>, C<v> and C<x>, but
1846    
1847     --vax
1848    
1849     would set C<vax>.
1850    
1851     The second level of bundling lifts this restriction. It can be enabled
1852     with:
1853    
1854     Getopt::Long::Configure ("bundling_override");
1855    
1856     Now, C<-vax> would set the option C<vax>.
1857    
1858     When any level of bundling is enabled, option values may be inserted
1859     in the bundle. For example:
1860    
1861     -h24w80
1862    
1863     is equivalent to
1864    
1865     -h 24 -w 80
1866    
1867     When configured for bundling, single-character options are matched
1868     case sensitive while long options are matched case insensitive. To
1869     have the single-character options matched case insensitive as well,
1870     use:
1871    
1872     Getopt::Long::Configure ("bundling", "ignorecase_always");
1873    
1874     It goes without saying that bundling can be quite confusing.
1875    
1876     =head2 The lonesome dash
1877    
1878     Normally, a lone dash C<-> on the command line will not be considered
1879     an option. Option processing will terminate (unless "permute" is
1880     configured) and the dash will be left in C<@ARGV>.
1881    
1882     It is possible to get special treatment for a lone dash. This can be
1883     achieved by adding an option specification with an empty name, for
1884     example:
1885    
1886     GetOptions ('' => \$stdio);
1887    
1888     A lone dash on the command line will now be a legal option, and using
1889     it will set variable C<$stdio>.
1890    
1891     =head2 Argument callback
1892    
1893     A special option 'name' C<< <> >> can be used to designate a subroutine
1894     to handle non-option arguments. When GetOptions() encounters an
1895     argument that does not look like an option, it will immediately call this
1896     subroutine and passes it one parameter: the argument name.
1897    
1898     For example:
1899    
1900     my $width = 80;
1901     sub process { ... }
1902     GetOptions ('width=i' => \$width, '<>' => \&process);
1903    
1904     When applied to the following command line:
1905    
1906     arg1 --width=72 arg2 --width=60 arg3
1907    
1908     This will call
1909     C<process("arg1")> while C<$width> is C<80>,
1910     C<process("arg2")> while C<$width> is C<72>, and
1911     C<process("arg3")> while C<$width> is C<60>.
1912    
1913     This feature requires configuration option B<permute>, see section
1914     L<Configuring Getopt::Long>.
1915    
1916     =head1 Configuring Getopt::Long
1917    
1918     Getopt::Long can be configured by calling subroutine
1919     Getopt::Long::Configure(). This subroutine takes a list of quoted
1920     strings, each specifying a configuration option to be enabled, e.g.
1921     C<ignore_case>, or disabled, e.g. C<no_ignore_case>. Case does not
1922     matter. Multiple calls to Configure() are possible.
1923    
1924     Alternatively, as of version 2.24, the configuration options may be
1925     passed together with the C<use> statement:
1926    
1927     use Getopt::Long qw(:config no_ignore_case bundling);
1928    
1929     The following options are available:
1930    
1931     =over 12
1932    
1933     =item default
1934    
1935     This option causes all configuration options to be reset to their
1936     default values.
1937    
1938     =item posix_default
1939    
1940     This option causes all configuration options to be reset to their
1941     default values as if the environment variable POSIXLY_CORRECT had
1942     been set.
1943    
1944     =item auto_abbrev
1945    
1946     Allow option names to be abbreviated to uniqueness.
1947     Default is enabled unless environment variable
1948     POSIXLY_CORRECT has been set, in which case C<auto_abbrev> is disabled.
1949    
1950     =item getopt_compat
1951    
1952     Allow C<+> to start options.
1953     Default is enabled unless environment variable
1954     POSIXLY_CORRECT has been set, in which case C<getopt_compat> is disabled.
1955    
1956     =item gnu_compat
1957    
1958     C<gnu_compat> controls whether C<--opt=> is allowed, and what it should
1959     do. Without C<gnu_compat>, C<--opt=> gives an error. With C<gnu_compat>,
1960     C<--opt=> will give option C<opt> and empty value.
1961     This is the way GNU getopt_long() does it.
1962    
1963     =item gnu_getopt
1964    
1965     This is a short way of setting C<gnu_compat> C<bundling> C<permute>
1966     C<no_getopt_compat>. With C<gnu_getopt>, command line handling should be
1967     fully compatible with GNU getopt_long().
1968    
1969     =item require_order
1970    
1971     Whether command line arguments are allowed to be mixed with options.
1972     Default is disabled unless environment variable
1973     POSIXLY_CORRECT has been set, in which case C<require_order> is enabled.
1974    
1975     See also C<permute>, which is the opposite of C<require_order>.
1976    
1977     =item permute
1978    
1979     Whether command line arguments are allowed to be mixed with options.
1980     Default is enabled unless environment variable
1981     POSIXLY_CORRECT has been set, in which case C<permute> is disabled.
1982     Note that C<permute> is the opposite of C<require_order>.
1983    
1984     If C<permute> is enabled, this means that
1985    
1986     --foo arg1 --bar arg2 arg3
1987    
1988     is equivalent to
1989    
1990     --foo --bar arg1 arg2 arg3
1991    
1992     If an argument callback routine is specified, C<@ARGV> will always be
1993     empty upon succesful return of GetOptions() since all options have been
1994     processed. The only exception is when C<--> is used:
1995    
1996     --foo arg1 --bar arg2 -- arg3
1997    
1998     This will call the callback routine for arg1 and arg2, and then
1999     terminate GetOptions() leaving C<"arg2"> in C<@ARGV>.
2000    
2001     If C<require_order> is enabled, options processing
2002     terminates when the first non-option is encountered.
2003    
2004     --foo arg1 --bar arg2 arg3
2005    
2006     is equivalent to
2007    
2008     --foo -- arg1 --bar arg2 arg3
2009    
2010     If C<pass_through> is also enabled, options processing will terminate
2011     at the first unrecognized option, or non-option, whichever comes
2012     first.
2013    
2014     =item bundling (default: disabled)
2015    
2016     Enabling this option will allow single-character options to be
2017     bundled. To distinguish bundles from long option names, long options
2018     I<must> be introduced with C<--> and bundles with C<->.
2019    
2020     Note that, if you have options C<a>, C<l> and C<all>, and
2021     auto_abbrev enabled, possible arguments and option settings are:
2022    
2023     using argument sets option(s)
2024     ------------------------------------------
2025     -a, --a a
2026     -l, --l l
2027     -al, -la, -ala, -all,... a, l
2028     --al, --all all
2029    
2030     The suprising part is that C<--a> sets option C<a> (due to auto
2031     completion), not C<all>.
2032    
2033     Note: disabling C<bundling> also disables C<bundling_override>.
2034    
2035     =item bundling_override (default: disabled)
2036    
2037     If C<bundling_override> is enabled, bundling is enabled as with
2038     C<bundling> but now long option names override option bundles.
2039    
2040     Note: disabling C<bundling_override> also disables C<bundling>.
2041    
2042     B<Note:> Using option bundling can easily lead to unexpected results,
2043     especially when mixing long options and bundles. Caveat emptor.
2044    
2045     =item ignore_case (default: enabled)
2046    
2047     If enabled, case is ignored when matching long option names. If,
2048     however, bundling is enabled as well, single character options will be
2049     treated case-sensitive.
2050    
2051     With C<ignore_case>, option specifications for options that only
2052     differ in case, e.g., C<"foo"> and C<"Foo">, will be flagged as
2053     duplicates.
2054    
2055     Note: disabling C<ignore_case> also disables C<ignore_case_always>.
2056    
2057     =item ignore_case_always (default: disabled)
2058    
2059     When bundling is in effect, case is ignored on single-character
2060     options also.
2061    
2062     Note: disabling C<ignore_case_always> also disables C<ignore_case>.
2063    
2064     =item auto_version (default:disabled)
2065    
2066     Automatically provide support for the B<--version> option if
2067     the application did not specify a handler for this option itself.
2068    
2069     Getopt::Long will provide a standard version message that includes the
2070     program name, its version (if $main::VERSION is defined), and the
2071     versions of Getopt::Long and Perl. The message will be written to
2072     standard output and processing will terminate.
2073    
2074     C<auto_version> will be enabled if the calling program explicitly
2075     specified a version number higher than 2.32 in the C<use> or
2076     C<require> statement.
2077    
2078     =item auto_help (default:disabled)
2079    
2080     Automatically provide support for the B<--help> and B<-?> options if
2081     the application did not specify a handler for this option itself.
2082    
2083     Getopt::Long will provide a help message using module L<Pod::Usage>. The
2084     message, derived from the SYNOPSIS POD section, will be written to
2085     standard output and processing will terminate.
2086    
2087     C<auto_help> will be enabled if the calling program explicitly
2088     specified a version number higher than 2.32 in the C<use> or
2089     C<require> statement.
2090    
2091     =item pass_through (default: disabled)
2092    
2093     Options that are unknown, ambiguous or supplied with an invalid option
2094     value are passed through in C<@ARGV> instead of being flagged as
2095     errors. This makes it possible to write wrapper scripts that process
2096     only part of the user supplied command line arguments, and pass the
2097     remaining options to some other program.
2098    
2099     If C<require_order> is enabled, options processing will terminate at
2100     the first unrecognized option, or non-option, whichever comes first.
2101     However, if C<permute> is enabled instead, results can become confusing.
2102    
2103     Note that the options terminator (default C<-->), if present, will
2104     also be passed through in C<@ARGV>.
2105    
2106     =item prefix
2107    
2108     The string that starts options. If a constant string is not
2109     sufficient, see C<prefix_pattern>.
2110    
2111     =item prefix_pattern
2112    
2113     A Perl pattern that identifies the strings that introduce options.
2114     Default is C<(--|-|\+)> unless environment variable
2115     POSIXLY_CORRECT has been set, in which case it is C<(--|-)>.
2116    
2117     =item debug (default: disabled)
2118    
2119     Enable debugging output.
2120    
2121     =back
2122    
2123     =head1 Exportable Methods
2124    
2125     =over
2126    
2127     =item VersionMessage
2128    
2129     This subroutine provides a standard version message. Its argument can be:
2130    
2131     =over 4
2132    
2133     =item *
2134    
2135     A string containing the text of a message to print I<before> printing
2136     the standard message.
2137    
2138     =item *
2139    
2140     A numeric value corresponding to the desired exit status.
2141    
2142     =item *
2143    
2144     A reference to a hash.
2145    
2146     =back
2147    
2148     If more than one argument is given then the entire argument list is
2149     assumed to be a hash. If a hash is supplied (either as a reference or
2150     as a list) it should contain one or more elements with the following
2151     keys:
2152    
2153     =over 4
2154    
2155     =item C<-message>
2156    
2157     =item C<-msg>
2158    
2159     The text of a message to print immediately prior to printing the
2160     program's usage message.
2161    
2162     =item C<-exitval>
2163    
2164     The desired exit status to pass to the B<exit()> function.
2165     This should be an integer, or else the string "NOEXIT" to
2166     indicate that control should simply be returned without
2167     terminating the invoking process.
2168    
2169     =item C<-output>
2170    
2171     A reference to a filehandle, or the pathname of a file to which the
2172     usage message should be written. The default is C<\*STDERR> unless the
2173     exit value is less than 2 (in which case the default is C<\*STDOUT>).
2174    
2175     =back
2176    
2177     You cannot tie this routine directly to an option, e.g.:
2178    
2179     GetOptions("version" => \&VersionMessage);
2180    
2181     Use this instead:
2182    
2183     GetOptions("version" => sub { VersionMessage() });
2184    
2185     =item HelpMessage
2186    
2187     This subroutine produces a standard help message, derived from the
2188     program's POD section SYNOPSIS using L<Pod::Usage>. It takes the same
2189     arguments as VersionMessage(). In particular, you cannot tie it
2190     directly to an option, e.g.:
2191    
2192     GetOptions("help" => \&HelpMessage);
2193    
2194     Use this instead:
2195    
2196     GetOptions("help" => sub { HelpMessage() });
2197    
2198     =back
2199    
2200     =head1 Return values and Errors
2201    
2202     Configuration errors and errors in the option definitions are
2203     signalled using die() and will terminate the calling program unless
2204     the call to Getopt::Long::GetOptions() was embedded in C<eval { ...
2205     }>, or die() was trapped using C<$SIG{__DIE__}>.
2206    
2207     GetOptions returns true to indicate success.
2208     It returns false when the function detected one or more errors during
2209     option parsing. These errors are signalled using warn() and can be
2210     trapped with C<$SIG{__WARN__}>.
2211    
2212     =head1 Legacy
2213    
2214     The earliest development of C<newgetopt.pl> started in 1990, with Perl
2215     version 4. As a result, its development, and the development of
2216     Getopt::Long, has gone through several stages. Since backward
2217     compatibility has always been extremely important, the current version
2218     of Getopt::Long still supports a lot of constructs that nowadays are
2219     no longer necessary or otherwise unwanted. This section describes
2220     briefly some of these 'features'.
2221    
2222     =head2 Default destinations
2223    
2224     When no destination is specified for an option, GetOptions will store
2225     the resultant value in a global variable named C<opt_>I<XXX>, where
2226     I<XXX> is the primary name of this option. When a progam executes
2227     under C<use strict> (recommended), these variables must be
2228     pre-declared with our() or C<use vars>.
2229    
2230     our $opt_length = 0;
2231     GetOptions ('length=i'); # will store in $opt_length
2232    
2233     To yield a usable Perl variable, characters that are not part of the
2234     syntax for variables are translated to underscores. For example,
2235     C<--fpp-struct-return> will set the variable
2236     C<$opt_fpp_struct_return>. Note that this variable resides in the
2237     namespace of the calling program, not necessarily C<main>. For
2238     example:
2239    
2240     GetOptions ("size=i", "sizes=i@");
2241    
2242     with command line "-size 10 -sizes 24 -sizes 48" will perform the
2243     equivalent of the assignments
2244    
2245     $opt_size = 10;
2246     @opt_sizes = (24, 48);
2247    
2248     =head2 Alternative option starters
2249    
2250     A string of alternative option starter characters may be passed as the
2251     first argument (or the first argument after a leading hash reference
2252     argument).
2253    
2254     my $len = 0;
2255     GetOptions ('/', 'length=i' => $len);
2256    
2257     Now the command line may look like:
2258    
2259     /length 24 -- arg
2260    
2261     Note that to terminate options processing still requires a double dash
2262     C<-->.
2263    
2264     GetOptions() will not interpret a leading C<< "<>" >> as option starters
2265     if the next argument is a reference. To force C<< "<" >> and C<< ">" >> as
2266     option starters, use C<< "><" >>. Confusing? Well, B<using a starter
2267     argument is strongly deprecated> anyway.
2268    
2269     =head2 Configuration variables
2270    
2271     Previous versions of Getopt::Long used variables for the purpose of
2272     configuring. Although manipulating these variables still work, it is
2273     strongly encouraged to use the C<Configure> routine that was introduced
2274     in version 2.17. Besides, it is much easier.
2275    
2276     =head1 Trouble Shooting
2277    
2278     =head2 GetOptions does not return a false result when an option is not supplied
2279    
2280     That's why they're called 'options'.
2281    
2282     =head2 GetOptions does not split the command line correctly
2283    
2284     The command line is not split by GetOptions, but by the command line
2285     interpreter (CLI). On Unix, this is the shell. On Windows, it is
2286     COMMAND.COM or CMD.EXE. Other operating systems have other CLIs.
2287    
2288     It is important to know that these CLIs may behave different when the
2289     command line contains special characters, in particular quotes or
2290     backslashes. For example, with Unix shells you can use single quotes
2291     (C<'>) and double quotes (C<">) to group words together. The following
2292     alternatives are equivalent on Unix:
2293    
2294     "two words"
2295     'two words'
2296     two\ words
2297    
2298     In case of doubt, insert the following statement in front of your Perl
2299     program:
2300    
2301     print STDERR (join("|",@ARGV),"\n");
2302    
2303     to verify how your CLI passes the arguments to the program.
2304    
2305     =head2 Undefined subroutine &main::GetOptions called
2306    
2307     Are you running Windows, and did you write
2308    
2309     use GetOpt::Long;
2310    
2311     (note the capital 'O')?
2312    
2313     =head2 How do I put a "-?" option into a Getopt::Long?
2314    
2315     You can only obtain this using an alias, and Getopt::Long of at least
2316     version 2.13.
2317    
2318     use Getopt::Long;
2319     GetOptions ("help|?"); # -help and -? will both set $opt_help
2320    
2321     =head1 AUTHOR
2322    
2323     Johan Vromans <jvromans@squirrel.nl>
2324    
2325     =head1 COPYRIGHT AND DISCLAIMER
2326    
2327     This program is Copyright 2003,1990 by Johan Vromans.
2328     This program is free software; you can redistribute it and/or
2329     modify it under the terms of the Perl Artistic License or the
2330     GNU General Public License as published by the Free Software
2331     Foundation; either version 2 of the License, or (at your option) any
2332     later version.
2333    
2334     This program is distributed in the hope that it will be useful,
2335     but WITHOUT ANY WARRANTY; without even the implied warranty of
2336     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2337     GNU General Public License for more details.
2338    
2339     If you do not have a copy of the GNU General Public License write to
2340     the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
2341     MA 02139, USA.
2342    
2343     =cut
2344