From c63269a7a17da013a0f5bde97899323e34c84905 Mon Sep 17 00:00:00 2001 From: Ruben Westerberg Date: Sat, 20 Jul 2019 17:12:37 +1000 Subject: Added ch2 solutions --- challenge-017/ruben-westerberg/README | 1 + challenge-017/ruben-westerberg/perl5/ch-2.pl | 31 ++++++++++++++++++++++++++++ challenge-017/ruben-westerberg/perl6/ch-2.p6 | 12 +++-------- 3 files changed, 35 insertions(+), 9 deletions(-) create mode 100755 challenge-017/ruben-westerberg/perl5/ch-2.pl 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 {\:?[\?]?[\#]?};##|}; token scheme { :i([<[\-\.\+] + alnum>]*)}; - token path { (\/*)+}; + token path { (\/[\/?]*)+}; token authority { (\/\/)[[\:]?\@]?[\:]?}; token user { (+)}; token password { ( +)}; @@ -15,22 +15,16 @@ grammar URI { token qkey {+}; token qval {+}; token fragment { (+)}; - ##token query { \?+}; - ##token 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: {.}"; given . { - put "User: {.}"; + put "User: {.//""}"; put "Password: {.//""}"; - put "Host: {.}"; + put "Host: {.//""}"; put "Port: {.//""}"; } put "Path: {.//""}"; -- cgit