处理命令行选项是一个很重复的事情,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