summaryrefslogtreecommitdiffstats
path: root/contrib/perl5/lib/getopts.pl
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/perl5/lib/getopts.pl')
-rw-r--r--contrib/perl5/lib/getopts.pl49
1 files changed, 49 insertions, 0 deletions
diff --git a/contrib/perl5/lib/getopts.pl b/contrib/perl5/lib/getopts.pl
new file mode 100644
index 0000000..852aae8
--- /dev/null
+++ b/contrib/perl5/lib/getopts.pl
@@ -0,0 +1,49 @@
+;# getopts.pl - a better getopt.pl
+
+;# Usage:
+;# do Getopts('a:bc'); # -a takes arg. -b & -c not. Sets opt_* as a
+;# # side effect.
+
+sub Getopts {
+ local($argumentative) = @_;
+ local(@args,$_,$first,$rest);
+ local($errs) = 0;
+
+ @args = split( / */, $argumentative );
+ while(@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
+ ($first,$rest) = ($1,$2);
+ $pos = index($argumentative,$first);
+ if($pos >= 0) {
+ if($pos < $#args && $args[$pos+1] eq ':') {
+ shift(@ARGV);
+ if($rest eq '') {
+ ++$errs unless @ARGV;
+ $rest = shift(@ARGV);
+ }
+ ${"opt_$first"} = $rest;
+ }
+ else {
+ ${"opt_$first"} = 1;
+ if($rest eq '') {
+ shift(@ARGV);
+ }
+ else {
+ $ARGV[0] = "-$rest";
+ }
+ }
+ }
+ else {
+ print STDERR "Unknown option: $first\n";
+ ++$errs;
+ if($rest ne '') {
+ $ARGV[0] = "-$rest";
+ }
+ else {
+ shift(@ARGV);
+ }
+ }
+ }
+ $errs == 0;
+}
+
+1;
OpenPOWER on IntegriCloud