Может ли Getopt :: Long содержать имена параметров переменных?

StackOverflow https://stackoverflow.com/questions/6331951

  •  27-10-2019
  •  | 
  •  

Вопрос

Я пишу сценарий, который может делать что-то вроде:

имя-скрипта --resource1= xxx --resource2= xxx

Но это может доходить до 50+.Есть ли способ заставить GetOpt принимать имена динамических параметров?

Это было полезно?

Решение

Как насчет автоматического создания списка опций для Getopt :: Long , напримерпример ниже?Поскольку список параметров, скорее всего, будет довольно длинным, использование Getopt :: ArgvFile позволяетвы должны предоставить файл конфигурации с параметрами вместо того, чтобы указывать их в командной строке.

родовое слово

Другие советы

Будет ли он работать с тем же именем параметра повторяется ?

Например: script-name --resource=xxx --resource=xxx

Да, поскольку я только что понял, как это сделать сам, поскольку я хотел принять аргумент - #, а Getopt :: Long не принимает регулярное выражение для имени параметра. Вот что я сделал:

родовое слово

Затем я определил функцию filearg ():

родовое слово

Итак, что нам нужно, так это опция pass_through, проверка того, что вы хотите, и установка этих параметров, когда они видны. Выше мне были переданы неопределенные параметры моей функции. Я использую это для проверки файлов и для специальной опции - # где # - некоторое целое число. Если он не совпадает, я добавляю его в массив badargs, так как это не приведет к сбою GetOptions, поэтому я должен проверить этот массив после возврата из GetOptions, чтобы увидеть, были ли обнаружены ошибки. Вы также можете завершить его при ошибке параметра, завершив функцию обратного вызова с помощью die("!FINISH");, что приведет к завершению работы сценария GetOptions.

Я использую его для того, чтобы иметь что-то вроде -20 ФАЙЛ1 -30 ФАЙЛ2, поэтому параметры можно переопределить для последующих файлов. Я вижу, что вы можете сделать что-то подобное с проверкой первой части имени параметра, а затем значения. Итак, если все ваши параметры начинаются с --resource, поищите в своей функции что-то вроде этого: /^--?(resource\w+)=(.*)$/, а затем добавьте в массив параметров.

В любом случае, надеюсь, это поможет.

Еще один способ попробовать - просто использовать какой-то файл конфигурации.Похоже, что это самый простой способ как для записи, так и для синтаксического анализа, учитывая, что вы планируете иметь большой объем информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top