использование Getopt :: Std и Getopt :: Long в скрипте Perl - PullRequest
0 голосов
/ 02 июля 2018

У меня есть существующий скрипт на Perl, который хэширует множество опций командной строки, которые обрабатываются с помощью Getopt :: Std (функция getopts). Но я хочу добавить 2 новые опции с "--testrun" и "--cfgarray". Поэтому я использовал use Getopt :: Long; и GetOptions ('testrun' => \ $ test_flag); «--testrun» не принимает аргументов. Просто используется как флаг вроде if ($ test_flag). Работает, когда работает отдельно. Но так как в моем Perl-скрипте есть оба, используйте Getopt :: Long; и использовать Getopt :: Std; - оба я получаю ошибку - неизвестные опции из getopts api (когда он вызывается перед GetOptions). Можно ли использовать Getopt :: Std и Getopt :: Long в одном скрипте perl. Пожалуйста, помогите мне. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Getopt::Std и Getopt::Long оба просто интерпретируют @ARGV, поэтому, если вы поиграетесь с этим, это теоретически Можно использовать оба из них в одном скрипте или вызывать GetOptions более одного раза. Однако, Я бы не советовал - просто используйте Getopt::Long.

Этот код:

use Getopt::Std;
getopts('a:b', \my %opts) or die "Bad options\n";

можно перевести на:

use Getopt::Long;
GetOptions(\my %opts, 'a=s', 'b') or die "Bad options\n";

и затем вы можете добавить дополнительные параметры и длинные параметры. Здесь я добавил короткий псевдоним -t для опции --testrun, просто для демонстрации:

use Getopt::Long;
GetOptions(\my %opts, 'a=s', 'b',
    'testrun|t', 'cfgarray' ) or die "Bad options\n";
0 голосов
/ 02 июля 2018

AFAIK, вы не можете использовать оба, но Getopt :: Long поддерживает также короткие опции, поэтому вы можете придерживаться его.

...