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$

完!