Обнаружение неоднозначных вариантов с Getopt :: Long - PullRequest
4 голосов
/ 19 июля 2011

Существует ли простой способ обнаружения неоднозначных опций с модулем 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 Ответ

7 голосов
/ 19 июля 2011

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.]
...