Обнаружение неоднозначных вариантов с Getopt::Long
Есть ли простой способ обнаружить неоднозначные параметры с помощью модуля Perl Getopt::Long?
Например:
#!/usr/bin/env perl
# test ambiguous options
use Getopt::Long;
my $hostname = 'localhost';
GetOptions( help => sub { print "call usage sub here\n"; exit },
'hostname=s' => \$hostname,
);
print "hostname == '$hostname'\n";
По умолчанию Getopt:: Long поддерживает уникальные сокращения. Для неуникальных сокращений выдается предупреждение, и сценарий продолжает свой веселый путь.
./t.pl -h not_localhost
Option h is ambiguous (help, hostname)
hostname == 'localhost'
Я бы хотел, чтобы мой сценарий немедленно отключался при неоднозначных параметрах немедленного уведомления и чтобы он не работал с неожиданными настройками по умолчанию.
1 ответ
Решение
GetOptions
возвращает false, чтобы указать сбой.
Пытаться:
GetOptions( help => sub { print "call usage sub here\n"; exit },
'hostname=s' => \$hostname,
)
or die "You failed";
Подумайте о том, чтобы быть добрыми к своим пользователям и использовать Pod::Usage
, Мои собственные сценарии обычно выглядят примерно так:
use warnings;
use strict;
use Getopt::Long;
use Pod::Usage;
GetOptions(...)
or pod2usage(2);
[actual code]
__END__
=head1 NAME
myscript.pl - My Awesome Script
=head1 SYNOPSYS
[etc.]