Когда я последний раз проверял (пару лет назад), ни один из модулей 20-30 Getopt , перечисленных в CPAN, не будет обрабатывать строку аргументов, как вы показываете, и большинство аргументов на основе Cкод разбора, о котором я знаю, тоже не справляется.(У меня есть синтаксический анализатор кода C, который обрабатывает его, при условии, что вы знаете, сколько аргументов нужно использовать. Не ясно, требуется ли вам 1 ключ и 2 значения или список значений может быть более переменным, чем этот.)
Возможно, я не выглядел достаточно внимательно.
Getopt :: Long имеет опцию:
Предупреждение: ниже приводится экспериментальная функция.
Опции могут принимать несколько значений одновременно, например
--coordinates 52.2 16.4 --rgbcolor 255 255 149
Это может быть достигнуто путем добавления спецификатора повтора к спецификации опции.Спецификаторы повтора очень похожи на спецификаторы повтора {...}, которые можно использовать с шаблонами регулярных выражений.Например, приведенная выше командная строка будет обрабатываться следующим образом:
GetOptions('coordinates=f{2}' => \@coor, 'rgbcolor=i{3}' => \@color);
Пункт назначения для параметра должен быть массивом или ссылкой на массив.
Можно также указать минимальный имаксимальное количество аргументов, которое принимает опция.foo=s{2,4}
указывает параметр, который принимает не менее двух и не более 4 аргументов.foo=s{,}
указывает одно или несколько значений;foo:s{,}
обозначает ноль или более значений параметров.
Это создаст массив с ключом и двумя значениями в нем.Учитывая, что это должно сочетаться с возможностью иметь несколько записей (по одной на --filter
), вам все равно может не повезти, но вам следует мучительно тщательно исследовать Getopt::Long
.