Perl6: Karışık parametreleri komut satırından nasıl okuyabilirim?


9

Sansür / düzenleme konusunda istişare görmediğim için yazıyı siliyorum.



Merhaba @Todd. Muhtemelen başkalarının düzenlemelerinden rahatsız olduğunuzu görebiliyorum, muhtemelen SO'nun düzenlemelerle ilgili nasıl çalıştığını bilmiyorsunuz , örneğin 'teşekkürler' düzenleme . Ancak, sorunuzu kendi düzenlemeniz, sizi yanıtlayanların ve SO'yu kullananların zamanını / çabasını değersizleştirdiği için başkalarına üzülüyor. Lütfen sorunuzu eski haline getirmek için bana nimetinizi vermeyi düşünün .
Raiph

Yanıtlar:


9

İşte Getopt :: Long kullanan bir örnek :

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;

Örnek çalışma:

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

@Todd Seçenek olarak işlenen tüm bağımsız değişkenler @*ARGStarafından tarafından kaldırılır get-options(). Böylece seçenek olmayan argümanlar @*ARGSsonradan bırakılır . Güncel yanıtı görün
Håkon Hægland

helpVarsayılan 0 değerine ayarlar . Muhtemelen bir boolean kullanmak daha iyi olur: help => Falseçünkü yardım seçeneği tipik olarak bir yardım mesajını göstermek için kullanılır. Cevabı helpbir boolean olacak şekilde düzenledim .
Håkon Hægland

8

MAINAlt metni kullanın :

#!/usr/bin/env raku

use v6;

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

Bu parametreleri istediğiniz sırayla yazabilirsiniz:

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

Ayrıca, gerçek parametreleri gösteren herhangi bir ekstra parametreyi yakalar:

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

Sadece tek bir tire ile parametrelerle ilgileniyorsanız, Hakon tarafından belirtildiği gibi GetOpt :: Long'a ihtiyacınız olacak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.