diff options
| author | Ruben Westerberg <drclaw@mac.com> | 2019-07-20 17:12:37 +1000 |
|---|---|---|
| committer | Ruben Westerberg <drclaw@mac.com> | 2019-07-20 17:12:37 +1000 |
| commit | c63269a7a17da013a0f5bde97899323e34c84905 (patch) | |
| tree | 34de9802bbf59abecadb8d09376e55ef6c78c14b | |
| parent | 3c4cb2454d629dff131ce8ff9dd7056255b28d13 (diff) | |
| download | perlweeklychallenge-club-c63269a7a17da013a0f5bde97899323e34c84905.tar.gz perlweeklychallenge-club-c63269a7a17da013a0f5bde97899323e34c84905.tar.bz2 perlweeklychallenge-club-c63269a7a17da013a0f5bde97899323e34c84905.zip | |
Added ch2 solutions
| -rw-r--r-- | challenge-017/ruben-westerberg/README | 1 | ||||
| -rwxr-xr-x | challenge-017/ruben-westerberg/perl5/ch-2.pl | 31 | ||||
| -rwxr-xr-x | challenge-017/ruben-westerberg/perl6/ch-2.p6 | 12 |
3 files changed, 35 insertions, 9 deletions
diff --git a/challenge-017/ruben-westerberg/README b/challenge-017/ruben-westerberg/README index 1c2593c999..36e90655e8 100644 --- a/challenge-017/ruben-westerberg/README +++ b/challenge-017/ruben-westerberg/README @@ -8,3 +8,4 @@ calculated value and total recursion count as last output. ch-2.pl and ch-2.p6 === +Run the program with a command line argument (in single quotes). The argument is a URL to validate. diff --git a/challenge-017/ruben-westerberg/perl5/ch-2.pl b/challenge-017/ruben-westerberg/perl5/ch-2.pl new file mode 100755 index 0000000000..4441008227 --- /dev/null +++ b/challenge-017/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,31 @@ +#!/usr/bin/env perl +# +use strict; +use warnings; +use v5.26; + +my $frag=qr/[\w\d]+/; +my $qval=qr/[\w\d]+/; +my $qkey=qr/[\w\d]+/; +my $qpair=qr/$qkey\=$qval/; +my $query=qr/$qpair(?:\&$qpair)*/; +my $port=qr/\d+/; +my $path=qr/(\/(?:[\w\d\.]+\/?)+)/; +my $host=qr/[\w\d\.]+/; +my $user=qr/[\w\d]+/; +my $pass=qr/[\w\d]+/; +my $auth=qr/\/\/(?:($user)(?:\:($pass))?\@)?($host)(?:\:($port))?/; +my $scheme=qr/([a-z][a-z\-\.\+]+)/; +my $match=$ARGV[0]=~/$scheme\:$auth?$path(?:\?($query))?(?:\#($frag))?/; +die "Not a URI\n" unless $match; +my @out=( + "Scheme: ".($1//""), + "User: ".($2//""), + "Password: ".($3//""), + "Host: ".($4//""), + "Port: ".($5//""), + "Path ".($6//""), + "Query: ".($7//""), + "Fragment: ".($8//""), +); +print join "\n", @out; diff --git a/challenge-017/ruben-westerberg/perl6/ch-2.p6 b/challenge-017/ruben-westerberg/perl6/ch-2.p6 index 0d6d955f9d..9ec56c4730 100755 --- a/challenge-017/ruben-westerberg/perl6/ch-2.p6 +++ b/challenge-017/ruben-westerberg/perl6/ch-2.p6 @@ -3,7 +3,7 @@ grammar URI { token TOP {<scheme>\:<authority>?<path>[\?<query>]?[\#<fragment>]?};##|<authority>}; token scheme { :i(<alpha>[<[\-\.\+] + alnum>]*)}; - token path { (\/<alpha>*)+}; + token path { (\/[<alnum>\/?]*)+}; token authority { (\/\/)[<user>[\:<password>]?\@]?<host>[\:<port>]?}; token user { (<alnum>+)}; token password { ( <alnum> +)}; @@ -15,22 +15,16 @@ grammar URI { 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 "User: {.<user>//""}"; put "Password: {.<password>//""}"; - put "Host: {.<host>}"; + put "Host: {.<host>//""}"; put "Port: {.<port>//""}"; } put "Path: {.<path>//""}"; |
