Некоторые инструменты командной строки допускают использование параметров с +
помимо -
.
Например, ImageMagick позволяет использовать опцию Transparent для инвертирования совпадающих пикселей.
Я хотел бы сделать что-то подобное в Perl.
Это осуществимо? есть ли варианты сделать это в Getopt::Long или это будет возможно с помощью некоторого подкласса - в идеале Getopt::Long::Descriptive?
И вообще, хорошая ли это идея?
На вопрос «а это вообще хорошая идея?» Изобретать новые стили опций — ужасная идея.
Я создал скрипт , используя + вместо - , используя метод Configure
Getopt::Long:
Getopt::Long::Configure('prefix=+');
как описано здесь и конкретно prefix
, prefix_pattern
и long_prefix_pattern
.
И вообще, хорошая ли это идея?
В некотором смысле я сожалею о своем решении сделать это.
См. также Getopt::Long::Configure('getopt_compat')
, который позволяет либо -
, либо +
запускать опции. Это включено по умолчанию, если не установлена переменная среды POSIXLY_CORRECT
. 'prefix=+'
следует разрешить +
и запретить -
. См. также prefix_pattern
, который по умолчанию равен --|-|+
или --|-
. Не стесняйтесь добавлять эту информацию в свой ответ.
@ikegami вы можете использовать prefix_pattern
Шаблон Perl, который определяет строки, которые представляют параметры. По умолчанию используется --|-|\+, если не установлена переменная среды POSIXLY_CORRECT, в этом случае это --|-.
Оператор хочет знать, какой префикс был использован. Я не понимаю, как это позволяет.
Ха! этого не уловил! (Я операционист, но это меня не извиняет). мне придется еще немного подумать и попробовать
Getopt::Long не поддерживает этот стиль отрицательных опций, но поддерживает тот, который я предпочитаю.
Вместо того, чтобы делать +foo
противоположным -foo
, он делает --no-foo
и --nofoo
противоположными --foo
.
Опция типа !
отрицательна.
Например, следующее определяет verbose
как отрицательную опцию:
'verbose!' => \$opt_verbose
$opt_verbose
истинное значение, если --verbose
используется.$opt_verbose
, если используется --no-verbose
или --noverbose
.И вообще, хорошая ли это идея?
У меня нет проблем с отрицательными вариантами.
Что касается конкретного стиля отрицательного варианта, который вы запросили,
+foo
, означающее «нет фу». Я ассоциирую +
с добавлением или включением.-
и +
означает, что вы не можете объединить опции.Стиль, используемый Getopt::Long, не имеет ни одного из этих недостатков.
На самом деле цель в моем случае использования состоит в том, чтобы это означало именно добавление или включение, как в «+volume» и «-volume».
Разве что-то вроде --volume=n
(где находится число от 0 до 100) не имело бы больше смысла?
Вы также можете поставить --volume=+
или --volume=-
Ага. Я экспериментирую с вариантами, чтобы увидеть, что работает лучше всего. Очевидно, +v
и -v
самые короткие. Но большое спасибо, что нашли время ответить.
См. вариант
prefix_pattern
дляGetopt::Long
. По умолчанию+
является приемлемым вариантом начала спора.