Легкий способ проверить правильные параметры командной строки в 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) { ...