diff options
| author | Ruben Westerberg <drclaw@mac.com> | 2019-07-19 21:55:23 +1000 |
|---|---|---|
| committer | Ruben Westerberg <drclaw@mac.com> | 2019-07-19 21:55:23 +1000 |
| commit | 3c4cb2454d629dff131ce8ff9dd7056255b28d13 (patch) | |
| tree | 60f0d3235419a93e59c652b2d8552bda43057f53 | |
| parent | 7ee9a1595d0d3eb6b56bf0adc01d1631a3679a1b (diff) | |
| download | perlweeklychallenge-club-3c4cb2454d629dff131ce8ff9dd7056255b28d13.tar.gz perlweeklychallenge-club-3c4cb2454d629dff131ce8ff9dd7056255b28d13.tar.bz2 perlweeklychallenge-club-3c4cb2454d629dff131ce8ff9dd7056255b28d13.zip | |
Added ch2 solution for p6
First time using grammars
| -rwxr-xr-x | challenge-017/ruben-westerberg/perl6/ch-2.p6 | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/challenge-017/ruben-westerberg/perl6/ch-2.p6 b/challenge-017/ruben-westerberg/perl6/ch-2.p6 new file mode 100755 index 0000000000..0d6d955f9d --- /dev/null +++ b/challenge-017/ruben-westerberg/perl6/ch-2.p6 @@ -0,0 +1,40 @@ +#!/usr/bin/env perl6 +# +grammar URI { + token TOP {<scheme>\:<authority>?<path>[\?<query>]?[\#<fragment>]?};##|<authority>}; + token scheme { :i(<alpha>[<[\-\.\+] + alnum>]*)}; + token path { (\/<alpha>*)+}; + token authority { (\/\/)[<user>[\:<password>]?\@]?<host>[\:<port>]?}; + token user { (<alnum>+)}; + token password { ( <alnum> +)}; + + token host { (<alnum>+)}; + token port { (<alnum>+)}; + token query { <qpair>[\&<qpair>]*}; + token qpair { (<qkey>\=<qval>)+}; + token qkey {<alnum>+}; + token qval {<alnum>+}; + token fragment { (<alnum>+)}; + ##token query { \?<alpha>+}; + ##token fragment { <alpha>+ }; +} + ##|(<authority><path>)<query>?<fragment>?}; + + +#say URI.parse("jdbc://user:password@localhost:3306/pwc?profile=true#h1"); +my $m=URI.parse(@*ARGS[0]); +die "Not a URI\n" unless $m; +#say $m; +given $m { + put "Scheme: {.<scheme>}"; + given .<authority> { + put "User: {.<user>}"; + put "Password: {.<password>//""}"; + put "Host: {.<host>}"; + put "Port: {.<port>//""}"; + } + put "Path: {.<path>//""}"; + put "Query: {.<query>//""}"; + put "Fragment: {.<fragment>//""}"; + +} |
