Я пытаюсь создать скрипт (написанный на Perl), который получает аргументы.Вызов должен выглядеть следующим образом:
./script [action] --option1 --option2 ... --optionK
Для этого я использую модуль GetOptions:Long
.Также я использую $ARG[0]
, чтобы получить действие.Пример:
./script report --color black --version 19.4
Теперь я хотел бы дать пользователю возможность вставлять любую команду, которую он хочет (например, он может вставить другой скрипт с аргументами).Я хотел сделать это так: пользователь может вставить все, что он хочет, в конец (только) аргументов командной строки, например:
./script report --color black --version 19.4 more and more --info 551_5 from --the user
Я хотел бы проанализировать этот массив @ARGV
ивставьте дополнительную информацию в переменную:
$additional = "more and more --info 551_5 from --the user"
Я обнаружил, что после использования GetOptions
он удалит эти параметры (не включая $ARGV[0]
) из массива @ARGV
.Проблема в том, что я действительно не знаю, как получить дополнительную информацию из массива.Может быть, я должен добавить дополнительную опцию, что-то вроде этого:
./script report --color black --version 19.4 --additional more and more --info 551_5 from --the user
И получить все в additional
.Но в этом случае у меня есть другая проблема - он будет обрабатывать --info
и --the
в качестве аргументов.
Как мне решить эту проблему?
EDIT :Я видел, что pass_through
можно использовать.Но что, если у пользователя есть опция, похожая на одну из моих доступных?Это может сделать некоторые проблемы.Можно ли справиться с этим так же, как строка?Также таким образом мне придется проанализировать @ARGV
и удалить $ARGV[0]
(действие).
EDIT-2 : метод --
будет работать.Но мне кажется, что это обходной путь, а не правильный способ решения этой проблемы.Должен быть более чистый способ сделать это.Может быть, поменять на другой модуль?