package Getopt::Std;require 5.000;require Exporter;=head1 NAMEgetopt - Process single-character switches with switch clustering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.    getopts('oif:');  # -o & -i are boolean flags, -f takes an argument		      # Sets opt_* as a side effect.=head1 DESCRIPTIONThe getopt() functions processes single-character switches with switchclustering.  Pass one argument which is a string containing all switchesthat take an argument.  For each switch found, sets $opt_x (where x is the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.=cut@ISA = qw(Exporter);@EXPORT = qw(getopt getopts);# $RCSfile: getopt.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:23:58 $# Process single-character switches with switch clustering.  Pass one argument# which is a string containing all switches that take an argument.  For each# switch found, sets $opt_x (where x is the 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.# Usage:#	getopt('oDI');  # -o, -D & -I take arg.  Sets opt_* as a side effect.sub getopt {    local($argumentative) = @_;    local($_,$first,$rest);    local $Exporter::ExportLevel;    while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {	($first,$rest) = ($1,$2);	if (index($argumentative,$first) >= 0) {	    if ($rest ne '') {		shift(@ARGV);	    }	    else {		shift(@ARGV);		$rest = shift(@ARGV);	    }	    eval "\$opt_$first = \$rest;";	    push( @EXPORT, "\$opt_$first" );	}	else {	    eval "\$opt_$first = 1;";	    push( @EXPORT, "\$opt_$first" );	    if ($rest ne '') {		$ARGV[0] = "-$rest";	    }	    else {		shift(@ARGV);	    }	}    }    $Exporter::ExportLevel++;    import Getopt::Std;}# Usage:#   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;    local $Exporter::ExportLevel;    @args = split( / */, $argumentative );    while(@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {	($first,$rest) = ($1,$2);	$pos = index($argumentative,$first);	if($pos >= 0) {	    if(defined($args[$pos+1]) and ($args[$pos+1] eq ':')) {		shift(@ARGV);		if($rest eq '') {		    ++$errs unless @ARGV;		    $rest = shift(@ARGV);		}		eval "\$opt_$first = \$rest;";		push( @EXPORT, "\$opt_$first" );	    }	    else {		eval "\$opt_$first = 1";		push( @EXPORT, "\$opt_$first" );		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);	    }	}    }    $Exporter::ExportLevel++;    import Getopt::Std;    $errs == 0;}1;