Perl6: como leio parâmetros mistos na linha de comando?

9

Estou excluindo a postagem porque não fui consultado sobre a censura / edição.

Todd
fonte
Veja, por exemplo, Getopt :: Long
Håkon Hægland:
Olá, @Todd. Percebo que você ficou chateado com as edições de outras pessoas, provavelmente porque você não está familiarizado com o modo como o SO funciona em relação às edições , por exemplo, editando 'obrigado' . No entanto, sua própria edição da sua pergunta é perturbadora para os outros, pois desvaloriza o tempo / esforço daqueles que responderam a você e outros que usam o SO. Por favor, considere me dar sua bênção para restabelecer sua pergunta como ela era .
raiph

Respostas:

9

Aqui está um exemplo usando 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;

Exemplo de execução:

$ p.p6  -w xyz -q def -r abc hello
{help => False, q => def, r => abc, w => xyz}
[hello]
Håkon Hægland
fonte
@Todd Todos os argumentos que são processados ​​como opções são removidos de @*ARGSpor get-options(). Portanto, argumentos não opcionais são deixados @*ARGSdepois. Veja a resposta atualizada
Håkon Hægland
Ele define helpo valor padrão de 0. Provavelmente, seria melhor usar um booleano: help => Falseuma vez que a opção de ajuda normalmente é usada para mostrar uma mensagem de ajuda. Eu editei a resposta de modo que helpseja um booleano.
Håkon Hægland 01/12/19
8

Use o MAINsub :

#!/usr/bin/env raku

use v6;

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

Você pode digitar esses parâmetros em qualquer ordem:

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

E também capturará qualquer parâmetro extra, mostrando os parâmetros reais:

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

Se você estiver interessado apenas em parâmetros com um único traço, precisará de GetOpt :: Long, conforme indicado por Hakon

jjmerelo
fonte