Perl Getopt :: Long, поддерживающие пробелы для аргументов - PullRequest
2 голосов
/ 13 апреля 2011

У меня есть Perl-скрипт, который использует команду GetOpts long.A, например

automate -action build,deploy -modules chat,email,login легко обрабатывается.

Чего я хочу добиться, так это дать пользователю возможность ставить пробелы между аргументами.

Например,

automate -action build, deploy -modules chat, email, login

Проблема в том, что GetOpt::Long внутренне использует @ARGV, чтобы установить переменные по мере необходимости, и пробел изменяет массив @ARGV, который, в свою очередь, помещает только «build» как действие и только « chat 'как модуль для скрипта, игнорируя остальные переданные аргументы.

Есть ли простой способ разбора командной строки, подобной приведенной выше в perl?

Я надеюсь, что есть, потому что в противном случае мне придется использовать очень хакерский способ изменения массива @ARGV перед его передачей в GetOpts.

Существуют ли другие надежные библиотеки, которые будут делать это для меня?

--------------------------- Сделанный на заказ скрипт ----------------- ---------------

GetOptions("action=s{1,4}"=>\@myactions,
            "modules=s{,}"=>\@mymodules);

foreach(@mymodules)
{
      if($_ eq $mymodules[0])
      {
          $mymodules= $mymodules.$_;
          next;
      }
      if($dashboards =~ m/,$/ || $_ =~ m/^,/)
      {
          $mymodules= $mymodules.$_;
      }
      else
      {
          $mymodules= $mymodules.",".$_;
      }
}

Ответы [ 2 ]

4 голосов
/ 13 апреля 2011

Проверьте этот Опции с несколькими значениями в разделе pertod Getopt :: Long.Похоже, что вы ищете.

Пример:

    GetOptions ("action=s{,}" => \@valuelist);
    @values = split(/[\s,]+/,join(',' , @valuelist));

    # @values will contain the list of values passed to the option.
    # This can handle the scenarios:
    # <command> -action build,deploy
    # <command> -action build, deploy
    # <command> -action build deploy
0 голосов
/ 13 апреля 2011

Это нестандартное использование командной строки - поэтому вам понадобится нестандартный анализатор командной строки. При поиске 'getopt' в http://search.cpan.org/, будет указано около 180 отдельных записей, поэтому есть из чего выбирать.

Внешне вы просто хотите распознать несколько длинных имен параметров, а затем продолжать применять неопциональные аргументы к предыдущему имени параметра по мере их чтения.

Вы бы настаивали на запятых? Это кажется неуклюжим, чтобы сделать это. Я вижу:

automate -action build deploy -modules chat email login

Требование запятых в конце некоторых аргументов показалось бы странным.

Вам нужно подумать, имеет ли опция двойной тире особую значимость, и имеет ли особая значимость одна опция тире:

somecmd -f - --

Я не знаю ни одного модуля Perl, который обрабатывает выбранную вами нотацию, или каких-либо незначительных изменений в ней. Это не то же самое, что сказать, что такого модуля нет, но вы пытаетесь использовать немного необычный стиль разбора аргументов, поэтому вполне вероятно, что никто не реализовал именно то, что вы хотите.

...