Как может я получать Getopt Perl:: Долго, чтобы говорить, отсутствуют ли аргументы?

Я использую Getopt Perl:: Длинный модуль для парсинга параметров командной строки. Однако кажется, что это возвращает истинное значение, даже если некоторые аргументы отсутствуют. Существует ли способ сказать, если это верно?

9
задан toolic 8 August 2010 в 14:28
поделиться

2 ответа

В обычном старом Getopt::Long вы не можете сделать это напрямую - как сказал Джонатан, вам нужно проверить ваши требования на undef. Однако, IMHO, это хорошая вещь - что такое "требуемый" параметр? Часто бывают параметры, которые требуются в одном случае и не требуются в другом -- наиболее распространенным примером здесь является больной палец опции --help. Он не обязателен, и если пользователь использует его, он, вероятно, не знает или не хочет передавать другие "обязательные" параметры.

Я использую эту идиому в некоторых своих кодах (ну, раньше использовал, пока не перешел на использование MooseX::Getopt):

use List:MoreUtils 'all';

Getopt::Long::GetOptions(\%options, @opt_spec);
print usage(), exit if $options{help};
die usage() unless all { defined $options{$_} } @required_options;

Даже с MooseX::Getopt я не устанавливаю свои атрибуты в required => 1, опять же из-за опции --help. Вместо этого я проверяю наличие всех необходимых мне атрибутов перед тем, как перейти к выполнению основной части программы.

package MyApp::Prog;
use Moose;
with 'MooseX::Getopt';

has foo => (
    is => 'ro', isa => 'Str',
    documentation => 'Provides the foo for the frobnitz',
);
has bar => (
    is => 'ro', isa => 'Int',
    documentation => 'Quantity of bar furbles to use when creating the frobnitz',
);

# run just after startup; use to verify system, initialize DB etc.
sub setup
{
    my $this = shift;

    die "Required option foo!\n" unless $this->foo;
    die "Required option bar!\n" unless $this->bar;

    # ...
}
5
ответ дан 4 December 2019 в 21:47
поделиться

Параметры необязательны, отсюда и название «Getopt».

Вы проверяете значения опций, которые установлены Getopt :: Long ; если одним из важнейших является ' undef ', он был пропущен, и вы можете его идентифицировать.

Возвращаемое значение говорит о том, что в командной строке не было грубых ошибок. Что представляет собой грубую ошибку, зависит от того, как вы используете Getopt :: Long , но классическим вариантом будет то, что командная строка содержит -o output , но команда не распознает -o параметр.

4
ответ дан 4 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: