Getopt::Long 模块zz [转]

Getopt::Long 模块zz [转]

处理命令行选项是一个很重复的事情,Getopt::Long 把这个过程简单化了。使用这个模块其实只要知道一些常用的用法就行了。

这是文档中的例子:

use Getopt::Long;
my $data   = "file.dat";
my $length = 24;
my $verbose;
$result = GetOptions ("length=i" => /$length,    # numeric
                        "file=s"   => /$data,      # string
                        "verbose"  => /$verbose);  # flag

观察一下 GetOptions 函数的参数,可以发现,大致可以把设置分为三个部分: (1)命令行的选项,对应于“length”,“file”,”verbose”,这样在命令行就可以用 -length 或者 —length 甚至 -l(必须是唯一的) 触发选项了。可以通过使用“|”来设置别名。(2)选项类型,后面接有=的字符串要求接字符串(s)、 整数(i),或者浮点(f)等类型的自变量。后面接有:的选项会接受缺省为0或者为空字符串的可选自变量。(3)选项设置的变量。

对于不传递参数的选项,也就是一些开关类型,可以在第一部分后接“!”,这表示该选项不接收自变量,但是可以通过在前面加上no变成负的(例如,“more”选项的-nomore)。如果不是用“!”,而是“+”,这表示它会在每次出现的时候增加一个变量。如果选项出现在命令行里,那么相关的变量被设置为1;如果负的选项出现了,那么相关的变量就被设置为0。

下面的例子来自 http://www.zdnet.com.cn/developer/code/story/0,3800066897,39190451,00.htm

use Getopt::Long;
# declare default values for variables
$verbose = 0;
$all = 0;
$more = -1;    # so we can detect both -more and -nomore
$diam = 3.1415;
@libs = ();
%flags = ();
$debug = -1;   # test for -debug with no argument (0)

# process options from command line
# verbose will be incremented each time it appears
# either all, everything or universe will set $all to 1
# more can be negated (-nomore)
# diameter expects a floating point argument
# lib expects a string and can be repeated (pushing onto @libs)
# flag expects a key=value pair and can be repeated
# debug will optionally accept an integer (or 0 by default)
GetOptions('verbose+' => /$verbose,
'all|everything|universe' => /$all,
'more!' => /$more,
'diameter=f' => /$diam,
'lib=s' => /@libs,
'flag=s' => /%flags,
'debug:i' => /$debug);
# display resulting values of variables
print <<EOS;
Verbose:        $verbose
All:            $all
More:           $more
Diameter:       $diam
Debug:          $debug
Libs:           @{[ join ', ', @libs ]}
Flags:          @{[ join "/n/t/t", map { "
处理命令行选项是一个很重复的事情,Getopt::Long 把这个过程简单化了。使用这个模块其实只要知道一些常用的用法就行了。
这是文档中的例子:
  use Getopt::Long;
my $data   = "file.dat";
my $length = 24;
my $verbose;
$result = GetOptions ("length=i" => /$length,    # numeric
                        "file=s"   => /$data,      # string
                        "verbose"  => /$verbose);  # flag

观察一下 GetOptions 函数的参数,可以发现,大致可以把设置分为三个部分: (1)命令行的选项,对应于“length”,“file”,”verbose”,这样在命令行就可以用 -length 或者 —length 甚至 -l(必须是唯一的) 触发选项了。可以通过使用“|”来设置别名。(2)选项类型,后面接有=的字符串要求接字符串(s)、 整数(i),或者浮点(f)等类型的自变量。后面接有:的选项会接受缺省为0或者为空字符串的可选自变量。(3)选项设置的变量。
对于不传递参数的选项,也就是一些开关类型,可以在第一部分后接“!”,这表示该选项不接收自变量,但是可以通过在前面加上no变成负的(例如,“more”选项的-nomore)。如果不是用“!”,而是“+”,这表示它会在每次出现的时候增加一个变量。如果选项出现在命令行里,那么相关的变量被设置为1;如果负的选项出现了,那么相关的变量就被设置为0。
下面的例子来自 http://www.zdnet.com.cn/developer/code/story/0,3800066897,39190451,00.htm
___FCKpd___1
输出:
# perl getoptlong.pl -l=abc -l def -f a=b -f b=c -ev -de 5 -nomore arg
Verbose:        0
All:            1
More:           0
Diameter:       3.1415
Debug:          5
Libs:           abc, def
Flags:          a = b
b = c
Remaining:      arg
(ARGV contents)

 
= $flags{
处理命令行选项是一个很重复的事情,Getopt::Long 把这个过程简单化了。使用这个模块其实只要知道一些常用的用法就行了。
这是文档中的例子:
  use Getopt::Long;
my $data   = "file.dat";
my $length = 24;
my $verbose;
$result = GetOptions ("length=i" => /$length,    # numeric
                        "file=s"   => /$data,      # string
                        "verbose"  => /$verbose);  # flag

观察一下 GetOptions 函数的参数,可以发现,大致可以把设置分为三个部分: (1)命令行的选项,对应于“length”,“file”,”verbose”,这样在命令行就可以用 -length 或者 —length 甚至 -l(必须是唯一的) 触发选项了。可以通过使用“|”来设置别名。(2)选项类型,后面接有=的字符串要求接字符串(s)、 整数(i),或者浮点(f)等类型的自变量。后面接有:的选项会接受缺省为0或者为空字符串的可选自变量。(3)选项设置的变量。
对于不传递参数的选项,也就是一些开关类型,可以在第一部分后接“!”,这表示该选项不接收自变量,但是可以通过在前面加上no变成负的(例如,“more”选项的-nomore)。如果不是用“!”,而是“+”,这表示它会在每次出现的时候增加一个变量。如果选项出现在命令行里,那么相关的变量被设置为1;如果负的选项出现了,那么相关的变量就被设置为0。
下面的例子来自 http://www.zdnet.com.cn/developer/code/story/0,3800066897,39190451,00.htm
___FCKpd___1
输出:
___FCKpd___2
 
}" } keys
%flags ]}
Remaining:      @{[ join ', ', @ARGV ]}
(ARGV contents)
EOS

输出:

___FCKpd___2
 

这是一个 Perl 子程序,用于解析命令行参数。让我逐行解释一下这个子程序的功能: 1. 首先,它使用了 Getopt::Long 模块来处理命令行选项和参数。通过 `use Getopt::Long;` 引入了该模块。 2. `Getopt::Long::Configure("no_ignore_case");` 配置选项,使得对选项大小写不敏感。 3. 如果存在环境变量 `$ENV{PERLCC_OPTS}`,则将其拆分成单个字符并添加到 `@ARGV` 数组的开头。这是为了支持使用 Perlcc 编译器编译的脚本。 4. 如果没有传递任何参数,输出 "no parameter" 并调用 `helpme()` 子程序。 5. 创建一个哈希引用 `$Options`,用于存储解析后的选项和参数。 6. 使用 `Getopt::Long::Getoptions()` 解析命令行选项和参数,并将结果存储在 `$Options` 和其他变量中。具体的选项和参数定义如下: - "source=s":期望一个字符串作为 `-s` 或 `--source` 选项的值,并将其赋值给 `$src` 变量。 - "destiny=s":期望一个字符串作为 `-d` 或 `--destiny` 选项的值,并将其赋值给 `$des` 变量。 - "mem=s":期望一个字符串作为 `--mem` 选项的值,并将其赋值给 `$mem` 变量。 - "help|?":如果出现 `-h`、`--help` 或 `?` 选项,则将 `$help_flag` 标志设置为 1。 7. 将 `$Options->{v}` 的值强制换为数字,以确保其为数值类型。 8. 如果 `$src` 的长度不为零,则继续执行后续操作;否则,输出错误信息 "Error: Missing source file: -s, --source" 并将 `$help_flag` 设置为 1。 9. 如果 `$help_flag` 为 1,调用 `helpme()` 子程序。 这个子程序的目的是解析命令行参数,并根据参数的值执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值