From: Stephen Zander Date: Mon, 18 Nov 1996 06:05:28 +0000 (+1200) Subject: Getopts::Std patch for hash support X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=0bc14741b510bc3cc5fb491c64b09b0044015de8;p=p5sagit%2Fp5-mst-13.2.git Getopts::Std patch for hash support --- diff --git a/lib/Getopt/Std.pm b/lib/Getopt/Std.pm index 4117ca7..fee0d33 100644 --- a/lib/Getopt/Std.pm +++ b/lib/Getopt/Std.pm @@ -11,9 +11,12 @@ getopts - Process single-character switches with switch clustering =head1 SYNOPSIS use Getopt::Std; - getopt('oDI'); # -o, -D & -I take arg. Sets opt_* as a side effect. + + getopt('oDI'); # -o, -D & -I take arg. Sets opt_* as a side effect. + getopt('oDI', \%opts); # -o, -D & -I take arg. Values in %opts getopts('oif:'); # -o & -i are boolean flags, -f takes an argument # Sets opt_* as a side effect. + getopts('oif:', \%opts); # options as above. Values in %opts =head1 DESCRIPTION @@ -24,6 +27,11 @@ switch name) to the value of the argument, or 1 if no argument. Switches which take an argument don't care whether there is a space between the switch and the argument. +For those of you who don't like additional variables being created, getopt() +and getopts() will also accept a hash reference as an optional second argument. +Hash keys will be x (where x is the switch name) with key values the value of +the argument or 1 if no argument is specified. + =cut @ISA = qw(Exporter); @@ -40,8 +48,8 @@ switch and the argument. # Usage: # getopt('oDI'); # -o, -D & -I take arg. Sets opt_* as a side effect. -sub getopt { - local($argumentative) = @_; +sub getopt ($;$) { + local($argumentative, $hash) = @_; local($_,$first,$rest); local $Exporter::ExportLevel; @@ -55,12 +63,22 @@ sub getopt { shift(@ARGV); $rest = shift(@ARGV); } - eval "\$opt_$first = \$rest;"; - push( @EXPORT, "\$opt_$first" ); + if (ref $hash) { + $$hash{$first} = $rest; + } + else { + eval "\$opt_$first = \$rest;"; + push( @EXPORT, "\$opt_$first" ); + } } else { - eval "\$opt_$first = 1;"; - push( @EXPORT, "\$opt_$first" ); + if (ref $hash) { + $$hash{$first} = 1; + } + else { + eval "\$opt_$first = 1;"; + push( @EXPORT, "\$opt_$first" ); + } if ($rest ne '') { $ARGV[0] = "-$rest"; } @@ -77,8 +95,8 @@ sub getopt { # getopts('a:bc'); # -a takes arg. -b & -c not. Sets opt_* as a # # side effect. -sub getopts { - local($argumentative) = @_; +sub getopts ($;$) { + local($argumentative, $hash) = @_; local(@args,$_,$first,$rest); local($errs) = 0; local $Exporter::ExportLevel; @@ -94,12 +112,22 @@ sub getopts { ++$errs unless @ARGV; $rest = shift(@ARGV); } - eval "\$opt_$first = \$rest;"; - push( @EXPORT, "\$opt_$first" ); + if (ref $hash) { + $$hash{$first} = $rest; + } + else { + eval "\$opt_$first = \$rest;"; + push( @EXPORT, "\$opt_$first" ); + } } else { - eval "\$opt_$first = 1"; - push( @EXPORT, "\$opt_$first" ); + if (ref $hash) { + $$hash{$first} = 1; + } + else { + eval "\$opt_$first = 1"; + push( @EXPORT, "\$opt_$first" ); + } if($rest eq '') { shift(@ARGV); }