Выйти из сценария, если требуемые аргументы не найдены в Perl

У меня есть скрипт, который должен принимать два аргумента из командной строки. Для этого я использую модуль Getopt::Long Perl.

Вот сценарий:

#!/usr/bin/perl

use strict;
use warnings;

use Getopt::Long 'HelpMessage';

GetOptions(
  'node|n=s' => \my $node,
  'cmd|c=s'  => \my $command,
  'help'     =>  sub { HelpMessage(0) }
) or HelpMessage(1);

print "Node:$node\nCmd:$command\n";

doSomeOpearation($node, $command);

print "END\n";

sub doSomeOpearation {
    my ($n, $c) = @_;
    #...
    return;
}

HelpMessage(1) unless ($node && $command);

=head1 NAME

run_command - Run Commands on SVC Server

=head1 SYNOPSIS

  --node,-n       Node name (required)
  --command,-c    Command (required)
  --help,-h       Print this help

=head1 VERSION

1.00

=cut

Сценарий отлично работает в положительном сценарии, т. Е. Если я передаю 2 аргумента сценарию, он печатает эти аргументы на экране.

Но, если я передам скрипту только один аргумент, он должен перейти к функции HelpMessage. Вместо этого здесь скрипт дает мне Use of uninitialized value $command in concatenation (.) or string at script2.pl line 14. предупреждение и также печатает END сообщение.

Как я могу напечатать HelpMessage и выйти из сценария, если нет 2 аргументов?


person vkk05    schedule 14.09.2020    source источник
comment
Проверка и вызов HelpMessage в соответствии с вашим кодом выполняются после печати, после выполнения doSomeOperation и после печати END. Вы должны поставить эту проверку сразу после вызова GetOptions.   -  person Steffen Ullrich    schedule 14.09.2020
comment
@SteffenUllrich О да. Ты прав. Спасибо за исправление.   -  person vkk05    schedule 14.09.2020


Ответы (1)


Ваш чек приходит слишком поздно.

doSomeOpearation($node, $command);

...

HelpMessage(1) unless ($node && $command);

должно быть

HelpMessage(1) unless ($node && $command);

doSomeOpearation($node, $command);

...
person ikegami    schedule 14.09.2020
comment
defined $node .. и т. д., если вы хотите, например, чтобы 0 было допустимым значением. - person TLP; 14.09.2020