Может ли Getopt :: Long содержать имена параметров переменных?
-
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+)=(.*)$/
, а затем добавьте в массив параметров.
В любом случае, надеюсь, это поможет.
Еще один способ попробовать - просто использовать какой-то файл конфигурации.Похоже, что это самый простой способ как для записи, так и для синтаксического анализа, учитывая, что вы планируете иметь большой объем информации.