Getopt::Long


一,接受单个参数

#!/usr/bin/perl -w

use Getopt::Long;

my $name='aaa';
#my $length=24;

&GetOptions(
	'name=s' => \$name
);

print "name = ".$name."\n\n";


$perl getopt.pl -name bbb

$name =bbb

$perl getopt.pl

$name =aaa

总结:

1,name=s 后面的s是必要的,没有的话,不能正常接收。

2,my $name ='aaa';这里是设置缺省值,如果不输入参数的话,按照缺省值aaa

3,-name 后面跟参数,可以-name bbb,也可以-name=bbb,推荐使用-name=bbb

二,接受多个参数

#!/usr/bin/perl -w
use Getopt::Long;

my $name='zl';
my $length=24;

&GetOptions(
	'name=s' => \$name,
	"length=i" => \$length
);

print "name = ".$name."\n\n";
print "length = ".$length."\n\n";

总结:

1,可以输入好几个参数,-name=bbb -length=123。

2,输入参数的顺序可以打乱,-name=bbb -length=123 或者-length=123 -name=bbb 都能保证结果的正确性。

3,不输入参数的话,按照默认值。

三,接受多个参数和数组

#!/usr/bin/perl -w
use Getopt::Long;

my $name='zl';
my $length=24;
my @array;

&GetOptions(
	'name=s'   => \$name,
	"length=i" => \$length,
	"array=s"  => \@array
);

print "name = ".$name."\n\n";
print "length = ".$length."\n\n";
foreach (@array){
	print($_."\n");
}

总结:

1,可以添加数组,perl getopt.pl -array=abc -array=def,


注意看 GetOptions 中的 => 前面的部分.下面是详解

  • ‘verbose+’  接有 + 的选项不接收变量,后面不需要加内容.直接使用就行了,会在每次出现时增加一次变量,就是讲命行时在参数中 -verbose -verbose 出现二次时 verbose 的值就会变成 2.
  • ‘more!’        接有 ! 的选项不接收变量(也就是讲后面不需要加参数 –more 来使用就行了),只要命令行中出现了这个参数,就会默认是 1 ,是用来设置打开和关掉一个功能的>.可以在参数前加 no 变成负的例如-nomore.
  • ‘flag=s’        接有 = 的字符串要求接字符串(s)、整数(i),或者浮点(f)等类型的变量.
  • ‘debug:i’      接有 : 的选项会接受缺省为0或者为空字符串的可选变量 
  • ‘test|t’          接有 | 的选项表示可以给 –test 简写为 -t.
  • ‘lib=s’     => @libs    如果相关联的变量是个数组, 如这个地方的 @libs, 那么选项可以多次出现, 值可以被推到数组里.
  • ‘flag=s’    => %flags  如果相关联的变量是个散列, 那么就要求一个键=值(key=value)对, 并被插入到散列里.

备注:
     在匹配参数名的时候,GetOptions 在缺省设置下会忽略大小写,默认参数被简写为唯一的最短字符串(首字母)(例如,-m 代表 -more. 相同的首字母时,会加上第二个字母来区分)




参考文献 :

 http://search.cpan.org/~jv/Getopt-Long-2.42/lib/Getopt/Long.pm

 http://www.php-oa.com/2009/04/04/perl_getopt-long.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个 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、付费专栏及课程。

余额充值