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