Варианты с плюсом вместо минуса

Некоторые инструменты командной строки допускают использование параметров с + помимо -.

Например, ImageMagick позволяет использовать опцию Transparent для инвертирования совпадающих пикселей.

Я хотел бы сделать что-то подобное в Perl.

Это осуществимо? есть ли варианты сделать это в Getopt::Long или это будет возможно с помощью некоторого подкласса - в идеале Getopt::Long::Descriptive?

И вообще, хорошая ли это идея?

См. вариант prefix_pattern для Getopt::Long. По умолчанию + является приемлемым вариантом начала спора.

chepner 27.08.2024 22:06

На вопрос «а это вообще хорошая идея?» Изобретать новые стили опций — ужасная идея.

ikegami 28.08.2024 15:04
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я создал скрипт , используя + вместо - , используя метод ConfigureGetopt::Long:

Getopt::Long::Configure('prefix=+');

как описано здесь и конкретно prefix, prefix_pattern и long_prefix_pattern.

И вообще, хорошая ли это идея?

В некотором смысле я сожалею о своем решении сделать это.

См. также Getopt::Long::Configure('getopt_compat'), который позволяет либо -, либо + запускать опции. Это включено по умолчанию, если не установлена ​​переменная среды POSIXLY_CORRECT. 'prefix=+' следует разрешить + и запретить -. См. также prefix_pattern, который по умолчанию равен --|-|+ или --|-. Не стесняйтесь добавлять эту информацию в свой ответ.

Keith Thompson 28.08.2024 00:17

@ikegami вы можете использовать prefix_pattern Шаблон Perl, который определяет строки, которые представляют параметры. По умолчанию используется --|-|\+, если не установлена ​​переменная среды POSIXLY_CORRECT, в этом случае это --|-.

simone 28.08.2024 09:35

Оператор хочет знать, какой префикс был использован. Я не понимаю, как это позволяет.

ikegami 28.08.2024 15:07

Ха! этого не уловил! (Я операционист, но это меня не извиняет). мне придется еще немного подумать и попробовать

simone 28.08.2024 16:32

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».

simone 28.08.2024 09:37

Разве что-то вроде --volume=n (где находится число от 0 до 100) не имело бы больше смысла?

ikegami 28.08.2024 15:08

Вы также можете поставить --volume=+ или --volume=-

ikegami 28.08.2024 15:18

Ага. Я экспериментирую с вариантами, чтобы увидеть, что работает лучше всего. Очевидно, +v и -v самые короткие. Но большое спасибо, что нашли время ответить.

simone 28.08.2024 16:30

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