У меня есть скрипт, который должен принимать два аргумента из командной строки. Для этого я использую модуль 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 аргументов?
HelpMessage
в соответствии с вашим кодом выполняются после печати, после выполненияdoSomeOperation
и после печатиEND
. Вы должны поставить эту проверку сразу после вызоваGetOptions
. - person Steffen Ullrich   schedule 14.09.2020