📄 std.pm
字号:
package Getopt::Std;require 5.000;require Exporter;=head1 NAMEgetopt - Process single-character switches with switch clusteringgetopts - 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', \%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 DESCRIPTIONThe getopt() functions processes single-character switches with switchclustering. Pass one argument which is a string containing all switchesthat take an argument. For each switch found, sets $opt_x (where x is theswitch name) to the value of the argument, or 1 if no argument. Switcheswhich take an argument don't care whether there is a space between theswitch and the argument.Note that, if your code is running under the recommended C<use strict'vars'> pragma, you will need to declare these package variableswith "our": our($opt_foo, $opt_bar);For those of you who don't like additional global 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 ofthe argument or 1 if no argument is specified.To allow programs to process arguments that look like switches, but aren't,both functions will stop processing switches when they see the argumentC<-->. The C<--> will be removed from @ARGV.=cut@ISA = qw(Exporter);@EXPORT = qw(getopt getopts);$VERSION = '1.02';# 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, $hash) = @_; local($_,$first,$rest); local @EXPORT; while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) { ($first,$rest) = ($1,$2); if (/^--$/) { # early exit if -- shift @ARGV; last; } if (index($argumentative,$first) >= 0) { if ($rest ne '') { shift(@ARGV); } else { shift(@ARGV); $rest = shift(@ARGV); } if (ref $hash) { $$hash{$first} = $rest; } else { ${"opt_$first"} = $rest; push( @EXPORT, "\$opt_$first" ); } } else { if (ref $hash) { $$hash{$first} = 1; } else { ${"opt_$first"} = 1; push( @EXPORT, "\$opt_$first" ); } if ($rest ne '') { $ARGV[0] = "-$rest"; } else { shift(@ARGV); } } } unless (ref $hash) { local $Exporter::ExportLevel = 1; import Getopt::Std; }}# Usage:# getopts('a:bc'); # -a takes arg. -b & -c not. Sets opt_* as a# # side effect.sub getopts ($;$) { local($argumentative, $hash) = @_; local(@args,$_,$first,$rest); local($errs) = 0; local @EXPORT; @args = split( / */, $argumentative ); while(@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) { ($first,$rest) = ($1,$2); if (/^--$/) { # early exit if -- shift @ARGV; last; } $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); } if (ref $hash) { $$hash{$first} = $rest; } else { ${"opt_$first"} = $rest; push( @EXPORT, "\$opt_$first" ); } } else { if (ref $hash) { $$hash{$first} = 1; } else { ${"opt_$first"} = 1; push( @EXPORT, "\$opt_$first" ); } if ($rest eq '') { shift(@ARGV); } else { $ARGV[0] = "-$rest"; } } } else { warn "Unknown option: $first\n"; ++$errs; if ($rest ne '') { $ARGV[0] = "-$rest"; } else { shift(@ARGV); } } } unless (ref $hash) { local $Exporter::ExportLevel = 1; import Getopt::Std; } $errs == 0;}1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -