SYN SYN
[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
22d4bb9c 5# RCS Status : $Id: GetoptLong.pl,v 2.25 2000-08-28 21:45:17+02 jv Exp $
404cbe93 6# Author : Johan Vromans
7# Created On : Tue Sep 11 15:00:12 1990
8# Last Modified By: Johan Vromans
22d4bb9c 9# Last Modified On: Mon Jul 31 21:21:13 2000
10# Update Count : 739
404cbe93 11# Status : Released
12
bb40d378 13################ Copyright ################
f06db76b 14
0b7031a2 15# This program is Copyright 1990,2000 by Johan Vromans.
bb40d378 16# This program is free software; you can redistribute it and/or
1a505819 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#
bb40d378 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.
0b7031a2 26#
bb40d378 27# If you do not have a copy of the GNU General Public License write to
0b7031a2 28# the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
f9a400e4 29# MA 02139, USA.
f06db76b 30
bb40d378 31################ Module Preamble ################
404cbe93 32
bb40d378 33use strict;
404cbe93 34
bb40d378 35BEGIN {
3a0431da 36 require 5.004;
bb40d378 37 use Exporter ();
e6d5c530 38 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
22d4bb9c 39 $VERSION = 2.24;
e6d5c530 40
41 @ISA = qw(Exporter);
42 @EXPORT = qw(&GetOptions $REQUIRE_ORDER $PERMUTE $RETURN_IN_ORDER);
43 %EXPORT_TAGS = qw();
44 @EXPORT_OK = qw();
45 use AutoLoader qw(AUTOLOAD);
bb40d378 46}
404cbe93 47
bb40d378 48# User visible variables.
e6d5c530 49use vars @EXPORT, @EXPORT_OK;
bb40d378 50use vars qw($error $debug $major_version $minor_version);
51# Deprecated visible variables.
52use vars qw($autoabbrev $getopt_compat $ignorecase $bundling $order
53 $passthrough);
e6d5c530 54# Official invisible variables.
22d4bb9c 55use vars qw($genprefix $caller $gnu_compat);
e6d5c530 56
0b7031a2 57# Public subroutines.
e6d5c530 58sub Configure (@);
59sub config (@); # deprecated name
60sub GetOptions;
61
0b7031a2 62# Private subroutines.
e6d5c530 63sub ConfigDefaults ();
64sub FindOption ($$$$$$$);
65sub Croak (@); # demand loading the real Croak
404cbe93 66
bb40d378 67################ Local Variables ################
404cbe93 68
e6d5c530 69################ Resident subroutines ################
70
71sub ConfigDefaults () {
72 # Handle POSIX compliancy.
73 if ( defined $ENV{"POSIXLY_CORRECT"} ) {
74 $genprefix = "(--|-)";
75 $autoabbrev = 0; # no automatic abbrev of options
76 $bundling = 0; # no bundling of single letter switches
77 $getopt_compat = 0; # disallow '+' to start options
78 $order = $REQUIRE_ORDER;
79 }
80 else {
81 $genprefix = "(--|-|\\+)";
82 $autoabbrev = 1; # automatic abbrev of options
83 $bundling = 0; # bundling off by default
84 $getopt_compat = 1; # allow '+' to start options
85 $order = $PERMUTE;
86 }
87 # Other configurable settings.
88 $debug = 0; # for debugging
89 $error = 0; # error tally
90 $ignorecase = 1; # ignore case when matching options
91 $passthrough = 0; # leave unrecognized options alone
22d4bb9c 92 $gnu_compat = 0; # require --opt=val if value is optional
93}
94
95# Override import.
96sub import {
97 my $pkg = shift; # package
98 my @syms = (); # symbols to import
99 my @config = (); # configuration
100 my $dest = \@syms; # symbols first
101 for ( @_ ) {
102 if ( $_ eq ':config' ) {
103 $dest = \@config; # config next
104 next;
105 }
106 push (@$dest, $_); # push
107 }
108 # Hide one level and call super.
109 local $Exporter::ExportLevel = 1;
110 $pkg->SUPER::import(@syms);
111 # And configure.
112 Configure (@config) if @config;
e6d5c530 113}
114
115################ Initialization ################
116
117# Values for $order. See GNU getopt.c for details.
118($REQUIRE_ORDER, $PERMUTE, $RETURN_IN_ORDER) = (0..2);
119# Version major/minor numbers.
120($major_version, $minor_version) = $VERSION =~ /^(\d+)\.(\d+)/;
121
0b7031a2 122ConfigDefaults();
123
22d4bb9c 124################ OO Interface ################
125
126package Getopt::Long::Parser;
127
128# NOTE: The object oriented routines use $error for thread locking.
129my $_lock = sub {
130 lock ($Getopt::Long::error) if $] >= 5.005
131};
132
133# Store a copy of the default configuration. Since ConfigDefaults has
134# just been called, what we get from Configure is the default.
135my $default_config = do {
136 &$_lock;
137 Getopt::Long::Configure ()
138};
139
140sub new {
141 my $that = shift;
142 my $class = ref($that) || $that;
143 my %atts = @_;
144
145 # Register the callers package.
146 my $self = { caller => (caller)[0] };
147
148 bless ($self, $class);
149
150 # Process config attributes.
151 if ( defined $atts{config} ) {
152 &$_lock;
153 my $save = Getopt::Long::Configure ($default_config, @{$atts{config}});
154 $self->{settings} = Getopt::Long::Configure ($save);
155 delete ($atts{config});
156 }
157 # Else use default config.
158 else {
159 $self->{settings} = $default_config;
160 }
161
162 if ( %atts ) { # Oops
163 Getopt::Long::Croak(__PACKAGE__.": unhandled attributes: ".
164 join(" ", sort(keys(%atts))));
165 }
166
167 $self;
168}
169
170sub configure {
171 my ($self) = shift;
172
173 &$_lock;
174
175 # Restore settings, merge new settings in.
176 my $save = Getopt::Long::Configure ($self->{settings}, @_);
177
178 # Restore orig config and save the new config.
179 $self->{settings} = Configure ($save);
180}
181
182sub getoptions {
183 my ($self) = shift;
184
185 &$_lock;
186
187 # Restore config settings.
188 my $save = Getopt::Long::Configure ($self->{settings});
189
190 # Call main routine.
191 my $ret = 0;
192 $Getopt::Long::caller = $self->{caller};
193 eval { $ret = Getopt::Long::GetOptions (@_); };
194
195 # Restore saved settings.
196 Getopt::Long::Configure ($save);
197
198 # Handle errors and return value.
199 die ($@) if $@;
200 return $ret;
201}
202
203package Getopt::Long;
204
e6d5c530 205################ Package return ################
206
2071;
208
209__END__
210
211################ AutoLoading subroutines ################
212
22d4bb9c 213# RCS Status : $Id: GetoptLongAl.pl,v 2.29 2000-08-28 21:56:18+02 jv Exp $
e6d5c530 214# Author : Johan Vromans
215# Created On : Fri Mar 27 11:50:30 1998
216# Last Modified By: Johan Vromans
22d4bb9c 217# Last Modified On: Fri Jul 28 19:12:29 2000
218# Update Count : 97
e6d5c530 219# Status : Released
404cbe93 220
bb40d378 221sub GetOptions {
404cbe93 222
bb40d378 223 my @optionlist = @_; # local copy of the option descriptions
e6d5c530 224 my $argend = '--'; # option list terminator
225 my %opctl = (); # table of arg.specs (long and abbrevs)
226 my %bopctl = (); # table of arg.specs (bundles)
0b7031a2 227 my $pkg = $caller || (caller)[0]; # current context
bb40d378 228 # Needed if linkage is omitted.
e6d5c530 229 my %aliases= (); # alias table
bb40d378 230 my @ret = (); # accum for non-options
231 my %linkage; # linkage
232 my $userlinkage; # user supplied HASH
e6d5c530 233 my $opt; # current option
234 my $genprefix = $genprefix; # so we can call the same module many times
235 my @opctl; # the possible long option names
236
bb40d378 237 $error = '';
404cbe93 238
e6d5c530 239 print STDERR ("GetOpt::Long $Getopt::Long::VERSION ",
240 "called from package \"$pkg\".",
241 "\n ",
22d4bb9c 242 'GetOptionsAl $Revision: 2.29 $ ',
e6d5c530 243 "\n ",
244 "ARGV: (@ARGV)",
245 "\n ",
246 "autoabbrev=$autoabbrev,".
247 "bundling=$bundling,",
248 "getopt_compat=$getopt_compat,",
22d4bb9c 249 "gnu_compat=$gnu_compat,",
e6d5c530 250 "order=$order,",
251 "\n ",
252 "ignorecase=$ignorecase,",
253 "passthrough=$passthrough,",
254 "genprefix=\"$genprefix\".",
255 "\n")
bb40d378 256 if $debug;
404cbe93 257
0b7031a2 258 # Check for ref HASH as first argument.
bb40d378 259 # First argument may be an object. It's OK to use this as long
0b7031a2 260 # as it is really a hash underneath.
bb40d378 261 $userlinkage = undef;
262 if ( ref($optionlist[0]) and
263 "$optionlist[0]" =~ /^(?:.*\=)?HASH\([^\(]*\)$/ ) {
264 $userlinkage = shift (@optionlist);
265 print STDERR ("=> user linkage: $userlinkage\n") if $debug;
266 }
404cbe93 267
bb40d378 268 # See if the first element of the optionlist contains option
269 # starter characters.
1a505819 270 # Be careful not to interpret '<>' as option starters.
271 if ( $optionlist[0] =~ /^\W+$/
272 && !($optionlist[0] eq '<>'
273 && @optionlist > 0
274 && ref($optionlist[1])) ) {
bb40d378 275 $genprefix = shift (@optionlist);
276 # Turn into regexp. Needs to be parenthesized!
277 $genprefix =~ s/(\W)/\\$1/g;
278 $genprefix = "([" . $genprefix . "])";
279 }
404cbe93 280
bb40d378 281 # Verify correctness of optionlist.
282 %opctl = ();
283 %bopctl = ();
284 while ( @optionlist > 0 ) {
285 my $opt = shift (@optionlist);
404cbe93 286
bb40d378 287 # Strip leading prefix so people can specify "--foo=i" if they like.
3a0431da 288 $opt = $+ if $opt =~ /^$genprefix+(.*)$/s;
404cbe93 289
bb40d378 290 if ( $opt eq '<>' ) {
291 if ( (defined $userlinkage)
292 && !(@optionlist > 0 && ref($optionlist[0]))
293 && (exists $userlinkage->{$opt})
294 && ref($userlinkage->{$opt}) ) {
295 unshift (@optionlist, $userlinkage->{$opt});
296 }
0b7031a2 297 unless ( @optionlist > 0
bb40d378 298 && ref($optionlist[0]) && ref($optionlist[0]) eq 'CODE' ) {
299 $error .= "Option spec <> requires a reference to a subroutine\n";
300 next;
301 }
302 $linkage{'<>'} = shift (@optionlist);
303 next;
304 }
404cbe93 305
22d4bb9c 306 # Match option spec. Allow '?' as an alias only.
e6d5c530 307 if ( $opt !~ /^((\w+[-\w]*)(\|(\?|\w[-\w]*)?)*)?([!~+]|[=:][infse][@%]?)?$/ ) {
bb40d378 308 $error .= "Error in option spec: \"$opt\"\n";
309 next;
310 }
311 my ($o, $c, $a) = ($1, $5);
312 $c = '' unless defined $c;
404cbe93 313
22d4bb9c 314 # $linko keeps track of the primary name the user specified.
315 # This name will be used for the internal or external linkage.
316 # In other words, if the user specifies "FoO|BaR", it will
317 # match any case combinations of 'foo' and 'bar', but if a global
318 # variable needs to be set, it will be $opt_FoO in the exact case
319 # as specified.
320 my $linko;
321
bb40d378 322 if ( ! defined $o ) {
323 # empty -> '-' option
22d4bb9c 324 $opctl{$linko = $o = ''} = $c;
bb40d378 325 }
326 else {
327 # Handle alias names
328 my @o = split (/\|/, $o);
22d4bb9c 329 $linko = $o = $o[0];
bb40d378 330 # Force an alias if the option name is not locase.
331 $a = $o unless $o eq lc($o);
332 $o = lc ($o)
0b7031a2 333 if $ignorecase > 1
bb40d378 334 || ($ignorecase
335 && ($bundling ? length($o) > 1 : 1));
404cbe93 336
bb40d378 337 foreach ( @o ) {
338 if ( $bundling && length($_) == 1 ) {
339 $_ = lc ($_) if $ignorecase > 1;
340 if ( $c eq '!' ) {
341 $opctl{"no$_"} = $c;
342 warn ("Ignoring '!' modifier for short option $_\n");
ee8c7f54 343 $opctl{$_} = $bopctl{$_} = '';
344 }
345 else {
346 $opctl{$_} = $bopctl{$_} = $c;
bb40d378 347 }
bb40d378 348 }
349 else {
350 $_ = lc ($_) if $ignorecase;
351 if ( $c eq '!' ) {
352 $opctl{"no$_"} = $c;
ee8c7f54 353 $opctl{$_} = ''
354 }
355 else {
356 $opctl{$_} = $c;
bb40d378 357 }
bb40d378 358 }
359 if ( defined $a ) {
360 # Note alias.
361 $aliases{$_} = $a;
362 }
363 else {
364 # Set primary name.
365 $a = $_;
366 }
367 }
bb40d378 368 }
404cbe93 369
bb40d378 370 # If no linkage is supplied in the @optionlist, copy it from
371 # the userlinkage if available.
372 if ( defined $userlinkage ) {
373 unless ( @optionlist > 0 && ref($optionlist[0]) ) {
22d4bb9c 374 if ( exists $userlinkage->{$linko} &&
375 ref($userlinkage->{$linko}) ) {
376 print STDERR ("=> found userlinkage for \"$linko\": ",
377 "$userlinkage->{$linko}\n")
bb40d378 378 if $debug;
22d4bb9c 379 unshift (@optionlist, $userlinkage->{$linko});
bb40d378 380 }
381 else {
382 # Do nothing. Being undefined will be handled later.
383 next;
384 }
385 }
386 }
404cbe93 387
bb40d378 388 # Copy the linkage. If omitted, link to global variable.
389 if ( @optionlist > 0 && ref($optionlist[0]) ) {
22d4bb9c 390 print STDERR ("=> link \"$linko\" to $optionlist[0]\n")
bb40d378 391 if $debug;
392 if ( ref($optionlist[0]) =~ /^(SCALAR|CODE)$/ ) {
22d4bb9c 393 $linkage{$linko} = shift (@optionlist);
bb40d378 394 }
395 elsif ( ref($optionlist[0]) =~ /^(ARRAY)$/ ) {
22d4bb9c 396 $linkage{$linko} = shift (@optionlist);
bb40d378 397 $opctl{$o} .= '@'
398 if $opctl{$o} ne '' and $opctl{$o} !~ /\@$/;
399 $bopctl{$o} .= '@'
0b7031a2 400 if $bundling and defined $bopctl{$o} and
bb40d378 401 $bopctl{$o} ne '' and $bopctl{$o} !~ /\@$/;
402 }
403 elsif ( ref($optionlist[0]) =~ /^(HASH)$/ ) {
22d4bb9c 404 $linkage{$linko} = shift (@optionlist);
bb40d378 405 $opctl{$o} .= '%'
406 if $opctl{$o} ne '' and $opctl{$o} !~ /\%$/;
407 $bopctl{$o} .= '%'
0b7031a2 408 if $bundling and defined $bopctl{$o} and
bb40d378 409 $bopctl{$o} ne '' and $bopctl{$o} !~ /\%$/;
410 }
411 else {
412 $error .= "Invalid option linkage for \"$opt\"\n";
413 }
414 }
415 else {
416 # Link to global $opt_XXX variable.
417 # Make sure a valid perl identifier results.
22d4bb9c 418 my $ov = $linko;
bb40d378 419 $ov =~ s/\W/_/g;
420 if ( $c =~ /@/ ) {
22d4bb9c 421 print STDERR ("=> link \"$linko\" to \@$pkg","::opt_$ov\n")
bb40d378 422 if $debug;
22d4bb9c 423 eval ("\$linkage{\$linko} = \\\@".$pkg."::opt_$ov;");
bb40d378 424 }
425 elsif ( $c =~ /%/ ) {
22d4bb9c 426 print STDERR ("=> link \"$linko\" to \%$pkg","::opt_$ov\n")
bb40d378 427 if $debug;
22d4bb9c 428 eval ("\$linkage{\$linko} = \\\%".$pkg."::opt_$ov;");
bb40d378 429 }
430 else {
22d4bb9c 431 print STDERR ("=> link \"$linko\" to \$$pkg","::opt_$ov\n")
bb40d378 432 if $debug;
22d4bb9c 433 eval ("\$linkage{\$linko} = \\\$".$pkg."::opt_$ov;");
bb40d378 434 }
435 }
436 }
437
438 # Bail out if errors found.
439 die ($error) if $error;
440 $error = 0;
441
442 # Sort the possible long option names.
443 @opctl = sort(keys (%opctl)) if $autoabbrev;
444
445 # Show the options tables if debugging.
446 if ( $debug ) {
447 my ($arrow, $k, $v);
448 $arrow = "=> ";
449 while ( ($k,$v) = each(%opctl) ) {
450 print STDERR ($arrow, "\$opctl{\"$k\"} = \"$v\"\n");
451 $arrow = " ";
452 }
453 $arrow = "=> ";
454 while ( ($k,$v) = each(%bopctl) ) {
455 print STDERR ($arrow, "\$bopctl{\"$k\"} = \"$v\"\n");
456 $arrow = " ";
457 }
458 }
459
460 # Process argument list
0b7031a2 461 my $goon = 1;
462 while ( $goon && @ARGV > 0 ) {
bb40d378 463
464 #### Get next argument ####
465
466 $opt = shift (@ARGV);
bb40d378 467 print STDERR ("=> option \"", $opt, "\"\n") if $debug;
468
469 #### Determine what we have ####
470
471 # Double dash is option list terminator.
472 if ( $opt eq $argend ) {
473 # Finish. Push back accumulated arguments and return.
0b7031a2 474 unshift (@ARGV, @ret)
bb40d378 475 if $order == $PERMUTE;
476 return ($error == 0);
477 }
478
479 my $tryopt = $opt;
e6d5c530 480 my $found; # success status
481 my $dsttype; # destination type ('@' or '%')
0b7031a2 482 my $incr; # destination increment
e6d5c530 483 my $key; # key (if hash type)
484 my $arg; # option argument
485
0b7031a2 486 ($found, $opt, $arg, $dsttype, $incr, $key) =
487 FindOption ($genprefix, $argend, $opt,
e6d5c530 488 \%opctl, \%bopctl, \@opctl, \%aliases);
bb40d378 489
e6d5c530 490 if ( $found ) {
0b7031a2 491
e6d5c530 492 # FindOption undefines $opt in case of errors.
bb40d378 493 next unless defined $opt;
494
495 if ( defined $arg ) {
22d4bb9c 496 if ( defined $aliases{$opt} ) {
497 print STDERR ("=> alias \"$opt\" -> \"$aliases{$opt}\"\n")
498 if $debug;
499 $opt = $aliases{$opt};
500 }
bb40d378 501
502 if ( defined $linkage{$opt} ) {
503 print STDERR ("=> ref(\$L{$opt}) -> ",
504 ref($linkage{$opt}), "\n") if $debug;
505
506 if ( ref($linkage{$opt}) eq 'SCALAR' ) {
e6d5c530 507 if ( $incr ) {
508 print STDERR ("=> \$\$L{$opt} += \"$arg\"\n")
509 if $debug;
510 if ( defined ${$linkage{$opt}} ) {
511 ${$linkage{$opt}} += $arg;
512 }
513 else {
514 ${$linkage{$opt}} = $arg;
515 }
516 }
517 else {
518 print STDERR ("=> \$\$L{$opt} = \"$arg\"\n")
519 if $debug;
520 ${$linkage{$opt}} = $arg;
521 }
bb40d378 522 }
523 elsif ( ref($linkage{$opt}) eq 'ARRAY' ) {
524 print STDERR ("=> push(\@{\$L{$opt}, \"$arg\")\n")
525 if $debug;
526 push (@{$linkage{$opt}}, $arg);
527 }
528 elsif ( ref($linkage{$opt}) eq 'HASH' ) {
529 print STDERR ("=> \$\$L{$opt}->{$key} = \"$arg\"\n")
530 if $debug;
531 $linkage{$opt}->{$key} = $arg;
532 }
533 elsif ( ref($linkage{$opt}) eq 'CODE' ) {
534 print STDERR ("=> &L{$opt}(\"$opt\", \"$arg\")\n")
535 if $debug;
0b7031a2 536 local ($@);
537 eval {
538 &{$linkage{$opt}}($opt, $arg);
539 };
540 print STDERR ("=> die($@)\n") if $debug && $@ ne '';
ee8c7f54 541 if ( $@ =~ /^!/ ) {
542 if ( $@ =~ /^!FINISH\b/ ) {
543 $goon = 0;
544 }
0b7031a2 545 }
546 elsif ( $@ ne '' ) {
547 warn ($@);
548 $error++;
549 }
bb40d378 550 }
551 else {
552 print STDERR ("Invalid REF type \"", ref($linkage{$opt}),
553 "\" in linkage\n");
e6d5c530 554 Croak ("Getopt::Long -- internal error!\n");
bb40d378 555 }
556 }
557 # No entry in linkage means entry in userlinkage.
e6d5c530 558 elsif ( $dsttype eq '@' ) {
bb40d378 559 if ( defined $userlinkage->{$opt} ) {
560 print STDERR ("=> push(\@{\$L{$opt}}, \"$arg\")\n")
561 if $debug;
562 push (@{$userlinkage->{$opt}}, $arg);
563 }
564 else {
565 print STDERR ("=>\$L{$opt} = [\"$arg\"]\n")
566 if $debug;
567 $userlinkage->{$opt} = [$arg];
568 }
569 }
e6d5c530 570 elsif ( $dsttype eq '%' ) {
bb40d378 571 if ( defined $userlinkage->{$opt} ) {
572 print STDERR ("=> \$L{$opt}->{$key} = \"$arg\"\n")
573 if $debug;
574 $userlinkage->{$opt}->{$key} = $arg;
575 }
576 else {
577 print STDERR ("=>\$L{$opt} = {$key => \"$arg\"}\n")
578 if $debug;
579 $userlinkage->{$opt} = {$key => $arg};
580 }
581 }
582 else {
e6d5c530 583 if ( $incr ) {
584 print STDERR ("=> \$L{$opt} += \"$arg\"\n")
585 if $debug;
586 if ( defined $userlinkage->{$opt} ) {
587 $userlinkage->{$opt} += $arg;
588 }
589 else {
590 $userlinkage->{$opt} = $arg;
591 }
592 }
593 else {
594 print STDERR ("=>\$L{$opt} = \"$arg\"\n") if $debug;
595 $userlinkage->{$opt} = $arg;
596 }
bb40d378 597 }
598 }
599 }
600
601 # Not an option. Save it if we $PERMUTE and don't have a <>.
602 elsif ( $order == $PERMUTE ) {
603 # Try non-options call-back.
604 my $cb;
605 if ( (defined ($cb = $linkage{'<>'})) ) {
0b7031a2 606 local ($@);
607 eval {
608 &$cb ($tryopt);
609 };
610 print STDERR ("=> die($@)\n") if $debug && $@ ne '';
ee8c7f54 611 if ( $@ =~ /^!/ ) {
612 if ( $@ =~ /^!FINISH\b/ ) {
613 $goon = 0;
614 }
0b7031a2 615 }
616 elsif ( $@ ne '' ) {
617 warn ($@);
618 $error++;
619 }
bb40d378 620 }
621 else {
622 print STDERR ("=> saving \"$tryopt\" ",
623 "(not an option, may permute)\n") if $debug;
624 push (@ret, $tryopt);
625 }
626 next;
627 }
628
629 # ...otherwise, terminate.
630 else {
631 # Push this one back and exit.
632 unshift (@ARGV, $tryopt);
633 return ($error == 0);
634 }
635
636 }
637
638 # Finish.
639 if ( $order == $PERMUTE ) {
640 # Push back accumulated arguments
641 print STDERR ("=> restoring \"", join('" "', @ret), "\"\n")
642 if $debug && @ret > 0;
643 unshift (@ARGV, @ret) if @ret > 0;
644 }
645
646 return ($error == 0);
647}
648
e6d5c530 649# Option lookup.
650sub FindOption ($$$$$$$) {
bb40d378 651
e6d5c530 652 # returns (1, $opt, $arg, $dsttype, $incr, $key) if okay,
653 # returns (0) otherwise.
bb40d378 654
e6d5c530 655 my ($prefix, $argend, $opt, $opctl, $bopctl, $names, $aliases) = @_;
656 my $key; # hash key for a hash option
657 my $arg;
bb40d378 658
e6d5c530 659 print STDERR ("=> find \"$opt\", prefix=\"$prefix\"\n") if $debug;
bb40d378 660
e6d5c530 661 return (0) unless $opt =~ /^$prefix(.*)$/s;
bb40d378 662
3a0431da 663 $opt = $+;
bb40d378 664 my ($starter) = $1;
665
666 print STDERR ("=> split \"$starter\"+\"$opt\"\n") if $debug;
667
668 my $optarg = undef; # value supplied with --opt=value
669 my $rest = undef; # remainder from unbundling
670
671 # If it is a long option, it may include the value.
672 if (($starter eq "--" || ($getopt_compat && !$bundling))
3a0431da 673 && $opt =~ /^([^=]+)=(.*)$/s ) {
bb40d378 674 $opt = $1;
675 $optarg = $2;
0b7031a2 676 print STDERR ("=> option \"", $opt,
bb40d378 677 "\", optarg = \"$optarg\"\n") if $debug;
678 }
679
680 #### Look it up ###
681
682 my $tryopt = $opt; # option to try
e6d5c530 683 my $optbl = $opctl; # table to look it up (long names)
bb40d378 684 my $type;
e6d5c530 685 my $dsttype = '';
686 my $incr = 0;
bb40d378 687
688 if ( $bundling && $starter eq '-' ) {
689 # Unbundle single letter option.
690 $rest = substr ($tryopt, 1);
691 $tryopt = substr ($tryopt, 0, 1);
692 $tryopt = lc ($tryopt) if $ignorecase > 1;
693 print STDERR ("=> $starter$tryopt unbundled from ",
694 "$starter$tryopt$rest\n") if $debug;
695 $rest = undef unless $rest ne '';
e6d5c530 696 $optbl = $bopctl; # look it up in the short names table
bb40d378 697
698 # If bundling == 2, long options can override bundles.
699 if ( $bundling == 2 and
f9a400e4 700 defined ($rest) and
e6d5c530 701 defined ($type = $opctl->{$tryopt.$rest}) ) {
bb40d378 702 print STDERR ("=> $starter$tryopt rebundled to ",
703 "$starter$tryopt$rest\n") if $debug;
704 $tryopt .= $rest;
705 undef $rest;
706 }
0b7031a2 707 }
bb40d378 708
709 # Try auto-abbreviation.
710 elsif ( $autoabbrev ) {
711 # Downcase if allowed.
712 $tryopt = $opt = lc ($opt) if $ignorecase;
713 # Turn option name into pattern.
714 my $pat = quotemeta ($opt);
715 # Look up in option names.
e6d5c530 716 my @hits = grep (/^$pat/, @{$names});
bb40d378 717 print STDERR ("=> ", scalar(@hits), " hits (@hits) with \"$pat\" ",
e6d5c530 718 "out of ", scalar(@{$names}), "\n") if $debug;
bb40d378 719
720 # Check for ambiguous results.
721 unless ( (@hits <= 1) || (grep ($_ eq $opt, @hits) == 1) ) {
722 # See if all matches are for the same option.
723 my %hit;
724 foreach ( @hits ) {
e6d5c530 725 $_ = $aliases->{$_} if defined $aliases->{$_};
bb40d378 726 $hit{$_} = 1;
727 }
728 # Now see if it really is ambiguous.
729 unless ( keys(%hit) == 1 ) {
e6d5c530 730 return (0) if $passthrough;
bb40d378 731 warn ("Option ", $opt, " is ambiguous (",
732 join(", ", @hits), ")\n");
733 $error++;
734 undef $opt;
e6d5c530 735 return (1, $opt,$arg,$dsttype,$incr,$key);
bb40d378 736 }
737 @hits = keys(%hit);
738 }
739
740 # Complete the option name, if appropriate.
741 if ( @hits == 1 && $hits[0] ne $opt ) {
742 $tryopt = $hits[0];
743 $tryopt = lc ($tryopt) if $ignorecase;
744 print STDERR ("=> option \"$opt\" -> \"$tryopt\"\n")
745 if $debug;
746 }
747 }
748
749 # Map to all lowercase if ignoring case.
750 elsif ( $ignorecase ) {
751 $tryopt = lc ($opt);
752 }
753
754 # Check validity by fetching the info.
755 $type = $optbl->{$tryopt} unless defined $type;
756 unless ( defined $type ) {
e6d5c530 757 return (0) if $passthrough;
bb40d378 758 warn ("Unknown option: ", $opt, "\n");
759 $error++;
e6d5c530 760 return (1, $opt,$arg,$dsttype,$incr,$key);
bb40d378 761 }
762 # Apparently valid.
763 $opt = $tryopt;
22d4bb9c 764 print STDERR ("=> found \"$type\" for \"", $opt, "\"\n") if $debug;
bb40d378 765
766 #### Determine argument status ####
767
768 # If it is an option w/o argument, we're almost finished with it.
e6d5c530 769 if ( $type eq '' || $type eq '!' || $type eq '+' ) {
bb40d378 770 if ( defined $optarg ) {
e6d5c530 771 return (0) if $passthrough;
bb40d378 772 warn ("Option ", $opt, " does not take an argument\n");
773 $error++;
774 undef $opt;
775 }
e6d5c530 776 elsif ( $type eq '' || $type eq '+' ) {
bb40d378 777 $arg = 1; # supply explicit value
e6d5c530 778 $incr = $type eq '+';
bb40d378 779 }
780 else {
781 substr ($opt, 0, 2) = ''; # strip NO prefix
782 $arg = 0; # supply explicit value
783 }
784 unshift (@ARGV, $starter.$rest) if defined $rest;
e6d5c530 785 return (1, $opt,$arg,$dsttype,$incr,$key);
bb40d378 786 }
787
788 # Get mandatory status and type info.
789 my $mand;
e6d5c530 790 ($mand, $type, $dsttype, $key) = $type =~ /^(.)(.)([@%]?)$/;
bb40d378 791
792 # Check if there is an option argument available.
22d4bb9c 793 if ( $gnu_compat ) {
794 return (1, $opt, $optarg, $dsttype, $incr, $key)
795 if defined $optarg;
796 return (1, $opt, $type eq "s" ? '' : 0, $dsttype, $incr, $key)
797 if $mand eq ':';
798 }
799
800 # Check if there is an option argument available.
801 if ( defined $optarg
802 ? ($optarg eq '')
bb40d378 803 : !(defined $rest || @ARGV > 0) ) {
804 # Complain if this option needs an argument.
805 if ( $mand eq "=" ) {
e6d5c530 806 return (0) if $passthrough;
bb40d378 807 warn ("Option ", $opt, " requires an argument\n");
808 $error++;
809 undef $opt;
810 }
22d4bb9c 811 return (1, $opt, $type eq "s" ? '' : 0, $dsttype, $incr, $key);
bb40d378 812 }
813
814 # Get (possibly optional) argument.
815 $arg = (defined $rest ? $rest
816 : (defined $optarg ? $optarg : shift (@ARGV)));
817
818 # Get key if this is a "name=value" pair for a hash option.
819 $key = undef;
e6d5c530 820 if ($dsttype eq '%' && defined $arg) {
0b7031a2 821 ($key, $arg) = ($arg =~ /^([^=]*)=(.*)$/s) ? ($1, $2) : ($arg, 1);
bb40d378 822 }
823
824 #### Check if the argument is valid for this option ####
825
826 if ( $type eq "s" ) { # string
0b7031a2 827 # A mandatory string takes anything.
e6d5c530 828 return (1, $opt,$arg,$dsttype,$incr,$key) if $mand eq "=";
bb40d378 829
0b7031a2 830 # An optional string takes almost anything.
831 return (1, $opt,$arg,$dsttype,$incr,$key)
e6d5c530 832 if defined $optarg || defined $rest;
833 return (1, $opt,$arg,$dsttype,$incr,$key) if $arg eq "-"; # ??
bb40d378 834
835 # Check for option or option list terminator.
836 if ($arg eq $argend ||
e6d5c530 837 $arg =~ /^$prefix.+/) {
bb40d378 838 # Push back.
839 unshift (@ARGV, $arg);
840 # Supply empty value.
841 $arg = '';
842 }
843 }
844
845 elsif ( $type eq "n" || $type eq "i" ) { # numeric/integer
0b7031a2 846 if ( $bundling && defined $rest && $rest =~ /^([-+]?[0-9]+)(.*)$/s ) {
bb40d378 847 $arg = $1;
848 $rest = $2;
849 unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
850 }
0b7031a2 851 elsif ( $arg !~ /^[-+]?[0-9]+$/ ) {
bb40d378 852 if ( defined $optarg || $mand eq "=" ) {
853 if ( $passthrough ) {
854 unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
855 unless defined $optarg;
e6d5c530 856 return (0);
bb40d378 857 }
858 warn ("Value \"", $arg, "\" invalid for option ",
859 $opt, " (number expected)\n");
860 $error++;
861 undef $opt;
862 # Push back.
863 unshift (@ARGV, $starter.$rest) if defined $rest;
864 }
865 else {
866 # Push back.
867 unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
868 # Supply default value.
869 $arg = 0;
870 }
871 }
872 }
873
874 elsif ( $type eq "f" ) { # real number, int is also ok
875 # We require at least one digit before a point or 'e',
876 # and at least one digit following the point and 'e'.
877 # [-]NN[.NN][eNN]
878 if ( $bundling && defined $rest &&
0b7031a2 879 $rest =~ /^([-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)?)(.*)$/s ) {
bb40d378 880 $arg = $1;
3a0431da 881 $rest = $+;
bb40d378 882 unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
883 }
0b7031a2 884 elsif ( $arg !~ /^[-+]?[0-9.]+(\.[0-9]+)?([eE][-+]?[0-9]+)?$/ ) {
bb40d378 885 if ( defined $optarg || $mand eq "=" ) {
886 if ( $passthrough ) {
887 unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
888 unless defined $optarg;
e6d5c530 889 return (0);
bb40d378 890 }
891 warn ("Value \"", $arg, "\" invalid for option ",
892 $opt, " (real number expected)\n");
893 $error++;
894 undef $opt;
895 # Push back.
896 unshift (@ARGV, $starter.$rest) if defined $rest;
897 }
898 else {
899 # Push back.
900 unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
901 # Supply default value.
902 $arg = 0.0;
903 }
904 }
905 }
906 else {
e6d5c530 907 Croak ("GetOpt::Long internal error (Can't happen)\n");
bb40d378 908 }
e6d5c530 909 return (1, $opt, $arg, $dsttype, $incr, $key);
910}
bb40d378 911
e6d5c530 912# Getopt::Long Configuration.
913sub Configure (@) {
914 my (@options) = @_;
0b7031a2 915
916 my $prevconfig =
917 [ $error, $debug, $major_version, $minor_version,
918 $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
22d4bb9c 919 $gnu_compat, $passthrough, $genprefix ];
0b7031a2 920
921 if ( ref($options[0]) eq 'ARRAY' ) {
922 ( $error, $debug, $major_version, $minor_version,
923 $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
22d4bb9c 924 $gnu_compat, $passthrough, $genprefix ) = @{shift(@options)};
0b7031a2 925 }
926
e6d5c530 927 my $opt;
928 foreach $opt ( @options ) {
929 my $try = lc ($opt);
930 my $action = 1;
931 if ( $try =~ /^no_?(.*)$/s ) {
932 $action = 0;
933 $try = $+;
934 }
22d4bb9c 935 if ( ($try eq 'default' or $try eq 'defaults') && $action ) {
936 ConfigDefaults ();
937 }
938 elsif ( ($try eq 'posix_default' or $try eq 'posix_defaults') ) {
939 local $ENV{POSIXLY_CORRECT};
940 $ENV{POSIXLY_CORRECT} = 1 if $action;
941 ConfigDefaults ();
e6d5c530 942 }
943 elsif ( $try eq 'auto_abbrev' or $try eq 'autoabbrev' ) {
944 $autoabbrev = $action;
945 }
946 elsif ( $try eq 'getopt_compat' ) {
947 $getopt_compat = $action;
948 }
22d4bb9c 949 elsif ( $try eq 'gnu_getopt' ) {
950 if ( $action ) {
951 $gnu_compat = 1;
952 $bundling = 1;
953 $getopt_compat = 0;
954 $permute = 1;
955 }
956 }
957 elsif ( $try eq 'gnu_compat' ) {
958 $gnu_compat = $action;
959 }
e6d5c530 960 elsif ( $try eq 'ignorecase' or $try eq 'ignore_case' ) {
961 $ignorecase = $action;
962 }
963 elsif ( $try eq 'ignore_case_always' ) {
964 $ignorecase = $action ? 2 : 0;
965 }
966 elsif ( $try eq 'bundling' ) {
967 $bundling = $action;
968 }
969 elsif ( $try eq 'bundling_override' ) {
970 $bundling = $action ? 2 : 0;
971 }
972 elsif ( $try eq 'require_order' ) {
973 $order = $action ? $REQUIRE_ORDER : $PERMUTE;
974 }
975 elsif ( $try eq 'permute' ) {
976 $order = $action ? $PERMUTE : $REQUIRE_ORDER;
977 }
978 elsif ( $try eq 'pass_through' or $try eq 'passthrough' ) {
979 $passthrough = $action;
980 }
22d4bb9c 981 elsif ( $try =~ /^prefix=(.+)$/ && $action ) {
e6d5c530 982 $genprefix = $1;
983 # Turn into regexp. Needs to be parenthesized!
984 $genprefix = "(" . quotemeta($genprefix) . ")";
985 eval { '' =~ /$genprefix/; };
986 Croak ("Getopt::Long: invalid pattern \"$genprefix\"") if $@;
987 }
22d4bb9c 988 elsif ( $try =~ /^prefix_pattern=(.+)$/ && $action ) {
e6d5c530 989 $genprefix = $1;
990 # Parenthesize if needed.
0b7031a2 991 $genprefix = "(" . $genprefix . ")"
e6d5c530 992 unless $genprefix =~ /^\(.*\)$/;
993 eval { '' =~ /$genprefix/; };
994 Croak ("Getopt::Long: invalid pattern \"$genprefix\"") if $@;
995 }
996 elsif ( $try eq 'debug' ) {
997 $debug = $action;
998 }
999 else {
1000 Croak ("Getopt::Long: unknown config parameter \"$opt\"")
1001 }
bb40d378 1002 }
0b7031a2 1003 $prevconfig;
e6d5c530 1004}
bb40d378 1005
e6d5c530 1006# Deprecated name.
1007sub config (@) {
1008 Configure (@_);
1009}
bb40d378 1010
e6d5c530 1011# To prevent Carp from being loaded unnecessarily.
1012sub Croak (@) {
1013 require 'Carp.pm';
1014 $Carp::CarpLevel = 1;
1015 Carp::croak(@_);
1016};
bb40d378 1017
e6d5c530 1018################ Documentation ################
bb40d378 1019
1020=head1 NAME
1021
0b7031a2 1022Getopt::Long - Extended processing of command line options
bb40d378 1023
1024=head1 SYNOPSIS
1025
1026 use Getopt::Long;
1027 $result = GetOptions (...option-descriptions...);
1028
1029=head1 DESCRIPTION
1030
1031The Getopt::Long module implements an extended getopt function called
1032GetOptions(). This function adheres to the POSIX syntax for command
1033line options, with GNU extensions. In general, this means that options
1034have long names instead of single letters, and are introduced with a
1035double dash "--". Support for bundling of command line options, as was
1036the case with the more traditional single-letter approach, is provided
0b7031a2 1037but not enabled by default.
1038
1039=head1 Command Line Options, an Introduction
1040
1041Command line operated programs traditionally take their arguments from
1042the command line, for example filenames or other information that the
1043program needs to know. Besides arguments, these programs often take
1044command line I<options> as well. Options are not necessary for the
1045program to work, hence the name 'option', but are used to modify its
1046default behaviour. For example, a program could do its job quietly,
1047but with a suitable option it could provide verbose information about
1048what it did.
1049
1050Command line options come in several flavours. Historically, they are
1051preceded by a single dash C<->, and consist of a single letter.
1052
1053 -l -a -c
1054
1055Usually, these single-character options can be bundled:
1056
1057 -lac
1058
1059Options can have values, the value is placed after the option
1060character. Sometimes with whitespace in between, sometimes not:
1061
1062 -s 24 -s24
1063
1064Due to the very cryptic nature of these options, another style was
1065developed that used long names. So instead of a cryptic C<-l> one
1066could use the more descriptive C<--long>. To distinguish between a
1067bundle of single-character options and a long one, two dashes are used
1068to precede the option name. Early implementations of long options used
1069a plus C<+> instead. Also, option values could be specified either
22d4bb9c 1070like
0b7031a2 1071
1072 --size=24
1073
1074or
1075
1076 --size 24
1077
1078The C<+> form is now obsolete and strongly deprecated.
1079
1080=head1 Getting Started with Getopt::Long
1081
1082Getopt::Long is the Perl5 successor of C<newgetopt.pl>. This was
22d4bb9c 1083the first Perl module that provided support for handling the new style
0b7031a2 1084of command line options, hence the name Getopt::Long. This module
1085also supports single-character options and bundling. In this case, the
1086options are restricted to alphabetic characters only, and the
1087characters C<?> and C<->.
1088
1089To use Getopt::Long from a Perl program, you must include the
1090following line in your Perl program:
1091
1092 use Getopt::Long;
1093
1094This will load the core of the Getopt::Long module and prepare your
1095program for using it. Most of the actual Getopt::Long code is not
1096loaded until you really call one of its functions.
1097
1098In the default configuration, options names may be abbreviated to
1099uniqueness, case does not matter, and a single dash is sufficient,
1100even for long option names. Also, options may be placed between
1101non-option arguments. See L<Configuring Getopt::Long> for more
1102details on how to configure Getopt::Long.
1103
1104=head2 Simple options
1105
1106The most simple options are the ones that take no values. Their mere
1107presence on the command line enables the option. Popular examples are:
1108
1109 --all --verbose --quiet --debug
1110
1111Handling simple options is straightforward:
1112
1113 my $verbose = ''; # option variable with default value (false)
1114 my $all = ''; # option variable with default value (false)
1115 GetOptions ('verbose' => \$verbose, 'all' => \$all);
1116
1117The call to GetOptions() parses the command line arguments that are
1118present in C<@ARGV> and sets the option variable to the value C<1> if
1119the option did occur on the command line. Otherwise, the option
1120variable is not touched. Setting the option value to true is often
1121called I<enabling> the option.
1122
1123The option name as specified to the GetOptions() function is called
1124the option I<specification>. Later we'll see that this specification
1125can contain more than just the option name. The reference to the
1126variable is called the option I<destination>.
1127
1128GetOptions() will return a true value if the command line could be
1129processed successfully. Otherwise, it will write error messages to
1130STDERR, and return a false result.
1131
1132=head2 A little bit less simple options
1133
1134Getopt::Long supports two useful variants of simple options:
1135I<negatable> options and I<incremental> options.
1136
1137A negatable option is specified with a exclamation mark C<!> after the
1138option name:
1139
1140 my $verbose = ''; # option variable with default value (false)
1141 GetOptions ('verbose!' => \$verbose);
1142
1143Now, using C<--verbose> on the command line will enable C<$verbose>,
1144as expected. But it is also allowed to use C<--noverbose>, which will
1145disable C<$verbose> by setting its value to C<0>. Using a suitable
1146default value, the program can find out whether C<$verbose> is false
1147by default, or disabled by using C<--noverbose>.
1148
1149An incremental option is specified with a plus C<+> after the
1150option name:
1151
1152 my $verbose = ''; # option variable with default value (false)
1153 GetOptions ('verbose+' => \$verbose);
1154
1155Using C<--verbose> on the command line will increment the value of
1156C<$verbose>. This way the program can keep track of how many times the
1157option occurred on the command line. For example, each occurrence of
1158C<--verbose> could increase the verbosity level of the program.
1159
1160=head2 Mixing command line option with other arguments
1161
1162Usually programs take command line options as well as other arguments,
1163for example, file names. It is good practice to always specify the
1164options first, and the other arguments last. Getopt::Long will,
1165however, allow the options and arguments to be mixed and 'filter out'
1166all the options before passing the rest of the arguments to the
1167program. To stop Getopt::Long from processing further arguments,
1168insert a double dash C<--> on the command line:
1169
1170 --size 24 -- --all
1171
1172In this example, C<--all> will I<not> be treated as an option, but
1173passed to the program unharmed, in C<@ARGV>.
1174
1175=head2 Options with values
1176
1177For options that take values it must be specified whether the option
1178value is required or not, and what kind of value the option expects.
1179
1180Three kinds of values are supported: integer numbers, floating point
1181numbers, and strings.
1182
1183If the option value is required, Getopt::Long will take the
1184command line argument that follows the option and assign this to the
1185option variable. If, however, the option value is specified as
1186optional, this will only be done if that value does not look like a
1187valid command line option itself.
bb40d378 1188
0b7031a2 1189 my $tag = ''; # option variable with default value
1190 GetOptions ('tag=s' => \$tag);
bb40d378 1191
0b7031a2 1192In the option specification, the option name is followed by an equals
1193sign C<=> and the letter C<s>. The equals sign indicates that this
1194option requires a value. The letter C<s> indicates that this value is
1195an arbitrary string. Other possible value types are C<i> for integer
1196values, and C<f> for floating point values. Using a colon C<:> instead
1197of the equals sign indicates that the option value is optional. In
1198this case, if no suitable value is supplied, string valued options get
1199an empty string C<''> assigned, while numeric options are set to C<0>.
bb40d378 1200
0b7031a2 1201=head2 Options with multiple values
bb40d378 1202
0b7031a2 1203Options sometimes take several values. For example, a program could
1204use multiple directories to search for library files:
bb40d378 1205
0b7031a2 1206 --library lib/stdlib --library lib/extlib
bb40d378 1207
0b7031a2 1208To accomplish this behaviour, simply specify an array reference as the
1209destination for the option:
bb40d378 1210
0b7031a2 1211 my @libfiles = ();
1212 GetOptions ("library=s" => \@libfiles);
bb40d378 1213
0b7031a2 1214Used with the example above, C<@libfiles> would contain two strings
1215upon completion: C<"lib/srdlib"> and C<"lib/extlib">, in that order.
1216It is also possible to specify that only integer or floating point
1217numbers are acceptible values.
bb40d378 1218
0b7031a2 1219Often it is useful to allow comma-separated lists of values as well as
1220multiple occurrences of the options. This is easy using Perl's split()
1221and join() operators:
bb40d378 1222
0b7031a2 1223 my @libfiles = ();
1224 GetOptions ("library=s" => \@libfiles);
1225 @libfiles = split(/,/,join(',',@libfiles));
bb40d378 1226
0b7031a2 1227Of course, it is important to choose the right separator string for
1228each purpose.
3cb6de81 1229
0b7031a2 1230=head2 Options with hash values
bb40d378 1231
0b7031a2 1232If the option destination is a reference to a hash, the option will
1233take, as value, strings of the form I<key>C<=>I<value>. The value will
1234be stored with the specified key in the hash.
bb40d378 1235
0b7031a2 1236 my %defines = ();
1237 GetOptions ("define=s" => \%defines);
bb40d378 1238
0b7031a2 1239When used with command line options:
1240
1241 --define os=linux --define vendor=redhat
1242
1243the hash C<%defines> will contain two keys, C<"os"> with value
1244C<"linux> and C<"vendor"> with value C<"redhat">.
1245It is also possible to specify that only integer or floating point
1246numbers are acceptible values. The keys are always taken to be strings.
1247
1248=head2 User-defined subroutines to handle options
1249
1250Ultimate control over what should be done when (actually: each time)
1251an option is encountered on the command line can be achieved by
1252designating a reference to a subroutine (or an anonymous subroutine)
1253as the option destination. When GetOptions() encounters the option, it
1254will call the subroutine with two arguments: the name of the option,
1255and the value to be assigned. It is up to the subroutine to store the
1256value, or do whatever it thinks is appropriate.
1257
1258A trivial application of this mechanism is to implement options that
1259are related to each other. For example:
1260
1261 my $verbose = ''; # option variable with default value (false)
1262 GetOptions ('verbose' => \$verbose,
1263 'quiet' => sub { $verbose = 0 });
1264
1265Here C<--verbose> and C<--quiet> control the same variable
1266C<$verbose>, but with opposite values.
1267
1268If the subroutine needs to signal an error, it should call die() with
1269the desired error message as its argument. GetOptions() will catch the
1270die(), issue the error message, and record that an error result must
1271be returned upon completion.
1272
ee8c7f54 1273If the text of the error message starts with an exclamantion mark C<!>
1274it is interpreted specially by GetOptions(). There is currently one
1275special command implemented: C<die("!FINISH")> will cause GetOptions()
1276to stop processing options, as if it encountered a double dash C<-->.
0b7031a2 1277
1278=head2 Options with multiple names
1279
1280Often it is user friendly to supply alternate mnemonic names for
1281options. For example C<--height> could be an alternate name for
1282C<--length>. Alternate names can be included in the option
1283specification, separated by vertical bar C<|> characters. To implement
1284the above example:
1285
1286 GetOptions ('length|height=f' => \$length);
1287
1288The first name is called the I<primary> name, the other names are
1289called I<aliases>.
1290
1291Multiple alternate names are possible.
1292
1293=head2 Case and abbreviations
1294
1295Without additional configuration, GetOptions() will ignore the case of
1296option names, and allow the options to be abbreviated to uniqueness.
1297
1298 GetOptions ('length|height=f' => \$length, "head" => \$head);
1299
1300This call will allow C<--l> and C<--L> for the length option, but
1301requires a least C<--hea> and C<--hei> for the head and height options.
1302
1303=head2 Summary of Option Specifications
1304
1305Each option specifier consists of two parts: the name specification
22d4bb9c 1306and the argument specification.
0b7031a2 1307
1308The name specification contains the name of the option, optionally
1309followed by a list of alternative names separated by vertical bar
22d4bb9c 1310characters.
0b7031a2 1311
1312 length option name is "length"
1313 length|size|l name is "length", aliases are "size" and "l"
1314
1315The argument specification is optional. If omitted, the option is
1316considered boolean, a value of 1 will be assigned when the option is
1317used on the command line.
1318
1319The argument specification can be
1320
1321=over
bb40d378 1322
1323=item !
1324
0b7031a2 1325The option does not take an argument and may be negated, i.e. prefixed
1326by "no". E.g. C<"foo!"> will allow C<--foo> (a value of 1 will be
ee8c7f54 1327assigned) and C<--nofoo> (a value of 0 will be assigned). If the
1328option has aliases, this applies to the aliases as well.
1329
1330Using negation on a single letter option when bundling is in effect is
1331pointless and will result in a warning.
bb40d378 1332
e6d5c530 1333=item +
1334
0b7031a2 1335The option does not take an argument and will be incremented by 1
1336every time it appears on the command line. E.g. C<"more+">, when used
1337with C<--more --more --more>, will increment the value three times,
1338resulting in a value of 3 (provided it was 0 or undefined at first).
e6d5c530 1339
0b7031a2 1340The C<+> specifier is ignored if the option destination is not a scalar.
e6d5c530 1341
0b7031a2 1342=item = I<type> [ I<desttype> ]
bb40d378 1343
0b7031a2 1344The option requires an argument of the given type. Supported types
1345are:
bb40d378 1346
0b7031a2 1347=over
bb40d378 1348
0b7031a2 1349=item s
bb40d378 1350
0b7031a2 1351String. An arbitrary sequence of characters. It is valid for the
1352argument to start with C<-> or C<-->.
bb40d378 1353
0b7031a2 1354=item i
bb40d378 1355
0b7031a2 1356Integer. An optional leading plus or minus sign, followed by a
1357sequence of digits.
bb40d378 1358
0b7031a2 1359=item f
bb40d378 1360
0b7031a2 1361Real number. For example C<3.14>, C<-6.23E24> and so on.
bb40d378 1362
0b7031a2 1363=back
1364
1365The I<desttype> can be C<@> or C<%> to specify that the option is
1366list or a hash valued. This is only needed when the destination for
1367the option value is not otherwise specified. It should be omitted when
1368not needed.
1369
1370=item : I<type> [ I<desttype> ]
404cbe93 1371
0b7031a2 1372Like C<=>, but designates the argument as optional.
1373If omitted, an empty string will be assigned to string values options,
1374and the value zero to numeric options.
404cbe93 1375
0b7031a2 1376Note that if a string argument starts with C<-> or C<-->, it will be
1377considered an option on itself.
404cbe93 1378
1379=back
1380
0b7031a2 1381=head1 Advanced Possibilities
404cbe93 1382
22d4bb9c 1383=head2 Object oriented interface
1384
1385Getopt::Long can be used in an object oriented way as well:
1386
1387 use Getopt::Long;
1388 $p = new Getopt::Long::Parser;
1389 $p->configure(...configuration options...);
1390 if ($p->getoptions(...options descriptions...)) ...
1391
1392Configuration options can be passed to the constructor:
1393
1394 $p = new Getopt::Long::Parser
1395 config => [...configuration options...];
1396
1397For thread safety, each method call will acquire an exclusive lock to
1398the Getopt::Long module. So don't call these methods from a callback
1399routine!
1400
0b7031a2 1401=head2 Documentation and help texts
404cbe93 1402
0b7031a2 1403Getopt::Long encourages the use of Pod::Usage to produce help
1404messages. For example:
404cbe93 1405
0b7031a2 1406 use Getopt::Long;
1407 use Pod::Usage;
404cbe93 1408
0b7031a2 1409 my $man = 0;
1410 my $help = 0;
404cbe93 1411
0b7031a2 1412 GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
1413 pod2usage(1) if $help;
1414 pod2usage(-exitstatus => 0, -verbose => 2) if $man;
404cbe93 1415
0b7031a2 1416 __END__
404cbe93 1417
0b7031a2 1418 =head1 NAME
404cbe93 1419
0b7031a2 1420 sample - Using GetOpt::Long and Pod::Usage
404cbe93 1421
0b7031a2 1422 =head1 SYNOPSIS
404cbe93 1423
0b7031a2 1424 sample [options] [file ...]
404cbe93 1425
0b7031a2 1426 Options:
1427 -help brief help message
1428 -man full documentation
381319f7 1429
0b7031a2 1430 =head1 OPTIONS
381319f7 1431
0b7031a2 1432 =over 8
381319f7 1433
0b7031a2 1434 =item B<-help>
381319f7 1435
0b7031a2 1436 Print a brief help message and exits.
404cbe93 1437
0b7031a2 1438 =item B<-man>
404cbe93 1439
0b7031a2 1440 Prints the manual page and exits.
404cbe93 1441
0b7031a2 1442 =back
404cbe93 1443
0b7031a2 1444 =head1 DESCRIPTION
404cbe93 1445
0b7031a2 1446 B<This program> will read the given input file(s) and do someting
1447 useful with the contents thereof.
404cbe93 1448
0b7031a2 1449 =cut
535b5725 1450
0b7031a2 1451See L<Pod::Usage> for details.
535b5725 1452
0b7031a2 1453=head2 Storing options in a hash
404cbe93 1454
0b7031a2 1455Sometimes, for example when there are a lot of options, having a
1456separate variable for each of them can be cumbersome. GetOptions()
1457supports, as an alternative mechanism, storing options in a hash.
404cbe93 1458
0b7031a2 1459To obtain this, a reference to a hash must be passed I<as the first
1460argument> to GetOptions(). For each option that is specified on the
1461command line, the option value will be stored in the hash with the
1462option name as key. Options that are not actually used on the command
1463line will not be put in the hash, on other words,
1464C<exists($h{option})> (or defined()) can be used to test if an option
1465was used. The drawback is that warnings will be issued if the program
1466runs under C<use strict> and uses C<$h{option}> without testing with
1467exists() or defined() first.
381319f7 1468
0b7031a2 1469 my %h = ();
1470 GetOptions (\%h, 'length=i'); # will store in $h{length}
f06db76b 1471
0b7031a2 1472For options that take list or hash values, it is necessary to indicate
1473this by appending an C<@> or C<%> sign after the type:
f06db76b 1474
0b7031a2 1475 GetOptions (\%h, 'colours=s@'); # will push to @{$h{colours}}
f06db76b 1476
0b7031a2 1477To make things more complicated, the hash may contain references to
1478the actual destinations, for example:
f06db76b 1479
0b7031a2 1480 my $len = 0;
1481 my %h = ('length' => \$len);
1482 GetOptions (\%h, 'length=i'); # will store in $len
f06db76b 1483
0b7031a2 1484This example is fully equivalent with:
a11f5414 1485
0b7031a2 1486 my $len = 0;
1487 GetOptions ('length=i' => \$len); # will store in $len
f06db76b 1488
0b7031a2 1489Any mixture is possible. For example, the most frequently used options
1490could be stored in variables while all other options get stored in the
1491hash:
f06db76b 1492
0b7031a2 1493 my $verbose = 0; # frequently referred
1494 my $debug = 0; # frequently referred
1495 my %h = ('verbose' => \$verbose, 'debug' => \$debug);
1496 GetOptions (\%h, 'verbose', 'debug', 'filter', 'size=i');
1497 if ( $verbose ) { ... }
1498 if ( exists $h{filter} ) { ... option 'filter' was specified ... }
f06db76b 1499
0b7031a2 1500=head2 Bundling
f06db76b 1501
0b7031a2 1502With bundling it is possible to set several single-character options
1503at once. For example if C<a>, C<v> and C<x> are all valid options,
bb40d378 1504
0b7031a2 1505 -vax
bb40d378 1506
0b7031a2 1507would set all three.
f06db76b 1508
0b7031a2 1509Getopt::Long supports two levels of bundling. To enable bundling, a
1510call to Getopt::Long::Configure is required.
bb40d378 1511
0b7031a2 1512The first level of bundling can be enabled with:
f06db76b 1513
0b7031a2 1514 Getopt::Long::Configure ("bundling");
404cbe93 1515
0b7031a2 1516Configured this way, single-character options can be bundled but long
1517options B<must> always start with a double dash C<--> to avoid
1518abiguity. For example, when C<vax>, C<a>, C<v> and C<x> are all valid
1519options,
404cbe93 1520
0b7031a2 1521 -vax
381319f7 1522
22d4bb9c 1523would set C<a>, C<v> and C<x>, but
404cbe93 1524
0b7031a2 1525 --vax
404cbe93 1526
0b7031a2 1527would set C<vax>.
a11f5414 1528
0b7031a2 1529The second level of bundling lifts this restriction. It can be enabled
1530with:
a11f5414 1531
0b7031a2 1532 Getopt::Long::Configure ("bundling_override");
a11f5414 1533
0b7031a2 1534Now, C<-vax> would set the option C<vax>.
a11f5414 1535
0b7031a2 1536When any level of bundling is enabled, option values may be inserted
1537in the bundle. For example:
381319f7 1538
0b7031a2 1539 -h24w80
f06db76b 1540
0b7031a2 1541is equivalent to
f06db76b 1542
0b7031a2 1543 -h 24 -w 80
f06db76b 1544
0b7031a2 1545When configured for bundling, single-character options are matched
1546case sensitive while long options are matched case insensitive. To
1547have the single-character options matched case insensitive as well,
1548use:
a0d0e21e 1549
0b7031a2 1550 Getopt::Long::Configure ("bundling", "ignorecase_always");
a0d0e21e 1551
0b7031a2 1552It goes without saying that bundling can be quite confusing.
404cbe93 1553
0b7031a2 1554=head2 The lonesome dash
404cbe93 1555
0b7031a2 1556Some applications require the option C<-> (that's a lone dash). This
1557can be achieved by adding an option specification with an empty name:
a0d0e21e 1558
0b7031a2 1559 GetOptions ('' => \$stdio);
a11f5414 1560
0b7031a2 1561A lone dash on the command line will now be legal, and set options
1562variable C<$stdio>.
a0d0e21e 1563
0b7031a2 1564=head2 Argument call-back
a0d0e21e 1565
0b7031a2 1566A special option 'name' C<<>> can be used to designate a subroutine
1567to handle non-option arguments. When GetOptions() encounters an
1568argument that does not look like an option, it will immediately call this
1569subroutine and passes it the argument as a parameter.
a0d0e21e 1570
0b7031a2 1571For example:
a0d0e21e 1572
0b7031a2 1573 my $width = 80;
1574 sub process { ... }
1575 GetOptions ('width=i' => \$width, '<>' => \&process);
a0d0e21e 1576
0b7031a2 1577When applied to the following command line:
a11f5414 1578
0b7031a2 1579 arg1 --width=72 arg2 --width=60 arg3
404cbe93 1580
22d4bb9c 1581This will call
1582C<process("arg1")> while C<$width> is C<80>,
0b7031a2 1583C<process("arg2")> while C<$width> is C<72>, and
1584C<process("arg3")> while C<$width> is C<60>.
381319f7 1585
0b7031a2 1586This feature requires configuration option B<permute>, see section
1587L<Configuring Getopt::Long>.
a0d0e21e 1588
a0d0e21e 1589
0b7031a2 1590=head1 Configuring Getopt::Long
1591
1592Getopt::Long can be configured by calling subroutine
1593Getopt::Long::Configure(). This subroutine takes a list of quoted
22d4bb9c 1594strings, each specifying a configuration option to be enabled, e.g.
1595C<ignore_case>, or disabled, e.g. C<no_ignore_case>. Case does not
0b7031a2 1596matter. Multiple calls to Configure() are possible.
404cbe93 1597
22d4bb9c 1598Alternatively, as of version 2.24, the configuration options may be
1599passed together with the C<use> statement:
1600
1601 use Getopt::Long qw(:config no_ignore_case bundling);
1602
bb40d378 1603The following options are available:
404cbe93 1604
bb40d378 1605=over 12
a0d0e21e 1606
bb40d378 1607=item default
a0d0e21e 1608
bb40d378 1609This option causes all configuration options to be reset to their
1610default values.
404cbe93 1611
22d4bb9c 1612=item posix_default
1613
1614This option causes all configuration options to be reset to their
1615default values as if the environment variable POSIXLY_CORRECT had
1616been set.
1617
bb40d378 1618=item auto_abbrev
404cbe93 1619
bb40d378 1620Allow option names to be abbreviated to uniqueness.
22d4bb9c 1621Default is enabled unless environment variable
1622POSIXLY_CORRECT has been set, in which case C<auto_abbrev> is disabled.
404cbe93 1623
0b7031a2 1624=item getopt_compat
a0d0e21e 1625
0b7031a2 1626Allow C<+> to start options.
22d4bb9c 1627Default is enabled unless environment variable
1628POSIXLY_CORRECT has been set, in which case C<getopt_compat> is disabled.
1629
1630=item gnu_compat
1631
1632C<gnu_compat> controls whether C<--opt=> is allowed, and what it should
1633do. Without C<gnu_compat>, C<--opt=> gives an error. With C<gnu_compat>,
1634C<--opt=> will give option C<opt> and empty value.
1635This is the way GNU getopt_long() does it.
1636
1637=item gnu_getopt
1638
1639This is a short way of setting C<gnu_compat> C<bundling> C<permute>
1640C<no_getopt_compat>. With C<gnu_getopt>, command line handling should be
1641fully compatible with GNU getopt_long().
88e49c4e 1642
bb40d378 1643=item require_order
404cbe93 1644
0b7031a2 1645Whether command line arguments are allowed to be mixed with options.
22d4bb9c 1646Default is disabled unless environment variable
1647POSIXLY_CORRECT has been set, in which case C<require_order> is enabled.
404cbe93 1648
0b7031a2 1649See also C<permute>, which is the opposite of C<require_order>.
a0d0e21e 1650
bb40d378 1651=item permute
404cbe93 1652
0b7031a2 1653Whether command line arguments are allowed to be mixed with options.
22d4bb9c 1654Default is enabled unless environment variable
1655POSIXLY_CORRECT has been set, in which case C<permute> is disabled.
0b7031a2 1656Note that C<permute> is the opposite of C<require_order>.
a0d0e21e 1657
22d4bb9c 1658If C<permute> is enabled, this means that
a0d0e21e 1659
0b7031a2 1660 --foo arg1 --bar arg2 arg3
a0d0e21e 1661
bb40d378 1662is equivalent to
a0d0e21e 1663
0b7031a2 1664 --foo --bar arg1 arg2 arg3
a0d0e21e 1665
0b7031a2 1666If an argument call-back routine is specified, C<@ARGV> will always be
1667empty upon succesful return of GetOptions() since all options have been
1668processed. The only exception is when C<--> is used:
a0d0e21e 1669
0b7031a2 1670 --foo arg1 --bar arg2 -- arg3
404cbe93 1671
bb40d378 1672will call the call-back routine for arg1 and arg2, and terminate
0b7031a2 1673GetOptions() leaving C<"arg2"> in C<@ARGV>.
381319f7 1674
22d4bb9c 1675If C<require_order> is enabled, options processing
bb40d378 1676terminates when the first non-option is encountered.
a0d0e21e 1677
0b7031a2 1678 --foo arg1 --bar arg2 arg3
381319f7 1679
bb40d378 1680is equivalent to
381319f7 1681
0b7031a2 1682 --foo -- arg1 --bar arg2 arg3
404cbe93 1683
22d4bb9c 1684=item bundling (default: disabled)
404cbe93 1685
22d4bb9c 1686Enabling this option will allow single-character options to be bundled.
0b7031a2 1687To distinguish bundles from long option names, long options I<must> be
1688introduced with C<--> and single-character options (and bundles) with
1689C<->.
bb40d378 1690
22d4bb9c 1691Note: disabling C<bundling> also disables C<bundling_override>.
a11f5414 1692
22d4bb9c 1693=item bundling_override (default: disabled)
381319f7 1694
22d4bb9c 1695If C<bundling_override> is enabled, bundling is enabled as with
1696C<bundling> but now long option names override option bundles.
381319f7 1697
22d4bb9c 1698Note: disabling C<bundling_override> also disables C<bundling>.
381319f7 1699
bb40d378 1700B<Note:> Using option bundling can easily lead to unexpected results,
1701especially when mixing long options and bundles. Caveat emptor.
381319f7 1702
22d4bb9c 1703=item ignore_case (default: enabled)
381319f7 1704
22d4bb9c 1705If enabled, case is ignored when matching long option names. Single
0b7031a2 1706character options will be treated case-sensitive.
381319f7 1707
22d4bb9c 1708Note: disabling C<ignore_case> also disables C<ignore_case_always>.
381319f7 1709
22d4bb9c 1710=item ignore_case_always (default: disabled)
a11f5414 1711
bb40d378 1712When bundling is in effect, case is ignored on single-character
22d4bb9c 1713options also.
381319f7 1714
22d4bb9c 1715Note: disabling C<ignore_case_always> also disables C<ignore_case>.
381319f7 1716
22d4bb9c 1717=item pass_through (default: disabled)
a0d0e21e 1718
0b7031a2 1719Options that are unknown, ambiguous or supplied with an invalid option
1720value are passed through in C<@ARGV> instead of being flagged as
1721errors. This makes it possible to write wrapper scripts that process
1722only part of the user supplied command line arguments, and pass the
bb40d378 1723remaining options to some other program.
a0d0e21e 1724
22d4bb9c 1725This can be very confusing, especially when C<permute> is also enabled.
16c18a90 1726
3a0431da 1727=item prefix
1728
0b7031a2 1729The string that starts options. If a constant string is not
1730sufficient, see C<prefix_pattern>.
3a0431da 1731
1732=item prefix_pattern
1733
1734A Perl pattern that identifies the strings that introduce options.
1735Default is C<(--|-|\+)> unless environment variable
1736POSIXLY_CORRECT has been set, in which case it is C<(--|-)>.
1737
22d4bb9c 1738=item debug (default: disabled)
a0d0e21e 1739
22d4bb9c 1740Enable debugging output.
a0d0e21e 1741
bb40d378 1742=back
a0d0e21e 1743
0b7031a2 1744=head1 Return values and Errors
381319f7 1745
0b7031a2 1746Configuration errors and errors in the option definitions are
1747signalled using die() and will terminate the calling program unless
1748the call to Getopt::Long::GetOptions() was embedded in C<eval { ...
1749}>, or die() was trapped using C<$SIG{__DIE__}>.
a0d0e21e 1750
22d4bb9c 1751GetOptions returns true to indicate success.
1752It returns false when the function detected one or more errors during
1753option parsing. These errors are signalled using warn() and can be
1754trapped with C<$SIG{__WARN__}>.
a0d0e21e 1755
0b7031a2 1756Errors that can't happen are signalled using Carp::croak().
a0d0e21e 1757
0b7031a2 1758=head1 Legacy
a0d0e21e 1759
0b7031a2 1760The earliest development of C<newgetopt.pl> started in 1990, with Perl
1761version 4. As a result, its development, and the development of
1762Getopt::Long, has gone through several stages. Since backward
1763compatibility has always been extremely important, the current version
1764of Getopt::Long still supports a lot of constructs that nowadays are
1765no longer necessary or otherwise unwanted. This section describes
1766briefly some of these 'features'.
a0d0e21e 1767
0b7031a2 1768=head2 Default destinations
a0d0e21e 1769
0b7031a2 1770When no destination is specified for an option, GetOptions will store
1771the resultant value in a global variable named C<opt_>I<XXX>, where
1772I<XXX> is the primary name of this option. When a progam executes
1773under C<use strict> (recommended), these variables must be
1774pre-declared with our() or C<use vars>.
1775
1776 our $opt_length = 0;
1777 GetOptions ('length=i'); # will store in $opt_length
1778
1779To yield a usable Perl variable, characters that are not part of the
1780syntax for variables are translated to underscores. For example,
1781C<--fpp-struct-return> will set the variable
1782C<$opt_fpp_struct_return>. Note that this variable resides in the
1783namespace of the calling program, not necessarily C<main>. For
1784example:
1785
1786 GetOptions ("size=i", "sizes=i@");
1787
1788with command line "-size 10 -sizes 24 -sizes 48" will perform the
1789equivalent of the assignments
1790
1791 $opt_size = 10;
1792 @opt_sizes = (24, 48);
1793
1794=head2 Alternative option starters
1795
1796A string of alternative option starter characters may be passed as the
1797first argument (or the first argument after a leading hash reference
1798argument).
1799
1800 my $len = 0;
1801 GetOptions ('/', 'length=i' => $len);
1802
1803Now the command line may look like:
1804
1805 /length 24 -- arg
1806
1807Note that to terminate options processing still requires a double dash
1808C<-->.
1809
22d4bb9c 1810GetOptions() will not interpret a leading C<< "<>" >> as option starters
1811if the next argument is a reference. To force C<< "<" >> and C<< ">" >> as
1812option starters, use C<< "><" >>. Confusing? Well, B<using a starter
0b7031a2 1813argument is strongly deprecated> anyway.
1814
1815=head2 Configuration variables
1816
1817Previous versions of Getopt::Long used variables for the purpose of
22d4bb9c 1818configuring. Although manipulating these variables still work, it is
1819strongly encouraged to use the C<Configure> routine that was introduced
1820in version 2.17. Besides, it is much easier.
1821
1822=head1 Trouble Shooting
1823
1824=head2 Warning: Ignoring '!' modifier for short option
1825
1826This warning is issued when the '!' modifier is applied to a short
1827(one-character) option and bundling is in effect. E.g.,
1828
1829 Getopt::Long::Configure("bundling");
1830 GetOptions("foo|f!" => \$foo);
1831
1832Note that older Getopt::Long versions did not issue a warning, because
1833the '!' modifier was applied to the first name only. This bug was
1834fixed in 2.22.
1835
1836Solution: separate the long and short names and apply the '!' to the
1837long names only, e.g.,
1838
1839 GetOptions("foo!" => \$foo, "f" => \$foo);
1840
1841=head2 GetOptions does not return a false result when an option is not supplied
1842
1843That's why they're called 'options'.
a0d0e21e 1844
bb40d378 1845=head1 AUTHOR
a11f5414 1846
22d4bb9c 1847Johan Vromans <jvromans@squirrel.nl>
a11f5414 1848
bb40d378 1849=head1 COPYRIGHT AND DISCLAIMER
a11f5414 1850
0b7031a2 1851This program is Copyright 2000,1990 by Johan Vromans.
bb40d378 1852This program is free software; you can redistribute it and/or
1a505819 1853modify it under the terms of the Perl Artistic License or the
1854GNU General Public License as published by the Free Software
1855Foundation; either version 2 of the License, or (at your option) any
1856later version.
a11f5414 1857
bb40d378 1858This program is distributed in the hope that it will be useful,
1859but WITHOUT ANY WARRANTY; without even the implied warranty of
1860MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1861GNU General Public License for more details.
a0d0e21e 1862
bb40d378 1863If you do not have a copy of the GNU General Public License write to
22d4bb9c 1864the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
f9a400e4 1865MA 02139, USA.
a0d0e21e 1866
bb40d378 1867=cut
0b7031a2 1868
1869# Local Variables:
1870# mode: perl
1871# eval: (load-file "pod.el")
1872# End: