Легкий способ проверить правильные параметры командной строки в Perl?
Я ищу простой способ проверить правильное количество параметров командной строки, отображая сообщение об использовании, если произошла ошибка, а затем сразу же выйти.
Я подумал о чем-то вроде
if (@ARGV < 3) {
print STDERR "Usage: $0 PATTERN [FILE...]\n";
exit 1;
}
Является ли это допустимым шаблоном? Sry, я полный Perl noob: -).
Ответы
Ответ 1
Кроме того, я бы настоятельно предложил использовать идиоматический способ обработки аргументов командной строки в Perl, Getopt::Long
module (и начать использовать именованные параметры, а не на основе положения).
Вы действительно НЕ УХОДИТЕ, если у вас есть < 3 параметра. Обычно вам нужны параметры a, b и C.
Что касается дизайна интерфейса командной строки, то 3 параметра касаются того, где срез находится между позиционными параметрами (cmd <arg1> <arg2>
) по именованным параметрам в любом порядке (cmd -arg1 <arg1> -arg2 <arg2>
).
Итак, вам лучше делать:
use Getopt::Long;
my %args;
GetOptions(\%args,
"arg1=s",
"arg2=s",
"arg3=s",
) or die "Invalid arguments!";
die "Missing -arg1!" unless $args{arg1};
die "Missing -arg2!" unless $args{arg2};
die "Missing -arg3!" unless $args{arg3};
Ответ 2
Другой распространенный способ сделать это - использовать die
die "Usage: $0 PATTERN [FILE...]\n" if @ARGV < 3;
Вы можете получить дополнительную помощь по специальной переменной @ARGV
в командной строке:
perldoc -v @ARGV
Ответ 3
Да, все в порядке. @ARGV
содержит аргументы командной строки и оценивает в скалярном контексте их число.
(Хотя похоже, что вы имели в виду @ARGV < 2
или < 1
из вашего сообщения об ошибке.)
Ответ 4
Используйте $# ARGV, чтобы получить общее количество переданных аргументов perl script следующим образом:
if (@#ARGV < 4)
Я использовал до и работал, как показано в http://www.cyberciti.biz/faq/howto-pass-perl-command-line-arguments/.
Смотрите исходную документацию в http://perldoc.perl.org/perlvar.html, она заявляет, что:
@ARGV
В массиве @ARGV содержатся аргументы командной строки, предназначенные для script. $# ARGV - это, как правило, количество аргументов минус единица, потому что $ARGV [0] - это первый аргумент, а не имя самой команды программы. См. $0 для имени команды.
Ответ 5
Вы можете сравнить с $# ARGV вместо массива @ARGV
if ($#ARGV < 3) { ...