perl的Getopt::Long和pod::usage

本文介绍了一个使用Perl语言实现的命令行参数解析程序。该程序利用Getopt::Long模块来处理命令行输入,并通过Pod::Usage模块提供帮助信息。文章展示了如何定义和初始化变量、配置选项类型以及如何在代码中使用这些选项。


代码:

需要显式地定义变量且初始化。例如optionX。

如果没有定义变量且显式初始化,且没有在命令行指定选项,则选项对应的变量将为未定义。

 

#!/bin/perl-5.8.3/bin/perl$
use warnings;$
use strict;$

use Data::Dumper;$
use Getopt::Long;$
use Pod::Usage;$

our $g_opts;
our $optionX=''#if not defined in command line, it will be empty string
sub parse_opts{
    my $result = GetOptions(
                    "optionA=s" => \$g_opts->{'optionA'},#string
                    "optionB=s" => \$g_opts->{'optionB'},#string
                    "optionC=i" => \$g_opts->{'optionC'},#integer
                    "optionD=f" => \$g_opts->{'optionD'},#float
                    "optionX=f" => \$optionX,
                    "optionY=f" => \$optionY,
                    "verbose"   => \$g_opts->{'verbose'},#flag
                    "quiet"     => sub { $g_opts->{'verbose'} = 0 },
                    "help|?"    => \$g_opts->{'help'}
                  );
    if(!($g_opts->{'optionA'})){
        &pod2usage( -verbose => 1);#exit status will be 1
    }
    if($g_opts->{'help'}){
        &pod2usage( -verbose => 1);#exit status will be 1
    }
}

&parse_opts();
print("\n$optionX\n");
print($optionY); #if not defined in command line, it will be undefined
print($g_opts->{"optionB"});

foreach my $key (keys %{$g_opts}){$
  if(!$g_opts->{$key}) {next;} $
  print($key . "=" . $g_opts->{$key} . "\n");$
  }$
$
exit(0);$
$

$
__END__$
$
=head1 NAME$
$
sample - Using Getopt::Long and Pod::Usage$
$
=head1 SYNOPSIS$
$
sample [options] [args ...]$
$
Options: $
$
   -optionA         optionA $
   -optionB         optionB$
   -optionC         optionC $
   -optionD         optionD $
   -verbose         verbose $
   -quiet           noverbose $
   -help            brief help message$
$
=head1 OPTIONS$
$
=over 8$
$
=item B<-help>$
$
Print a brief help message and exits.$
$
=back$
$
=head1 DESCRIPTION$
$
B<This program> will read the given input file(s) and do something$
useful with the contents thereof.$
$
=cut$


 

完! 

error: Failed dependencies: mha4mysql-node >= 0.54 is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Carp) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Config::Tiny) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(DBI) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Data::Dumper) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(English) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Errno) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(File::Basename) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(File::Copy) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Getopt::Long) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(IO::File) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Log::Dispatch) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Log::Dispatch::File) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Log::Dispatch::Screen) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(MHA::BinlogManager) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(MHA::NodeConst) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(MHA::NodeUtil) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(MHA::SlaveUtil) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(POSIX) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Parallel::ForkManager) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Pod::Usage) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Sys::Hostname) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(Time::HiRes) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(constant) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(strict) is needed by mha4mysql-manager-0.56-0.el6.noarch perl(warnings) is needed by mha4mysql-manager-0.56-0.el6.noarch
最新发布
08-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值