Perl6: як я можу прочитати змішані параметри з командного рядка?


9

Я видаляю цю посаду, оскільки мені не дали консультації щодо цензури / редагування.


Дивіться, наприклад, Getopt :: Long
Håkon Hægland

Привіт @Todd Я можу бачити, що ви були засмучені іншими правками, імовірно, тому, що ви не знайомі з тим, як працює SO щодо редагувань , наприклад, редагування "спасибі" . Однак ваша власна редакція вашого запитання сама по собі засмучує інших, оскільки знецінює час / зусилля тих, хто відповів на вас, та інших, хто використовує ТАК. Будь ласка, подумайте, надайте мені своє благословення відновити своє питання таким, яким воно було .
raiph

Відповіді:


9

Ось приклад використання Getopt :: Long :

use v6;
use Getopt::Long;

my %opt = help => False, 'r=s' => "", 'q=s' => "", 'w=s' => "";
my %options = get-options(%opt).hash;
say %options;
say @*ARGS;

Приклад виконання:

$ p.p6  -w xyz -q def -r abc hello
{help => False, q => def, r => abc, w => xyz}
[hello]

@Todd Усі аргументи, які обробляються як параметри, видаляються @*ARGSкористувачем get-options(). Тож аргументи без варіантів залишаються @*ARGSзгодом. Дивіться оновлену відповідь
Håkon Hægland

Він встановлює helpзначення за замовчуванням 0. Напевно, було б краще використовувати булевий: help => Falseоскільки параметр довідки зазвичай використовується для відображення довідкового повідомлення. Я відредагував відповідь таким, що helpє логічним.
Håkon Hægland

8

Використовуйте MAINпідпункт :

#!/usr/bin/env raku

use v6;

sub MAIN(:$these ="These", :$are="Are", :$params="Params") {
    say "$these $are $params";
}

Ви можете ввести ці параметри в будь-якому порядку:

./command-line.p6 --are=well --these=those
those well Params

А також буде вловлювати будь-який додатковий параметр, показуючи фактичні параметри:

./command-line.p6 --are=well --these=those --not=this_one
Usage:
  ./command-line.p6 [--these=<Any>] [--are=<Any>] [--params=<Any>]

Якщо вас цікавлять лише параметри з одним тире, вам знадобиться GetOpt :: Long, як вказав Hakon

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.