perl模块 Getopt::Long解析参数

2016-11-28 20:43:11来源:CSDN作者:Aggressive_snail人点击

第七城市

Getopt::Long模块是用于解析命令行参数的perl模块

    • 选项解析
    • 其他用法
      • 使用options调用subroutines
      • 多命名选项
      • 绑定选项
      • - 和
      • GetoptLongConfigure

## option variables with default valuemy $verbose = "";my $nda = "";my $more = 0;my $value = "";my @libs = ();my %defines = ();## parse options from @ARGVGetOptions(    'verbose' => /$verbose,    'nda!' => /$nda,    'more+' => /$more,     'tag=s' => /$tag,    'value:s' => /$value,    'libs=i' => /@libs, ## 'libs=i@' => /$libs,    'define=s' => /%defines, ## 'define=s%' => /$defines,) or die $!;

选项解析

verbose,只有单独的一个选项,不接受任何参数。在命令行用--verbose来触发,触发后$verbose被设置为1,次用法常作为一个开关选项使用。
nda!,该选项在nda后加一个!,表示可以接受--nda--nonda两个选项,对应的将$nda设置为1和0,如果触发该选项,$nda值为""(即空值),可以用perl内置函数length检测$nda
more+该选项的+表示在参数列表每出现一次--more,对应的变量$more自加1。
tag=s该选项必须接受一个string参数,=表明必须要接受一个参数,s表明参数为任意字符串,也可用if指明参数为整数或浮点数。
value:stag=s的唯一区别是:,表明不是必须接受一个参数,可以--value形式调用,s默认赋值为""i/f默认赋值为0

libs=i指定一个数组引用@libs,表明可以多次使用"--libs <lib>"获取多个值并存到数组中,也可以使用另一种形式'libs=i@' => /$libs,如果要使用"--libs <lib1> <lib2> <lib3>"这种参数调用形式,在GetOptions()中使用'libs=i{3}' => /@libs指定每次传入3个值。可以试试'libs=i{1,}' => /@libs
define=s指定一个hash引用%defines,用--define os=linux传入一个hash参数。其他特点同上一个段落。

其他用法

使用options调用subroutines

my $verbose = "";GetOptions(    'set' => /&handle,) or die $!;sub handle {    $verbose = 100;    print "options /'--set/' set verbose $verbose/n";}

多命名选项

GetOptions('length|height' => /$length);

绑定选项

ex: ls -al

## 用法1use Getopt::Long;Getopt::Long::Configure("bundling"); ## **配置选项**my $long = "";my $all = "";my $al = "";GetOptions(    'long|l' => /$long, # 此处必须显式的指定'l'为'length'的aliase    'all|a' => /$all, # 此处必须显式的指定'a'为'length'的aliase    'al' => /$al,) or die $!;## 现在命令行可使用 '-al'选项,同时设置$long/$all为1.**single dash**## 使用'--al'选项设置$al为1.**double dash**
## 用法2use Getopt::Long;Getopt::Long::Configure("bundling_override"); ## **配置选项**my $long = "";my $all = "";my $al = "";GetOptions(    'long|l' => /$long, # 此处必须显式的指定'l''length'的aliase    'all|a' => /$all, # 此处必须显式的指定'a''length'的aliase    'al' => /$al,) or die $!;## 现在不可以使用 '-al'选项设置$long/$all,'-al''--al'的作用是一样## 在用法一和用法二中,如果'long|l=i' => /$long,'all|a=i' => /$all,## 即$long/$all都需要一个整数作为参数,那么可使用'-l11a22'实现'length=11''all=22'的效果
#用法3use Getopt::Long;Getopt::Long::Configure("bundling_values");...GetOptions(    ...) or die $!;## 只有'-l11'或者'-a22'可以使用,'-l11a22'和'-al'等方式都不能用
## 用法4use Getopt::Long;Getopt::Long::Configure("bundling", "ignorecase_always");...## 当使用Configure的'bundling'配置时,短名称如'-a/-l'都是大小写敏感,## 而长名称对大小写不敏感,所以使用"ignorecase_alwasy"选项设置为全部大小写不敏感。

‘-’ 和 ‘<>’

通常在命令行不识别单个的single-dash‘-’,可以使用如下方法捕获single-dash为参数选项。

GetOptions(    '' => /$single,) or die $!;

使用GetOptions解析命令行时,当遇到无法识别的字符或者本来不是命令行选项的选项,可以用<>捕获。

## '<>'只能指向函数引用,可以通过函数做很多有意义的事GetOptions(    '<>' => /&handle,) or die ;sub handle {    my $catch = shift;    print "catch: $catch/n";}

Getopt::Long::Configure()

指定Getoptions的各项特性

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台