In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/c7e74775aeccc7506df4216c4a137b2c702187fc?hp=f4460c6f7a0de152ddaed69a0ba0efe653258f81>
- Log ----------------------------------------------------------------- commit c7e74775aeccc7506df4216c4a137b2c702187fc Author: Chris 'BinGOs' Williams <[email protected]> Date: Mon Feb 23 19:41:50 2015 +0000 Update Getopt-Long to CPAN version 2.45 [DELTA] 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. ----------------------------------------------------------------------- Summary of changes: Porting/Maintainers.pl | 2 +- cpan/Getopt-Long/lib/Getopt/Long.pm | 35 +++++++++++++++-------------------- cpan/Getopt-Long/t/gol-linkage.t | 30 +++++++++++++++++++++++++++++- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 6129046..175a232 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -580,7 +580,7 @@ use File::Glob qw(:case); }, 'Getopt::Long' => { - 'DISTRIBUTION' => 'JV/Getopt-Long-2.44.tar.gz', + 'DISTRIBUTION' => 'JV/Getopt-Long-2.45.tar.gz', 'FILES' => q[cpan/Getopt-Long], 'EXCLUDED' => [ qr{^examples/}, diff --git a/cpan/Getopt-Long/lib/Getopt/Long.pm b/cpan/Getopt-Long/lib/Getopt/Long.pm index 8a99db9..154c008 100644 --- a/cpan/Getopt-Long/lib/Getopt/Long.pm +++ b/cpan/Getopt-Long/lib/Getopt/Long.pm @@ -4,8 +4,8 @@ # Author : Johan Vromans # Created On : Tue Sep 11 15:00:12 1990 # Last Modified By: Johan Vromans -# Last Modified On: Thu Feb 19 09:15:53 2015 -# Update Count : 1682 +# 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.44; +$VERSION = 2.45; # For testing versions only. use vars qw($VERSION_STRING); -$VERSION_STRING = "2.44"; +$VERSION_STRING = "2.45"; use Exporter; use vars qw(@ISA @EXPORT @EXPORT_OK); @@ -373,11 +373,6 @@ sub GetOptionsFromArray(@) { next; } $linkage{'<>'} = shift (@optionlist); - if ( $passthrough ) { - # Too harsh... for now. - # $error .= "Option spec <> cannot be used with pass_through\n"; - warn("Option spec <> cannot be used with pass_through. FIX IT!\n"); - } next; } @@ -723,7 +718,7 @@ sub GetOptionsFromArray(@) { elsif ( $order == $PERMUTE ) { # Try non-options call-back. my $cb; - if ( !$passthrough && (defined ($cb = $linkage{'<>'})) ) { + if ( defined ($cb = $linkage{'<>'}) ) { print STDERR ("=> &L{$tryopt}(\"$tryopt\")\n") if $debug; my $eval_error = do { @@ -2451,22 +2446,22 @@ C<require> statement. =item pass_through (default: disabled) -Anything that is unknown, ambiguous or supplied with an invalid option -value is 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>. -For obvious reasons, B<pass_through> cannot be used with the -non-option catchall C<< <> >>. - =item prefix The string that starts options. If a constant string is not diff --git a/cpan/Getopt-Long/t/gol-linkage.t b/cpan/Getopt-Long/t/gol-linkage.t index df975c8..d4b526b 100644 --- a/cpan/Getopt-Long/t/gol-linkage.t +++ b/cpan/Getopt-Long/t/gol-linkage.t @@ -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"); +} -- Perl5 Master Repository
