Проблемы с getopts в perl - PullRequest
       52

Проблемы с getopts в perl

2 голосов
/ 04 августа 2020

Я использую Getopt::Std для обработки аргументов командной строки. Мои аргументы командной строки - это строки. У меня проблема with getopts () `, так как она работает только для односимвольных опций.

Как видно ниже, параметры« targetdir »являются обязательными, и скрипт должен выйти из строя, если какой-либо из них отсутствует. "block" НЕ является обязательной опцией.

Я не вижу, что %options был установлен с помощью приведенного ниже кода, и все мои параметры {key} равны NULL. Если бы я заменил «srcdir => s» и «targetdir => t», то следующий фрагмент кода работает. Это не работает с параметрами "-srcdir" "-targetdir". Как лучше всего решить мою проблему?

Режим использования:

perl test.pl -srcdir foo1 -targetdir hello1

#!/usr/bin/perl -w

use strict;
use Getopt::Std;

# declare the perl command line flags/opt we want to allow
my %options=();
my $optstring = 'srcdir:targetdir:block';
getopts( "$optstring", %options);

# test for the existence of the opt on the command line.
print "-srcdir $options{srcdir}\n" if defined $options{srcdir};
print "-targetdir $options{targetdir}\n" if defined $options{targetdir};
print "-blocks $options{block}\n" if defined $options{block};


# other things found on the command line
print "loop:\n" if ($#ARGV > 0);
foreach (@ARGV)
{
  print "$_\n";
}

1 Ответ

3 голосов
/ 04 августа 2020

Вы действительно хотите использовать Getopt :: Long для обработки таких слов, как srcdir:

use warnings;
use strict;
use Data::Dumper;
use Getopt::Long;

$Data::Dumper::Sortkeys=1; 

my %options;
GetOptions(\%options, qw(srcdir=s targetdir=s block));

print Dumper(\%options);
print Dumper(\@ARGV);

Причина, по которой ваш ha sh был пустым, заключалась в том, что вам нужно передать ссылку в ha sh, как показано в Getopt :: Std :

getopts( "$optstring", \%options);

Кроме того, поскольку Std обрабатывает только отдельные буквы, он интерпретирует srcdir как 6 отдельных вариантов: s, r, et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...