[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-unattended/var/se3/unattended/install/linuxaux/opt/perl/lib/5.10.0/Getopt/ -> Long.pm (source)

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


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1