The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Announce 350
CHANGES 049
MANIFEST 21
META.json 11
META.yml 11
Makefile.PL 33
README 11
examples/skel4.pl 1210
lib/Getopt/Long.pm 3281
perl-Getopt-Long.spec 11
t/gol-linkage.t 129
11 files changed (This is a version diff) 89177
@@ -1,35 +0,0 @@
-Version 2.38 of module Getopt::Long has been released to CPAN. It will
-be standard part of Perl versions 5.8.10 and 5.10.1.
-
-Module Getopt::Long implements an extended getopt function called
-GetOptions(). This function implements the POSIX standard for command
-line options, with GNU extensions, while still capable of handling
-the traditional one-letter options (including option bundling).
-It adds a lot of features like automatic abbreviation of option names,
-aliases and callback functions.
-
-The README document is attached to this message.
-
-The easiest way to get it is by using the CPAN shell:
-
-   perl -MCPAN -e 'install("Getopt::Long")'
-
-Alternatively, use a Web browser and point it to the CPAN search engine:
-  http://search.cpan.org/search?module=Getopt::Long
-
-Changes in this version
------------------------
-
-* Bugfix for Ticket 35759: First arg to callback function evaluates
-  to false when used in bool context.
-
-* Fix problem with prototypes of GetOptionsFrom* functions.
-
-* Fix restoring default die handler.
-
-* Bugfix for Ticket 24941: Autoabbrev with + incorrect.
-
-Previous released version was 2.37.
-
----- README ----
-
@@ -1,3 +1,52 @@
+Changes in version 2.45
+-----------------------
+
+* Revert behaviour of the combination of <> and pass_through to what
+  is was in 2.42.
+
+  Thanks to Wilson Snyder to provide enhancements to the documentation
+  to clarify why <> and pass_through generally is a bad idea.
+
+  It is, however, very unfortunate to hear from users that their
+  programs *depend* on the undocumented pre-2.43 behaviour.
+
+Changes in version 2.44
+-----------------------
+
+* Be gentle to the user community and turn fix 92462 into a warning.
+  This may be changed back to error in some future release.
+
+Changes in version 2.43
+-----------------------
+
+* Fix bug https://rt.cpan.org/Ticket/Display.html?id=92462
+
+* Implement enhancement
+  https://rt.cpan.org/Public/Bug/Display.html?id=101237
+
+* Fix the Getopt::Long part of bug
+  https://rt.cpan.org/Ticket/Display.html?id=100335
+
+Changes in version 2.42
+-----------------------
+
+* Fix bug https://rt.cpan.org/Ticket/Display.html?id=88707
+
+Changes in version 2.41
+-----------------------
+
+* Change INSTALLDIRS to site for perl >= 5.011.
+
+  See https://rt.perl.org/rt3//Ticket/Display.html?id=116479
+  for details.
+
+Changes in version 2.40
+-----------------------
+
+* Fix bug #86095 Possible problem with aliases
+
+* Fix bug #85362 typo fix
+
 Changes in version 2.39
 -----------------------
 
@@ -1,4 +1,3 @@
-Announce              Getopt::Long Announcement
 MANIFEST              List of files in this kit
 README                Introductionary text
 INSTALL               Installation information
@@ -19,5 +18,5 @@ examples/skel3.pl     Skeleton program to use Getopt::Long
 examples/skel4.pl     Skeleton program to use Getopt::Long
 examples/parsetime.pl Sample user handler for options
 perl-Getopt-Long.spec RPM spec file for (some) RedHat based systems
-META.yml              Meta information
+META.yml                                 Module YAML meta-data (added by MakeMaker)
 META.json                                Module JSON meta-data (added by MakeMaker)
@@ -37,5 +37,5 @@
       }
    },
    "release_status" : "stable",
-   "version" : "2.39"
+   "version" : "2.45"
 }
@@ -19,4 +19,4 @@ no_index:
     - inc
 requires:
   Pod::Usage: 1.14
-version: 2.39
+version: 2.45
@@ -2,8 +2,8 @@
 # Author          : Johan Vromans
 # Created On      : Sat Mar 16 11:43:21 1996
 # Last Modified By: Johan Vromans
-# Last Modified On: Fri Jul  9 14:23:45 2010
-# Update Count    : 112
+# Last Modified On: Mon Jul  8 08:14:42 2013
+# Update Count    : 113
 # Status          : Unknown, Use with caution!
 
 use Config;
@@ -88,7 +88,7 @@ WriteMakefile(
         ABSTRACT => 'Module to handle parsing command line options',
         ),
 
-	INSTALLDIRS => 'perl',
+	INSTALLDIRS => ($] < 5.011 ? 'perl' : 'site'),
 	PM 	  => { "lib/newgetopt.pl"  => '$(INST_LIB)/newgetopt.pl',
 		       "lib/Getopt/Long.pm" => '$(INST_LIB)/Getopt/Long.pm',
 		     },
@@ -200,7 +200,7 @@ Or use the CPAN search engine:
 COPYRIGHT AND DISCLAIMER
 ========================
 
-Module Getopt::Long is Copyright 2009,1990 by Johan Vromans.
+Module Getopt::Long is Copyright 2013,1990 by Johan Vromans.
 This program is free software; you can redistribute it and/or
 modify it under the terms of the Perl Artistic License or the
 GNU General Public License as published by the Free Software
@@ -5,8 +5,8 @@
 # Author          : Johan Vromans
 # Created On      : Tue Sep 15 15:59:04 1992
 # Last Modified By: Johan Vromans
-# Last Modified On: Fri Jul  9 14:31:06 2010
-# Update Count    : 83
+# Last Modified On: Thu Jul  4 14:43:40 2013
+# Update Count    : 84
 # Status          : Unknown, Use with caution!
 
 ################ Common stuff ################
@@ -93,25 +93,23 @@ sub app_setup {
 	  'debug',
 	 ) )
     {
-	# GNU convention: message to STDERR upon failure.
-	app_usage(\*STDERR, 2);
+	app_usage(2);
     }
-    # GNU convention: message to STDOUT upon request.
-    app_usage(\*STDOUT, 0) if $help;
-    app_ident(\*STDOUT) if $ident;
+    app_usage(0) if $help;
+    app_ident() if $ident;
 
     $options;
 }
 
 sub app_ident {
-    my ($fh) = @_;
-    print {$fh} ("This is $my_package [$my_name $my_version]\n");
+    print ("This is $my_package [$my_name $my_version]\n");
 }
 
 sub app_usage {
-    my ($fh, $exit) = @_;
-    app_ident($fh);
-    print ${fh} <<EndOfUsage;
+    my ($exit) = @_;
+    select \*STDERR if $exit;
+    app_ident();
+    print <<EndOfUsage;
 Usage: $0 [options] [file ...]
     ### ADD OPTIONS HERE ###
     --config=CFG	load options from config file
@@ -4,8 +4,8 @@
 # Author          : Johan Vromans
 # Created On      : Tue Sep 11 15:00:12 1990
 # Last Modified By: Johan Vromans
-# Last Modified On: Tue Mar 12 14:42:25 2013
-# Update Count    : 1638
+# Last Modified On: Mon Feb 23 20:29:11 2015
+# Update Count    : 1683
 # Status          : Released
 
 ################ Module Preamble ################
@@ -17,10 +17,10 @@ use 5.004;
 use strict;
 
 use vars qw($VERSION);
-$VERSION        =  2.39;
+$VERSION        =  2.45;
 # For testing versions only.
 use vars qw($VERSION_STRING);
-$VERSION_STRING = "2.39";
+$VERSION_STRING = "2.45";
 
 use Exporter;
 use vars qw(@ISA @EXPORT @EXPORT_OK);
@@ -50,6 +50,9 @@ use vars qw($autoabbrev $getopt_compat $ignorecase $bundling $order
 # Official invisible variables.
 use vars qw($genprefix $caller $gnu_compat $auto_help $auto_version $longprefix);
 
+# Really invisible variables.
+my $bundling_values;
+
 # Public subroutines.
 sub config(@);			# deprecated name
 
@@ -92,6 +95,7 @@ sub ConfigDefaults() {
     $passthrough = 0;		# leave unrecognized options alone
     $gnu_compat = 0;		# require --opt=val if value is optional
     $longprefix = "(--)";       # what does a long prefix look like
+    $bundling_values = 0;	# no bundling of values
 }
 
 # Override import.
@@ -251,7 +255,7 @@ use constant PAT_XINT  =>
   "|".
 	  "0[0-7_]*".
   ")";
-use constant PAT_FLOAT => "[-+]?[0-9._]+(\.[0-9_]+)?([eE][-+]?[0-9_]+)?";
+use constant PAT_FLOAT => "[-+]?[0-9_]+(\.[0-9_]+)?([eE][-+]?[0-9_]+)?";
 
 sub GetOptions(@) {
     # Shift in default array.
@@ -296,10 +300,14 @@ sub GetOptionsFromArray(@) {
 	  ("Getopt::Long $Getopt::Long::VERSION ",
 	   "called from package \"$pkg\".",
 	   "\n  ",
-	   "argv: (@$argv)",
+	   "argv: ",
+	   defined($argv)
+	   ? UNIVERSAL::isa( $argv, 'ARRAY' ) ? "(@$argv)" : $argv
+	   : "<undef>",
 	   "\n  ",
 	   "autoabbrev=$autoabbrev,".
 	   "bundling=$bundling,",
+	   "bundling_values=$bundling_values,",
 	   "getopt_compat=$getopt_compat,",
 	   "gnu_compat=$gnu_compat,",
 	   "order=$order,",
@@ -458,6 +466,9 @@ sub GetOptionsFromArray(@) {
 
     }
 
+    $error .= "GetOptionsFromArray: 1st parameter is not an array reference\n"
+      unless $argv && UNIVERSAL::isa( $argv, 'ARRAY' );
+
     # Bail out if errors found.
     die ($error) if $error;
     $error = 0;
@@ -707,7 +718,7 @@ sub GetOptionsFromArray(@) {
 	elsif ( $order == $PERMUTE ) {
 	    # Try non-options call-back.
 	    my $cb;
-	    if ( (defined ($cb = $linkage{'<>'})) ) {
+	    if ( defined ($cb = $linkage{'<>'}) ) {
 		print STDERR ("=> &L{$tryopt}(\"$tryopt\")\n")
 		  if $debug;
 		my $eval_error = do {
@@ -942,7 +953,7 @@ sub FindOption ($$$$$) {
 
     my $tryopt = $opt;		# option to try
 
-    if ( $bundling && $starter eq '-' ) {
+    if ( ( $bundling || $bundling_values ) && $starter eq '-' ) {
 
 	# To try overrides, obey case ignore.
 	$tryopt = $ignorecase ? lc($opt) : $opt;
@@ -953,6 +964,23 @@ sub FindOption ($$$$$) {
 	    print STDERR ("=> $starter$tryopt overrides unbundling\n")
 	      if $debug;
 	}
+
+	# If bundling_values, option may be followed by the value.
+	elsif ( $bundling_values ) {
+	    $tryopt = $opt;
+	    # Unbundle single letter option.
+	    $rest = length ($tryopt) > 0 ? substr ($tryopt, 1) : '';
+	    $tryopt = substr ($tryopt, 0, 1);
+	    $tryopt = lc ($tryopt) if $ignorecase > 1;
+	    print STDERR ("=> $starter$tryopt unbundled from ",
+			  "$starter$tryopt$rest\n") if $debug;
+	    # Whatever remains may not be considered an option.
+	    $optarg = $rest eq '' ? undef : $rest;
+	    $rest = undef;
+	}
+
+	# Split off a single letter and leave the rest for
+	# further processing.
 	else {
 	    $tryopt = $opt;
 	    # Unbundle single letter option.
@@ -984,9 +1012,9 @@ sub FindOption ($$$$$) {
 	    # See if all matches are for the same option.
 	    my %hit;
 	    foreach ( @hits ) {
-		my $hit = $_;
-		$hit = $opctl->{$hit}->[CTL_CNAME]
-		  if defined $opctl->{$hit}->[CTL_CNAME];
+		my $hit = $opctl->{$_}->[CTL_CNAME]
+		  if defined $opctl->{$_}->[CTL_CNAME];
+		$hit = "no" . $hit if $opctl->{$_}->[CTL_TYPE] eq '!';
 		$hit{$hit} = 1;
 	    }
 	    # Remove auto-supplied options (version, help).
@@ -1058,6 +1086,7 @@ sub FindOption ($$$$$) {
 	    warn ("Option ", $opt, " does not take an argument\n");
 	    $error++;
 	    undef $opt;
+	    undef $optarg if $bundling_values;
 	}
 	elsif ( $type eq '' || $type eq '+' ) {
 	    # Supply explicit value.
@@ -1200,7 +1229,6 @@ sub FindOption ($$$$$) {
     elsif ( $type eq 'f' ) { # real number, int is also ok
 	# We require at least one digit before a point or 'e',
 	# and at least one digit following the point and 'e'.
-	# [-]NN[.NN][eNN]
 	my $o_valid = PAT_FLOAT;
 	if ( $bundling && defined $rest &&
 	     $rest =~ /^($key_valid)($o_valid)(.*)$/s ) {
@@ -1287,13 +1315,13 @@ sub Configure (@) {
       [ $error, $debug, $major_version, $minor_version,
 	$autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
 	$gnu_compat, $passthrough, $genprefix, $auto_version, $auto_help,
-	$longprefix ];
+	$longprefix, $bundling_values ];
 
     if ( ref($options[0]) eq 'ARRAY' ) {
 	( $error, $debug, $major_version, $minor_version,
 	  $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
 	  $gnu_compat, $passthrough, $genprefix, $auto_version, $auto_help,
-	  $longprefix ) = @{shift(@options)};
+	  $longprefix, $bundling_values ) = @{shift(@options)};
     }
 
     my $opt;
@@ -1326,6 +1354,7 @@ sub Configure (@) {
 		$getopt_compat = 0;
                 $genprefix = "(--|-)";
 		$order = $PERMUTE;
+		$bundling_values = 0;
 	    }
 	}
 	elsif ( $try eq 'gnu_compat' ) {
@@ -1345,9 +1374,15 @@ sub Configure (@) {
 	}
 	elsif ( $try eq 'bundling' ) {
 	    $bundling = $action;
+	    $bundling_values = 0 if $action;
 	}
 	elsif ( $try eq 'bundling_override' ) {
 	    $bundling = $action ? 2 : 0;
+	    $bundling_values = 0 if $action;
+	}
+	elsif ( $try eq 'bundling_values' ) {
+	    $bundling_values = $action;
+	    $bundling = 0 if $action;
 	}
 	elsif ( $try eq 'require_order' ) {
 	    $order = $action ? $REQUIRE_ORDER : $PERMUTE;
@@ -2135,12 +2170,12 @@ at once. For example if C<a>, C<v> and C<x> are all valid options,
 
     -vax
 
-would set all three.
+will set all three.
 
-Getopt::Long supports two levels of bundling. To enable bundling, a
+Getopt::Long supports three styles of bundling. To enable bundling, a
 call to Getopt::Long::Configure is required.
 
-The first level of bundling can be enabled with:
+The simplest style of bundling can be enabled with:
 
     Getopt::Long::Configure ("bundling");
 
@@ -2151,21 +2186,21 @@ options,
 
     -vax
 
-would set C<a>, C<v> and C<x>, but
+will set C<a>, C<v> and C<x>, but
 
     --vax
 
-would set C<vax>.
+will set C<vax>.
 
-The second level of bundling lifts this restriction. It can be enabled
+The second style of bundling lifts this restriction. It can be enabled
 with:
 
     Getopt::Long::Configure ("bundling_override");
 
-Now, C<-vax> would set the option C<vax>.
+Now, C<-vax> will set the option C<vax>.
 
-When any level of bundling is enabled, option values may be inserted
-in the bundle. For example:
+In all of the above cases, option values may be inserted in the
+bundle. For example:
 
     -h24w80
 
@@ -2173,6 +2208,17 @@ is equivalent to
 
     -h 24 -w 80
 
+A third style of bundling allows only values to be bundled with
+options. It can be enabled with:
+
+    Getopt::Long::Configure ("bundling_values");
+
+Now, C<-h24> will set the option C<h> to C<24>, but option bundles
+like C<-vxa> and C<-h24w80> are flagged as errors.
+
+Enabling C<bundling_values> will disable the other two styles of
+bundling.
+
 When configured for bundling, single-character options are matched
 case sensitive while long options are matched case insensitive. To
 have the single-character options matched case insensitive as well,
@@ -2400,15 +2446,18 @@ C<require> statement.
 
 =item pass_through (default: disabled)
 
-Options that are unknown, ambiguous or supplied with an invalid option
-value are passed through in C<@ARGV> instead of being flagged as
-errors. This makes it possible to write wrapper scripts that process
-only part of the user supplied command line arguments, and pass the
+With C<pass_through> anything that is unknown, ambiguous or supplied with
+an invalid option will not be flagged as an error. Instead the unknown
+option(s) will be passed to the catchall C<< <> >> if present, otherwise
+through to C<@ARGV>. This makes it possible to write wrapper scripts that
+process only part of the user supplied command line arguments, and pass the
 remaining options to some other program.
 
-If C<require_order> is enabled, options processing will terminate at
-the first unrecognized option, or non-option, whichever comes first.
-However, if C<permute> is enabled instead, results can become confusing.
+If C<require_order> is enabled, options processing will terminate at the
+first unrecognized option, or non-option, whichever comes first and all
+remaining arguments are passed to C<@ARGV> instead of the catchall
+C<< <> >> if present.  However, if C<permute> is enabled instead, results
+can become confusing.
 
 Note that the options terminator (default C<-->), if present, will
 also be passed through in C<@ARGV>.
@@ -2546,7 +2595,7 @@ briefly some of these 'features'.
 
 When no destination is specified for an option, GetOptions will store
 the resultant value in a global variable named C<opt_>I<XXX>, where
-I<XXX> is the primary name of this option. When a progam executes
+I<XXX> is the primary name of this option. When a program executes
 under C<use strict> (recommended), these variables must be
 pre-declared with our() or C<use vars>.
 
@@ -2674,7 +2723,7 @@ Johan Vromans <jvromans@squirrel.nl>
 
 =head1 COPYRIGHT AND DISCLAIMER
 
-This program is Copyright 1990,2010 by Johan Vromans.
+This program is Copyright 1990,2015 by Johan Vromans.
 This program is free software; you can redistribute it and/or
 modify it under the terms of the Perl Artistic License or the
 GNU General Public License as published by the Free Software
@@ -1,5 +1,5 @@
 %define modname Getopt-Long
-%define modversion 2.39
+%define modversion 2.45
 %define path   Getopt
 
 Name: perl-%{modname}
@@ -11,7 +11,7 @@ BEGIN {
 
 use Getopt::Long;
 
-print "1..33\n";
+print "1..37\n";
 
 @ARGV = qw(-Foo -baR --foo bar);
 Getopt::Long::Configure ("no_ignore_case");
@@ -91,3 +91,31 @@ print (!(exists $lnk{bar})   ? "" : "not ", "ok 28\n");
     package Overload::Test;
     use overload '""' => sub{ die "Bad mojo!" };
 }
+
+{
+    @ARGV = (qw[-thru -here -more 1]);
+    my $got = "";
+    Getopt::Long::Configure("default");
+    Getopt::Long::Configure("pass_through");
+    print "not" unless GetOptions
+	("here" => sub { $got .= " sub_here"; },
+	 "<>" => sub { $got .= " <>=".$_[0]; }, );
+    $got .= " remain=".join(',',@ARGV);
+    print "ok 34\n";
+    print +(($got eq " <>=-thru sub_here <>=-more <>=1 remain=")
+	    ? "" : "not ", "ok 35\n");
+}
+
+{
+    @ARGV = (qw[-thru -here -more -- 1]);
+    my $got = "";
+    Getopt::Long::Configure("default");
+    Getopt::Long::Configure("pass_through","require_order");
+    print "not" unless GetOptions
+	("here" => sub { $got .= " sub_here"; },
+	 "<>" => sub { $got .= " <>=".$_[0]; }, );
+    $got .= " remain=".join(',',@ARGV);
+    print "ok 36\n";
+    print +(($got eq " remain=-thru,-here,-more,--,1")
+	    ? "" : "not ", "ok 37\n");
+}