Это всего лишь один из нескольких проверок вам необходимо выполнить после возврата GetOptions
.
- Необходимо проверить, удалось ли выполнить
GetOptions
.
- Возможно, вам потребуется проверить значение, предоставленное для каждого необязательного аргумента.
- Возможно, вам нужно будет проверить количество аргументов в
@ARGV
.
- Возможно, вам придется проверить аргументы в
@ARGV
.
Вот как я выполняю эти проверки:
use Getopt::Long qw();
my %sizes = map { $_ => 1 } qw(small medium large);
my $opt_size;
sub parse_args {
Getopt::Long::Configure(qw(:posix_default));
$opt_size = undef;
Getopt::Long::GetOptions(
'help|h|?' => \&exit_with_usage,
'size=s' => \$opt_size,
)
or exit_bad_usage();
exit_bad_usage("Invalid size.\n")
if defined($size) && !$sizes{$size};
exit_bad_usage("Invalid number of arguments.\n")
if @ARGV;
}
Вот как я обрабатывать неудачи:
use File::Basename qw(basename);
sub exit_with_usage {
my $prog = basename($0);
print("usage: $prog [options]\n");
print(" $prog --help\n");
print("\n");
print("Options:");
print(" --size {small|medium|large}\n");
print(" Controls the size of ...\n"
exit(0);
}
sub exit_bad_usage {
my $prog = basename($0);
warn(@_) if @_;
die("Use $prog --help for help\n");
exit(1);
}
Я не видел, что Getopt :: Long действительно имеет ту особенность тоже. Рассмотрите это как альтернативу TIMTOWTDI. – simbabque