Простой способ проверить действительные параметры командной строки в Perl? - PullRequest
12 голосов
/ 17 февраля 2011

Я ищу простой способ проверить правильность количества параметров командной строки, отобразить сообщение об использовании в случае возникновения ошибки и сразу же выйти.

Я думал о чем-то вроде

if (@ARGV < 3) {
  print STDERR "Usage: $0 PATTERN [FILE...]\n";
  exit 1;
}

Это правильный шаблон? Извините, я полный Perl Noob: -).

Ответы [ 5 ]

28 голосов
/ 17 февраля 2011

Кроме того, я бы СТРОГО предложил использовать идиоматический способ обработки аргументов командной строки в Perl, Getopt::Long модуле (и начать использовать именованные параметры, а не основанные на позиции).

Вы не оченьУХОД, если у вас <3 параметра.Обычно вас волнует, есть ли у вас параметры a, b и C. </p>

Что касается дизайна интерфейса командной строки, то 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};
12 голосов
/ 17 февраля 2011

Другой распространенный способ сделать это - использовать die

die "Usage: $0 PATTERN [FILE...]\n" if @ARGV < 3;

Вы можете получить дополнительную помощь по специальной переменной @ARGV в командной строке:

perldoc -v @ARGV
5 голосов
/ 17 февраля 2011

Да, это нормально. @ARGV содержит аргументы командной строки и вычисляет в их скалярном контексте их число.

(хотя, похоже, вы имели в виду @ARGV < 2 или < 1 из сообщения об ошибке.)

1 голос
/ 24 января 2013

Используйте $ # ARGV, чтобы получить общее количество переданных аргументов в Perl-скрипт, например:

if (@#ARGV < 4)

Я использовал раньше и работал, как показано в http://www.cyberciti.biz/faq/howto-pass-perl-command-line-arguments/.

См. Оригинальную документацию по http://perldoc.perl.org/perlvar.html,, в которой говорится:

@ ARGV

Массив @ARGV содержит аргументы командной строки, предназначенные для скрипта. $ # ARGV - это обычно количество аргументов минус один, потому что $ ARGV [0] является первым аргументом, а не самим именем команды программы. См. $ 0 для названия команды.

0 голосов
/ 17 февраля 2011

Вы можете сравнить с $ # ARGV вместо массива @ ARGV

if ($#ARGV < 3) { ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...