如何使用Getopt :: Long识别未知选项?
我试过'<>',但它没有按预期工作。考虑:
use Modern::Perl;
use Getopt::Long;
my $help='';
GetOptions ('help' => \$help,'<>' => \&usage);
usage() if $help;
usage() if @ARGV != 1;
my $fn=pop;
say "FileName: $fn";
sub usage {
say "Unknown option: @_" if ( @_ );
say "Usage: $0 <filename>";
say " $0 --help";
say "";
exit
}
我想仅在存在无法识别的选项时打印Unknown option
(在这种情况下,除了--help
之外的任何其他选项)。但现在它认为文件名是一个无法识别的选项..
答案 0 :(得分:4)
如果usage
失败,请致电GetOptions
功能。 Getopt::Long会为您打印Unknown option
(到STDERR):
use Modern::Perl;
use Getopt::Long;
my $help='';
GetOptions ('help' => \$help) or usage();
usage() if $help;
usage() if @ARGV != 1;
my $fn=pop;
say "FileName: $fn";
sub usage {
say "Usage: $0 <filename>";
say " $0 --help";
say "";
exit
}
答案 1 :(得分:4)
开始使用pod文档作为核心模块Getopt::Long
和Pod::Usage
可以很好地协同工作。可以获得所需的行为,而无需创建辅助方法来完成它:
这是一个示例脚本:
#!/usr/bin/perl
use File::Basename qw(basename);
use Getopt::Long qw(GetOptions);
use Pod::Usage qw(pod2usage);
use Readonly;
use version;
use strict;
use warnings;
Readonly my $VERSION => qv('0.0.1');
Readonly my $EXE => basename($0);
GetOptions(
'version' => \my $version,
'usage' => \my $usage,
'help|?' => \my $help,
'man' => \my $man,
) or pod2usage(-verbose => 0);
pod2usage(-verbose => 0) if $usage;
pod2usage(-verbose => 1) if $help;
pod2usage(-verbose => 2) if $man;
if ($version) {
print "$EXE v$VERSION\n";
exit;
}
## Check for File
pod2usage("$EXE: No filename specified.\n") unless @ARGV;
my $file = $ARGV[0];
pod2usage("$EXE: $file is a directory.\n") if -d $file;
pod2usage("$EXE: $file is not writable.\n") if !-w $file;
#....
print "Hello World\n";
#....
1;
__END__
=head1 NAME
hello.pl - Mirrors a script using pod
=head1 SYNOPSIS
./hello.pl [FILE]
=head1 OPTIONS
=over 4
=item --version
Print the version information
=item --usage
Print the usage line of this summary
=item --help
Print this summary.
=item --man
Print the complete manpage
=back
=head1 DESCRIPTION
Sometimes a programmer just enjoys a bit of documentation.
They can't help themselves, it makes them feel accomplished.
=head1 AUTHOR
Written by A Simple Coder
输出:
>perl hello.pl --test
Unknown option: test
Usage:
./hello.pl [FILE]